SPComm 发送数据的奇怪问题(今天在线等)(300分)

  • 主题发起人 主题发起人 Benjamin.JI
  • 开始时间 开始时间
B

Benjamin.JI

Unregistered / Unconfirmed
GUEST, unregistred user!
我用SPComm 发送一串指令时出现一个奇怪问题,指令串如下:
7E 0B 01 01 75 (16进制)
每次发送后,用监测工具发现发送出去的指令都变了, 无故增加了一些其他的指令,
例如:可能会成了 7E 0B B0 01 D2 01 75, 或者其他, 反正本来只发送5个字节,结果却变成了7个, 8个, 甚至 10多个字节, 经测试, 跟踪, 发现问题可能出现在发送的指令串中的 0B 上, 把 0B 换成其他都没问题, 把 0B 换到其他位置,如:0B 7E 01 01 75, 问题依旧。 请高手指教。
 
有可能会出现这种问题,可能是spcomm的bug,一些特殊字符不能直接传输,可以检查一下是否spcomm属性设置问题
 
Xon/Xoff属性设为false试试
 
应该是控件属性设置的问题
 
我試試先, 謝謝樓上各位高手的回答
 
把控件为true的属性 都改为 false试试
 
還是不行, 請各位說的具體些

謝謝!!!
 
XOFF/XON是字符流控制协议。这两个字符有特殊含义,所以传送数据时
如果传送到这两字符会丢失,一般XOFF为$13,XON为$11。
在WindowsAPI函数可以改变其代表字符
你用SPCOMM本身已经设定也许已设定值为此
所以我建议关闭XOFF/XON以及其相关属性
至于还出现此问题,可能是SPCOMM的bug了,特别是在发送16进制的时候
 
謝謝 uiit

照你說的做了, 問題依舊.

我發現SPComm裡面發送完 0B 後, 我只需要接著發送 01, 但是在跟蹤完 WriteFile後, 一次就發送了多個字節, 如: B0 01 D2 等 , 或者更多, 實在是不明白其中原因.

謝謝樓上各位的幫忙, 討論繼續.
 
会不会是监测工具有问题?
还是用交叉线COM1对COM2监测保险一些
收发的数据位停止位校验位都要设置一致
 
TO: maxim88
我正是用Com1 與 Com2 連接測試
 
把代码贴出来看看吧
 
你别告诉我你两边比特率设置不一样
 
TO樓上:
如果是這種低級錯誤我就不會上來發帖了
 
Inx_XonXoffFlow和Outx_XonXoffFlow都设为False看看。我这边试没问题
 
使用2.5版本比较稳定
 
readIntervalTimeOut:= 100;XoffLimit:=500;XonLimit:=500;
 
MyComm: TComm; // MyComm SPComm baudrate:9600

var bgCommand_Send: array of byte;

setlength(bgCommand_Send, 5);

bgCommand_Send[0]:=$7E;
bgCommand_Send[1]:=$0B;
bgCommand_Send[2]:=$01;
bgCommand_Send[3]:=$01;
bgCommand_Send[4]:=$75;

try
for i := 0 to high(bgCommand_Send) do
begin
MyComm.WriteCommData(@bgCommand_Send, sizeof(bgCommand_Send));
end;
except
end;
 
是不是用数组的原因,直接用字串试试
s:='';
s:=char($7e)+char($0b)+char($01)+char($01)+char($75);
Comm1.WriteCommData(PAnsiChar(s),Length(s));
 
MyComm.WriteCommData(@bgCommand_Send, 5);
不要循环
 
后退
顶部