通讯接口采用RS232C,所有数据均为ASCII码,每帧数据有9个字节组成.第一个字节为起始位,第二个字节为状态字A。
其中A状态字具体Bit位使用如下:
0:0...1...(省略)
1: 0...1...
2: 0...1...
3: 0...1...
4: 0...1...
5: 0...1...
6: 0正1负
7: 0动态1非动态
假如状态字A第7位为1,其他Bit位都为0。那么A状态字就是1000 0000 转成16进制为80。我在ASCII码对照表没找到相应的字符。这协议有问题吗?
我测试时往串口发的状态字A为byte(128)时(16进制80)。通过
System.Text.ASCIIEncoding asciiEncoding = new System.Text.ASCIIEncoding();
int intAsciiCode = (int)asciiEncoding.GetBytes(acsiiStr)[0];其中acsiiStr
是从串口读取的状态字A的ASCII字符。将其转成16进制为3F。跟我发的不相符...
其中A状态字具体Bit位使用如下:
0:0...1...(省略)
1: 0...1...
2: 0...1...
3: 0...1...
4: 0...1...
5: 0...1...
6: 0正1负
7: 0动态1非动态
假如状态字A第7位为1,其他Bit位都为0。那么A状态字就是1000 0000 转成16进制为80。我在ASCII码对照表没找到相应的字符。这协议有问题吗?
我测试时往串口发的状态字A为byte(128)时(16进制80)。通过
System.Text.ASCIIEncoding asciiEncoding = new System.Text.ASCIIEncoding();
int intAsciiCode = (int)asciiEncoding.GetBytes(acsiiStr)[0];其中acsiiStr
是从串口读取的状态字A的ASCII字符。将其转成16进制为3F。跟我发的不相符...
解决方案 »
- 可视化文本工具窗口出不来
- 寻找懂VC++和C#的同学,帮忙翻译一段C++的程序
- 一个很弱的问题:数据库系统法给别人的时候怎么连上数据库?
- 请教c#中两个winform之间如何传值,比如左边一个treeview,右边一个listview.
- ASP.NET页面问题..控件变名了...
- 对数据库操作遇到的问题,必须声明变量@num,请高手帮忙.....
- C#中如何传递一个struct元素给VC++编写的DLL,DLL中的函数调用之后自动填写struct结构的内容。
- 在Vs.net中有没有像PB中的DW一样的Datagrid呀?
- 如何让一个消息,启动一个应用程序?在线等候!
- 该死的GRID
- (小白问题)怎样将textbox的最后一个字符删除
- 关于sqlserver中视图数据的问题
C# 串口操作系列(3) -- 协议篇,二进制协议数据解析
数据头标识+长度+数据+校验
2.分析的时候,使用Read方法,读取到byte[]中,多次DataReceived事件中缓存,每次缓存后查找有效数据
3.对找到的有效数据分析,使用
2个方面
1.协议本身你没描述完整,只说了个头,如果只有头,没有判断数据尾的办法,就是不好的协议。
2.你分析的方法也错了。本来就是二进制数据,你非要文本方式读,然后再转成字节,多此一举。你提问要有针对性。不要混为一谈,协议合理不合理你贴出完整的协议定义,如果是问这样分析是否正确就问分析。不同的东西混在一起只能让提问和回答的人都陷入一团乱麻。
XX 41 DD DD DD DD DD DD DD这些DD就是你的数据,41是第二个关键字,如果翻译成ASCII,表示'A',第一个你略过的那个字节很重要,是数据头的判断标志。如果数据就只有这样,很不严谨,因为数据中也可能重叠出现 XX 41 的组合。