命令格式如下:
__________________________________________________________________
| | No.|of | | | | Program Name | Check | |
| STX | Characters| C | 0 | P | Up to 15 Letters | Sum | ETX |
|_______|_____|_____|___|___|___|__________________|___|____|_____|
开始标志 字符个数 命令段 数据段 校验 结束标志因设备通讯协议没有说明算法,只有一个个试?
现征求CheckSum的算法,我知道的有,将每一位取反相加、两字节合起来相加
__________________________________________________________________
| | No.|of | | | | Program Name | Check | |
| STX | Characters| C | 0 | P | Up to 15 Letters | Sum | ETX |
|_______|_____|_____|___|___|___|__________________|___|____|_____|
开始标志 字符个数 命令段 数据段 校验 结束标志因设备通讯协议没有说明算法,只有一个个试?
现征求CheckSum的算法,我知道的有,将每一位取反相加、两字节合起来相加
解决方案 »
- 使用SHFileOperation进行文件拷贝,我屏蔽了它自带的Progressbar,想自己做个Progressbar,能给点思路吗?
- 用TextRect向listbox里输出字符串,显示正确,但当将该form切换到后台再返回时,以前的显示全没了,如何找回以前的textRect输出显示呢?
- Delphi 中﹐我写的控件库单件﹐ 如何注册啊,,,,,
- 调查一下,大家都有delphi哪个版本?
- Delphi系统问题!
- 一个关于面向对象的问题
- 在什么地方可以找到wm_syscommand的常量定义?
- 如何提交网页内嵌框架里的button click事件
- sybase的nchar与char的区别是什么?
- 关于ListView控件的问题
- 拆分
- 100分请教:如何使用户无法直接关闭调用的WORD程序?
要不, 這樣討論比較無目的!!
如你這麼說, 那你可試如下:
正常 STX, ETX 都不用理, 要求是什麼就什麼!
如果是十六進制的, 直接相加,
如果是字符的, 轉為對應Ascii的碼值再計算,
如 C O P 之類都要轉化, 1, 所有的值累加,
2, 累加後, 與 $FF 异或注意 checksum 是多少位的!
不是這樣的, 沒checksum 是無法通訊的
82 30 B4 D2 B1 50 C5 B8 B4 03 ---------04R1PE
82 30 B4 D2 B1 D2 C5 B8 B2 03 --------04R1RE
82 30 B4 D2 B1 50 D7 B7 B2 03 --------04R1PW
其中82是开始标志,03是结束标志,请大家帮忙分析一下CheckSum是怎么算的?
另外有个疑问:30是无校验的16进制,而B4是有校验位的16进制,因为按照协议格式,30 B4 是字符个数,在这条指令里命令段+数据段为4,B4实际应为无校验的34,好像又不像奇偶校验。