我要做一个模拟数显表(下位机)的程序,但是怎样用SerialPort的某个属性或方法,知道上位机程序发来数据的校验方式是什么呢?
例如,上位机发送数据的校验方式是Parity.Mark,怎么获取这个值?
注意是采用SerialPort类,站在下位机角度考虑问题
例如,上位机发送数据的校验方式是Parity.Mark,怎么获取这个值?
注意是采用SerialPort类,站在下位机角度考虑问题
解决方案 »
- 关于“跪求System.Net.Mail发送邮件总是不稳定,有时成功有时失败”这个问题的最新回复,因为不让我连续回复,只能再发一贴了。
- 【求助】C# 类中调用本类的问题怎么理解???
- 查找数据库有无符合条件的记录
- int[] a=new int[100], 如何释放a
- 在线等!打印的问题
- c#怎样在把一维数组转化为二维数组,或者多位数组
- 怎样用程序实现打开Word文档
- 请问在C#中如何用GetPrivateProfileSectionNames函数得到ini文件的所有section名称到ArrayList中
- 英雄比武大会来了,你准备好了吗?
- 编译出错?请帮帮我?
- 初学C#提点建议和方法
- Button上画线。 小问题
可以看看串口操作说明,希望对你有帮助
http://www.cnblogs.com/shuihuren/articles/987522.html
如果是该接口没有暴露出来,就只要把System.dll中的SerialPort类反编译来改了,不知道有高手有这方面的经验没有
如果是在单片机(如89C52)系统中处理串口来的数据,相当于是自己写驱动程序,所以能够获得校验位,而在运行windows操作系统的PC机上,驱动程序已经把底层操作隐藏了。因此,除非自己写windows下的串口驱动程序,否则无法获得校验位
我只见过使用通讯协议在通讯过程中更改效验的,没有见过LZ这样需求。请好好想想是否符合实际应用。
直接用虚拟串口对连接两个应用程序,不是真实的工业应用,看来SerialPort类是不行了,再查下用win32 API的CreateFile之类行不,实在不想去弄那个麻烦的驱动程序
mscomm,API或第三方组件都行,关键是怎么实现
(1)系统中安装了ELTIMA Virtual Serial Port虚拟串口对(COM5<-->COM6)
(2)上位机程序是
private SerialPort sp;
public Form1()
{
InitializeComponent();
sp = new SerialPort("COM5", 9600, Parity.Odd, 8, StopBits.One);
sp.Open();
} private void button1_Click(object sender, EventArgs e)
{ byte[] b ={ 0xA0, 0x33, 0x1C, 0x01, 0x05 };
sp.Parity = Parity.Odd;
sp.Write(b, 0, 1);
sp.Parity = Parity.Mark;
sp.Write(b, 1, 1);
}下位机(模拟)程序也运行在同一台计算机上,不管用什么语言编写,关键是如何获取上位机发送过来的数据校验位?
当然两者事先约定,第一字节用Odd,第二字节用Mark,但是下位机方必须把数据校验位获取到,才能进行判别。
---------------------
请真正的高手把下位机程序不管用什么语言(开发环境)编写出来,分不够另外开帖子再加。
sp.Parity = Parity.Odd;
sp.Write(b, 0, 1);
sp.Parity = Parity.Mark;
sp.Write(b, 1, 1);
你这种方式就是在通讯中采用改变效验的方式来进行通讯。
按照你这个的写法,你下位机应该很明确啊?
一开始用0DD方式监听,
如果收到0xA0,则将效验位改为MARK,继续接收。
http://topic.csdn.net/u/20090530/14/c987fc8d-3dd8-4d66-88b4-f5e8db769aa7.html哪位高手能解决,两个帖子的分一起给