请教一个串口通讯的问题!(200分)

J

jafy

Unregistered / Unconfirmed
GUEST, unregistred user!
各位大侠:最近小弟在做一个通过RS232的监控软件时碰到一个问题,请高手指教,该设备的协议中说可以发‘S‘+Checksum(83,172),2个字节 以获得当前设备的状态,而在命令的每个字符间要有5ms的演示,可是我发送出去的命令他总是返回S83而得不到真正的设备返回的数据,请问这是什么原因?应该如何写才能正确收到返回信息?十分急!200分奉上!
 
你写的也太不清楚了,是什么设备
你的延时是否到5MS
还你有你发的命令是否对?我感觉好象不对?
通讯协议对不?
 
协议理解有问题吧
 
不知道Checksum是 + 还是 xor 或是其他什么?确实是发送 2 字节吗? Checksum(83,172)=Checksum('S',$AC),这个 $AC 是用来做什么的,为什么要与它checksum, 看看是不是协议哪里理解还不正确?
 
我也觉得是协议的理解上有些问题,协议有些多,不好贴上来,是否能告知邮箱,我发给各位帮我理解一下?多些各位!
 
pihome@pihome.net
 
kingjohn@21cn.com
 
我一直在做串口通信的! china_wyc@163.com
 
按照协议上所说,
你只要发送一个大写的'S'字符和一个S字符的和校验码就可以了,
另外,你是不是有一个CHECKSUM函数呀
 
to:蒋劲刚
没有CHECKSUM函数,我看不明白,S的ASCII值是83,可是,他写的CHECKSUM(83,172)后面的172是什么意思?
各位:我的QQ是253160,请各位加入我进一步指点一下,谢谢!
 
刚刚看过协议,看上面的问题,你使用的设备应该是 电缆IC-101 + SR Loggers(>20000)我的理解如下:
序列号 电缆 波特率 进/出
>20000 IC-101 1200-57600
通讯要求8个数据位,1个停止位,没有奇偶校验位并且不用握手。
输入和输出都使用了同样的线插在一个立体声插头上,所有发到Logger上的命令都将被回应到PC上。
如果一个命令以超过1200的波特率发送,它必须领先于一个自动波特字符(ASCII),从而允许Logger来探测正在使用的波特率。这个字符不增加到检查和。通讯速率在600-1200B时候不使用自动波特字符。超过20000后Loggers回应的速度和它们接收命令的波特率相同。
要发送命令时,这个命令的每一个字符之间必须要存在一个短的延时。延时的长度是一个依赖于下列一些事实的变量。
序列号 电缆 延时
>20000 IC-101 5ms
状态命令:
应用于:所有
发送:‘S‘+Checksum(83,172),2个字节
接收:45字节的数据+Checksum

以上黑体部分为原协议,可以这样试试,以1200的波特率发送下面的命令
'S'(=$53) + Delay(5ms) + Checksum(83,172)(=$FF)
不需要更改波特率接收返回命令,看看是否有数据返回?
 
能把协议给我看看吗?
它的172就是根据S计算出来的chksum,
我的是173,因为我做的要加一
 
那就是83+172后所得的值255,即$FF
 
我没有QQ,只有MSN:jiang_jg@hotmail.com
 
可是我发送
MSCOMM1.OUTPUT:='S';
SLEEP(5);
MSCOMM1.OUTPUT:='83';
他怎么返回值就是S83?
 
发送
MSCOMM1.OUTPUT:='S';
SLEEP(5);
MSCOMM1.OUTPUT:=#255;
 
不知道checksum是怎样计算的,要不然试试这个
MSCOMM1.OUTPUT:='S';
SLEEP(5);
MSCOMM1.OUTPUT:=#172;
 
我还没看到你的协议,我认为checksum是为了计算出较验和的,因为在串口通信中为了保证数据传送的正确性往往要采用较验手段的! 你那样直接output出去再肯定不行
 
TO:伊天仇
你还没有收到我的协议吗?邮箱多少?我发给你
 
应该是写法不对
 
顶部