跪求高人帮助(串口数据分析)
FF FF F1 7F FF 7F E5 7F EF 7F D6 7F FD 7F 04 8009 80 FF FF F8 7F 05 80 24 80 1A 80 16 80 00 80
EE 7F E2 7F FF FF 06 80 E6 7F EA 7F D8 7F 07 80
FF 7F 14 80 12 80 FF FF 04 80 20 80 1F 80 10 80
FF 7F EC 7F E1 7F D9 7F FF FF 02 80 ED 7F D7 7F
07 80 07 80 12 80 15 80 09 80 FF FF FD 7F 1C 80
12 80 FE 7F E5 7F E5 7F D3 7F DC 7F FF FF E1 7F
DC 7F 09 80 01 80 1F 80 11 80 09 80 ED 7F FF FF
EA 7F 10 80 FB 7F EA 7F DB 7F D5 7F E9 7F 10 80
FF FF 02 80 0A 80 05 80 19 80 15 80 05 80 E8 7F
F0 7F FF FF FD 7F FB 7F E6 7F E6 7F CE 7F EC 7F
1B 80 1A 80 FF FF F7 7F 06 80 20 80 11 80 04 80
E6 7F F1 7F D9 7F FF FF F6 7F E8 7F DE 7F D3 7F
FB 7F 16 80 20 80 13 80 FF FF F0 7F 1D 80 14 80
03 80 E3 7F EE 7F D5 7F F3 7F FF FF EA 7F E9 7F
DD 7F 04 80 08 80 11 80 17 80 07 80 FF FF EA 7F
18 80 0D 80 EF 7F D1 7F CB 7F 01 80 00 80 FF FF
E4 7F E3 7F 07 80 02 80 1F 80 10 80 07 80 F1 7F
FF FF E1 7F 0C 80 E7 7F D9 7F CB 7F 00 80 03 80
0E 80 FF FF ED 7F 08 80 07 80 19 80 16 80 03 80
ED 7F EC 7F FF FF F9 7F EA 7F D0 7F D1 7F 0A 80
FE 7F 19 80 18 80 FF FF 0F 80 07 80 1F 80 10 80
03 80 EA 7F ED 7F DF 7F FF FF 20 80 D8 7F D1 7F
0A 80 07 80 16 80 1D 80 10 80 FF FF 0A 80 1D 80
12 80 03 80 E4 7F EF 7F DA 7F EE 7F FF FF F2 7F
D7 7F 0D 80 00 80 25 80 17 80 12 80 FC 7F FF FF
上面是我通过串口监视器,截获的串口数据,可以看到每隔16个字 就出现FF,我觉得FF可能就是数据结束位吧,但是校验位、数据位又是哪些呢?什么校验方式呢?我是菜鸟,望各位大虾不吝赐教。 --------------------编程问答-------------------- To 我觉得FF可能就是数据结束位吧
一般不会以单字节为结尾的 --------------------编程问答-------------------- 解码 --------------------编程问答-------------------- 校验位、数据位、校验方式在这里是看不出来的,这些是通信双方对数据传输的一种约定。具体来说,是对高低电平(1和0)的解释方式。
你截获的串口数据是接收程序对原始数据(线路上的电平)的解释,校验位、数据位、校验方式等应该在接收程序中设定,在打开串口时串口监视器的中也应该可以看到。 --------------------编程问答-------------------- 什么意思?就是这些数据里面有校验位数据位,但是在接受程序中设定? --------------------编程问答-------------------- LZ:如果是这样,你的数据帧为18字节,至于0XFF是否是帧首,那得按通信协议来确定.
整理下:
FF FF F1 7F FF 7F E5 7F EF 7F D6 7F FD 7F 04 80 09 80
FF FF F8 7F 05 80 24 80 1A 80 16 80 00 80 EE 7F E2 7F
FF FF 06 80 E6 7F EA 7F D8 7F 07 80 FF 7F 14 80 12 80
FF FF 04 80 20 80 1F 80 10 80 FF 7F EC 7F E1 7F D9 7F
FF FF 02 80 ED 7F D7 7F 07 80 07 80 12 80 15 80 09 80
FF FF FD 7F 1C 80 12 80 FE 7F E5 7F E5 7F D3 7F DC 7F
FF FF E1 7F DC 7F 09 80 01 80 1F 80 11 80 09 80 ED 7F
FF FF EA 7F 10 80 FB 7F EA 7F DB 7F D5 7F E9 7F 10 80
FF FF 02 80 0A 80 05 80 19 80 15 80 05 80 E8 7F F0 7F
FF FF FD 7F FB 7F E6 7F E6 7F CE 7F EC 7F 1B 80 1A 80
FF FF F7 7F 06 80 20 80 11 80 04 80 E6 7F F1 7F D9 7F
FF FF F6 7F E8 7F DE 7F D3 7F FB 7F 16 80 20 80 13 80
LZ可按上述来分析. --------------------编程问答-------------------- 从上述18字节数据看,数据位必然是8位,至于有无校验位判断不出. --------------------编程问答-------------------- 应该是无校验位的! --------------------编程问答-------------------- 八位数据位?八位2进制数据位么?还是八位16进驻数据位 --------------------编程问答-------------------- 来人帮帮忙啊 --------------------编程问答--------------------
8LZ:当然是8位2进制数据位.假如波特率为9600而且无校验位的话,那么:
MSComm1.Settings = "9600,n,8,1"
MSComm 控件的Settings 属性
设置并返回波特率、奇偶校验、数据位、停止位参数。
语法
object.Settings[ = value]
Value 由四个设置值组成,有如下的格式:
"BBBB,P,D,S"
BBBB 为波特率,P 为奇偶校验,D 为数据位数,S 为停止位数。value 的缺省值是:
"9600,N,8,1"
--------------------编程问答--------------------
简单的说,先有设定,后有数据。
对校验位、数据位、波特率等的设定是对串口硬件的设置,在设置好后才接收到你所得的数据;
不同的设定会得到不同的数据。比如发送的机器以波特率为9600,校验位1,数据位8的设定发送数据,接收方如果设定波特率为2400,那也会收到数据,只是收到的数据和发送的数据是不同的。必须把接收的硬件调整到和发送的硬件设定一致,数据才一致。
就像说英语的人说话,有听觉的人都能听到,但只有懂英语的人才知道是什么意思。单纯记录物理声音是无法分析其意义的。
所以,单从接收到的数据是无法判断数据位、校验位这些硬件设定的。
补充:.NET技术 , VB.NET