S seeok Unregistered / Unconfirmed GUEST, unregistred user! 2008-01-26 #1 主程序是MDI父窗体,登录窗口是模式窗体,在登录窗口上有个Edit,程序启动到登录界面上时,刷卡,通过SpComm控件读取串口,但是怎么也赋值不到Edit中,通过跟踪发现是做了赋值操作,而且有值,但是马上就被清空了(通过全局变量做也是这样),感觉很奇怪,弄了大半天都不知道是什么原因!请各位指教!
主程序是MDI父窗体,登录窗口是模式窗体,在登录窗口上有个Edit,程序启动到登录界面上时,刷卡,通过SpComm控件读取串口,但是怎么也赋值不到Edit中,通过跟踪发现是做了赋值操作,而且有值,但是马上就被清空了(通过全局变量做也是这样),感觉很奇怪,弄了大半天都不知道是什么原因!请各位指教!
X xifengge Unregistered / Unconfirmed GUEST, unregistred user! 2008-01-27 #2 我用MSCOMM的时候也有同样的问题,串口数据一旦做了读操作马上就自动清空了,所以读取的时候一定要把值赋给自定的变量。
Z zywcd Unregistered / Unconfirmed GUEST, unregistred user! 2008-01-29 #3 同意楼上,自己定义变量,赋值的时候判断一下,如果是空的就不刷新了。
H HSB_YQ Unregistered / Unconfirmed GUEST, unregistred user! 2008-01-30 #4 关键是从串口读取到的值最后是否有不可见字符,串口接收到的数据,有时会分成2次中断进入的,除非你是按单字节中断方式获取的,比如16进制 20H,32H,0DH,0AH,串口接收到的时候可能是20H,32H先进来中断一次,然后0DH,0AH紧接着才进来,再中断一次,我是做单片机的,写上位机软件时我都碰到过这种情况,换了几个控件也没用,因此建议你先用串口调试软件看看收到的数。
关键是从串口读取到的值最后是否有不可见字符,串口接收到的数据,有时会分成2次中断进入的,除非你是按单字节中断方式获取的,比如16进制 20H,32H,0DH,0AH,串口接收到的时候可能是20H,32H先进来中断一次,然后0DH,0AH紧接着才进来,再中断一次,我是做单片机的,写上位机软件时我都碰到过这种情况,换了几个控件也没用,因此建议你先用串口调试软件看看收到的数。
S seeok Unregistered / Unconfirmed GUEST, unregistred user! 2008-02-16 #5 我定义了一个变量,但是仍旧会自动清空啊?有没有什么办法呢
K knight_dp Unregistered / Unconfirmed GUEST, unregistred user! 2008-02-20 #6 HSB_YQ 说的正确 使用二进制接收,处理后再放入EDIT ,就没事,使用SPCOMM 避免使用ASCii形式接收
D dronsonxp Unregistered / Unconfirmed GUEST, unregistred user! 2008-02-20 #7 同意“knight_dp”的说法,毕竟串口出来的是二进制数据
S seeok Unregistered / Unconfirmed GUEST, unregistred user! 2008-02-23 #8 procedure TLoginForm.myCommReceiveData(Sender: TObject; Buffer: Pointer; BufferLength: Word); var i:Integer; sRec: String; rBuf: array[0..128] of Byte; begin move(Buffer^,rBuf,BufferLength); for i:=0 to BufferLength-1do sRec:=sRec + IntToHex(rBuf,2); Edit2.Text := sRec; end; 我是这样来做的,请问各位错在哪里?谢谢!
procedure TLoginForm.myCommReceiveData(Sender: TObject; Buffer: Pointer; BufferLength: Word); var i:Integer; sRec: String; rBuf: array[0..128] of Byte; begin move(Buffer^,rBuf,BufferLength); for i:=0 to BufferLength-1do sRec:=sRec + IntToHex(rBuf,2); Edit2.Text := sRec; end; 我是这样来做的,请问各位错在哪里?谢谢!