关于串口通信TApdComPort控件问题,急急急!在线求助大峡们!!!(100)

  • 主题发起人 主题发起人 dong511
  • 开始时间 开始时间
D

dong511

Unregistered / Unconfirmed
GUEST, unregistred user!
代码如下,//ShowMessage(IntToStr(length(s)));我把这句话不屏蔽的话可以执行下面的IF语句,屏蔽了就执行不了IF语句,是什么原因,谢谢!!! procedure TTelServerMainForm.ComPort1Trigger(CP: TObject; Msg, TriggerHandle, Data: Word); var I : Word; C : Char; s,ALogFile : String; ilen: Integer; begin try case Msg of APW_TRIGGERDATA : {got 'login', send response} ; APW_TRIGGERAVAIL : {extract and display/process the data} begin s:=''; for I:= 1 to Data do begin C := ComPort1.GetChar; s:=s+c; end; //ShowMessage(IntToStr(length(s))); if length(s) > 8 then begin //添加到日志列表里 ALogFile := 'telinfo.txt'; AddLogToFile(ALogFile,s); Diff(s); end; end; APW_TRIGGERTIMER : {timed out waiting for login prompt, handle error} ; end; except end; end;
 
自己顶一个,小弟目前做的是一个电话串口接口,交换机是ne4700程控交换机
 
有大峡们遇到这个情况给个原因啊,我怎么就遇到这么奇怪的问题了呢!!!
 
Showmessage 会阻塞住的,你用Memo1.line.add(s);
 
to fanronghua Showmessage 会阻塞住的,你用Memo1.line.add(s);是什么意思?小弟刚刚接触这个控件不怎么了解,还是不明白什么意思,阻塞了为什么还能执行IF语句呢。 我现在从串口接收的话单数据,用这个控件一个话单数据分成了2条,我现在只处理长度>8的数据,我Showmessage的话就会执行IF语句,IF语句是我对话单的处理,不用Showmessage的话就执行不了IF语句了
 
先感谢fanronghua,在百忙之中给出建议,在此小弟有礼了!!
 
var tmpChar: Char; s: string;begin s := ''; for i := 1 to Count do begin if not ComPort1.CharReady then break; //add to check buffer is empty tmpChar := ComPort1.GetChar; s := s + tmpChar; end; Memo1.line.add(s); //分析包 AddLogToFile('telinfo.txt', s);end;
 
14:07:59:781 0!KA0000090011166 02231402200223140245 00000000013867656983 14:07:59:953 0000 14:07:59:953 0 to fanronghua: 按照你的方法我接收到的数据是这样的,我也加了一个控件TApdDataPack,设置其属性startCond=scanydata; endcond.ecpacketsize=true,packsize=132应该一次性接受132个字符,怎么回事呢?我是用Tapdcomport控件的Ontrigger接收数据的
 
1. 看你的波特率设置的是不是正确的2.你帮你接收的字符 用16进制打印出来。3.根据通讯协议来分析数据。你可以用联系我,我的MSN,qq,Email,skye : fanronghua@126.com
 
我可以在线帮你调试一下
 
to fanronghua:先在此非常感谢朋友对这个问题的关注和帮助。我的QQ:251248481,注名DELPHI朋友就行。
 
怎么串口接收的字符串,没有用全局变量来保存?因为进入串口OnTrigger事件,一次只接收8个字符左右。
 
建议把串口接收的数据包的处理,放到一个函数的过程中实现。
 
多人接受答案了。
 
后退
顶部