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#的版本读取上位机数时就出现读取上位机传送的二进制数据不正确,但用串口助手模拟上位机传送数据时,接收时则完全正确.

问题已解决。手上拿的是一份过期的通讯协议,上位机没有偶较验,仅此而已。
展开
 我来答
styshoo1986
2012-05-22 · TA获得超过893个赞
知道小有建树答主
回答量:832
采纳率:100%
帮助的人:263万
展开全部
你代码都没贴啊……
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式