c#SerialPort读取上位机传送的二进制数据不正确,但用串口助手模拟上位机传送数据时,接收时则完全正确. 10
我的串口设定://初始化SerialPort对象E2COM.ReadBufferSize=1024;E2COM.WriteBufferSize=512;E2COM.Por...
我的串口设定:
//初始化SerialPort对象
E2COM.ReadBufferSize = 1024;
E2COM.WriteBufferSize = 512;
E2COM.PortName = "COM1";
E2COM.BaudRate = 4800;
E2COM.Encoding = Encoding.UTF8;
E2COM.DataBits = 8;
E2COM.StopBits =StopBits.One;
E2COM.ReadTimeout = 5000;
E2COM.Parity = Parity.Even;
E2COM.ReceivedBytesThreshold = 35;
E2COM.NewLine = "/r/n";
......
byte[] buf = new byte[n];//声明一个临时数组存储当前来的串口数据
E2COM.Read(buf, 0, n);//读取缓冲数据
上位机不间断地以二进制传送的数据格式:
02 00 18 00 20 20 37 37 36 34 00 00 00 00 00 00 0D 3F
上位机通讯格式:
串行通讯格式为:1位起始位,7位数据位,1位偶校验位和1位停止位
<STX> 起始位,HEX(02)
<CR> 回车,HEX(0D)
我只列了代码片断,问题不是出在代码上,因为有串口调试助手是可以正确读取的.问题应当是出在串口的设定上.
VB版本的程序一切正常,VB中可以设定串口以二进制读取数据.
C#中的串口控件SerialPort没有设定二进制读取方式,但是可以用E2COM.Read(buf, 0, n)读回二进制数,但是C#的版本读取上位机数时就出现读取上位机传送的二进制数据不正确,但用串口助手模拟上位机传送数据时,接收时则完全正确.
问题已解决。手上拿的是一份过期的通讯协议,上位机没有偶较验,仅此而已。 展开
//初始化SerialPort对象
E2COM.ReadBufferSize = 1024;
E2COM.WriteBufferSize = 512;
E2COM.PortName = "COM1";
E2COM.BaudRate = 4800;
E2COM.Encoding = Encoding.UTF8;
E2COM.DataBits = 8;
E2COM.StopBits =StopBits.One;
E2COM.ReadTimeout = 5000;
E2COM.Parity = Parity.Even;
E2COM.ReceivedBytesThreshold = 35;
E2COM.NewLine = "/r/n";
......
byte[] buf = new byte[n];//声明一个临时数组存储当前来的串口数据
E2COM.Read(buf, 0, n);//读取缓冲数据
上位机不间断地以二进制传送的数据格式:
02 00 18 00 20 20 37 37 36 34 00 00 00 00 00 00 0D 3F
上位机通讯格式:
串行通讯格式为:1位起始位,7位数据位,1位偶校验位和1位停止位
<STX> 起始位,HEX(02)
<CR> 回车,HEX(0D)
我只列了代码片断,问题不是出在代码上,因为有串口调试助手是可以正确读取的.问题应当是出在串口的设定上.
VB版本的程序一切正常,VB中可以设定串口以二进制读取数据.
C#中的串口控件SerialPort没有设定二进制读取方式,但是可以用E2COM.Read(buf, 0, n)读回二进制数,但是C#的版本读取上位机数时就出现读取上位机传送的二进制数据不正确,但用串口助手模拟上位机传送数据时,接收时则完全正确.
问题已解决。手上拿的是一份过期的通讯协议,上位机没有偶较验,仅此而已。 展开
1个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询