帮我看看这段关于 MSComm 串口通讯的代码有问题否?(20分)

  • 主题发起人 国色天香
  • 开始时间

国色天香

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure TForm1.MSComm1Comm(Sender: TObject);
var
strTemp,strData:String;
begin
if MSComm1.CommEvent<>comEvReceive then
Exit;
strTemp:=MSComm1.Input;
if strTemp=chr(2) then
strData:=''
else
if strTemp=chr(3) then
begin
MSComm1.Output:=chr(6);
RichEdit1.Lines.Add(strData);
end else
strData:=strData+strTemp;
end



以上是我写的一段代码,仪器不在我这里,我不能调试,所以请大家帮我检查检查,有问题就指出来,我只需要将 27 ASCII字符 取出来就行了。以下是串口说明的原文,<CHECKSUM> 我不懂意思,能解释一下吗?
-------------------------------------------------------------------------
信号电平 : EIA RS232C
波特率:4800
字符形式:1起始位 8 数据位 2 停止位 无奇偶校验
接受讯号:YES

每次串行输出,以<STX>信息开始,并以<ETX>和<CHECKSUM>出现为结束,
在信息<EOT>出现时,传输过程结束。

总和检查是 27 字符ASCII码<DATA>的<MODULUS 256>的简单总和。

句法:

<STX> <27 ASCII字符> <ETX> <CHECKSUM>
.. .. .. ..
.. .. .. ..

<EOT>结束

注意:在每次<CHECKSUM>信息结束时,计算机必须传送 ACK 信息。


 
我想strData应该定义成全局变量
 
进从代码上来看。没有设么语法错误。

但从你的协议说明中看chr(2),chr(3)应该是处理STX>和 CHECKSUM>的吧
<ETX和 EOT>不知处理了没有

还要设
MSComm1.InputLen := 1;
MSComm1.RThreshold := 1
 
我是想用 chr(2),chr(3)处理<STX>和 <ETX> ,<EOT>和 <CHECKSUM> 我不知道怎么处理,这两个不知道是什么? 请告诉我好吗?
 
>>我是想用 chr(2),chr(3)处理<STX>和 <ETX> ,<EOT>和 <CHECKSUM> 我不知道怎么处
>>理,这两个不知道是什么? 请告诉我好吗?
说明里没写的话,这只能去问定这个协议说明的人了
 
<CHECKSUM> 是什么?
 
调试的时候可以把com1跟com2联起来自己模拟调试一下.比如把com2口当作仪表,你根据输入的信息主动的由com2向com1发送对应的数据.
你定义的接收方式是文本的,checksum应该就是帧格式的末尾啊,检查这个字符串就可以了.
个人理解,仅供参考哈.
 
最好把仪器拿来呀[:)]
 
to xgcs:有意思,但我的电脑只有一个串口,怎么办?
to shibaoping :我也想啊,但拿不来,有很多高手说 <CHECKSUM> 不一定要处理的
 
吧那个串口的2,3针短接,(5针的一边向上,从左往右分别为12345针),你可以用一个曲别针弯一下短接起来.
然后你就可以自己发自己收了.我就是这么调试的.
 
to xgcs: 串口通讯都能这样调试吗?
 
to xgcs: 这台机好象是两发三收
 
最好的方法是两个串口联起来,那样可以发送接受分开.一个端口调试的话,你只能用一个mscomm控件控制,那样其实你发的什么收的就是什么.(只能测试你的发送接受程序是正确的)有些复杂的调试(比如返回信息比较复杂的情况)两个端口调试就可以模拟出来(另一个模拟接受的端口可以编程实现对仪器的模拟.)
另外,"这台机好象是两发三收"是什么意思??
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
591
import
I
顶部