通过MSCOMM接收来自串口的数据的问题(100)

  • 主题发起人 主题发起人 gdzscj
  • 开始时间 开始时间
G

gdzscj

Unregistered / Unconfirmed
GUEST, unregistred user!
接到一个项目,第一次开发关于串口的程序。通过MSCOMM控件接收来自串口的电子秤数据。从超级终端程序试接收,得到这样的信息。)0 000000000000)0 000000000000)0 000000000000)0 000010000000)8 000030000000)8 000040000000)8 000050000000)8 000060000000)8 000060000000)0 000070000000)0 000070000000)0 000070000000)0 000070000000)0 000070000000)0 000070000000)0 000070000000)0 000060000000)8 000050000000)8 000040000000)8 000030000000)8 000020000000)8 000010000000)8 000000000000)0 000000000000)0 000000000000效果不错。于是用MSCOMM开发下面程序,procedure TForm1.FormCreate(Sender: TObject);begin if mscomm1.PortOpen then mscomm1.PortOpen:=false; mscomm1.CommPort:=1; mscomm1.InBufferSize:=256; mscomm1.OutBufferSize:=256; mscomm1.Settings:='9600,n,8,1'; mscomm1.InputLen:=0; mscomm1.InBufferSize:=0; mscomm1.OutBufferSize:=0; mscomm1.RThreshold:=1; mscomm1.InputMode:=cominputmodetext;end;procedure TForm1.MSComm1Comm(Sender: TObject);var recstr:olevariant;begin if mscomm1.commevent=2 thenbegin recstr:=mscomm1.input; memo1.text:=memo1.text+recstr;end;但结果很不理想,一方面的得到的字符串长度不一,没有规律,二是读数再大一点时会出现乱字符。请问是什么地方出了问题?如果用mscomm1.InputMode:=cominputmodebinary;会不会解决这个问题?如果用这个,得到的数据是二进制还是其他?要怎么转换呢?最好能做到和超级终端一样的效果。请各位指教。谢谢!
 
后退
顶部