我在delphi中使用mscomm控件开发一个串口通讯的程序,下位设备是一种手持pos,用C51开发的。现在碰到一个问题:手持pos机通过串口上传到主机的数据我不知道如何获得,在delphi中使用mscomm控件读取串口缓冲区是一个olevariant类型的变量,但获取之后我如何将其中的数据解析出来呢?
我程序中的部分代码:
iCount:=mscomm1.inbufcount; //得到串口缓中区中的字符数
varContent:=mscomm1.input; //获得串口缓冲区中的内容(varContent为一个Variant类型的变量)
以上代码中能够获得串口缓冲区中的字符数,但用variant变量得到的内容我不知如何进行解析。我想将他转换成字符串
strTemp:=vartostr(varContent);
但得到的是一个空字符串。可我判断variant变量是否为空时确实不是空
bEmpty:=VarIsEmpty(varContent); //得到的值是false,不为空
这我就不知道如何进行处理了,那位高手做过此方面的东西,还请赐教一二,不胜感激!
(下位的手持pos向串口发送数据时是按照我定义的结构进行发送的,c51写的)
我程序中的部分代码:
iCount:=mscomm1.inbufcount; //得到串口缓中区中的字符数
varContent:=mscomm1.input; //获得串口缓冲区中的内容(varContent为一个Variant类型的变量)
以上代码中能够获得串口缓冲区中的字符数,但用variant变量得到的内容我不知如何进行解析。我想将他转换成字符串
strTemp:=vartostr(varContent);
但得到的是一个空字符串。可我判断variant变量是否为空时确实不是空
bEmpty:=VarIsEmpty(varContent); //得到的值是false,不为空
这我就不知道如何进行处理了,那位高手做过此方面的东西,还请赐教一二,不胜感激!
(下位的手持pos向串口发送数据时是按照我定义的结构进行发送的,c51写的)
buff : widestring;
begin
buff := mscomm1.input;
end;
BufferLength: Word);
var
rbuf:Buffer;
viewstring:string;
begin
viewstring:='';
move(buffer^,rbuf,bufferlength);
for i:=0 to bufferlength-1 do
begin
viewstring:=viewstring+inttohex(rbuf[i],2);
end;
end;
mscomm:微软的东西,ActivX控件,使用简单,在VB中带的,性能一般,由于是ActivX控件,打包时需要注册好多信息,不推荐使用。
spcomm:比较好的vcl,算是比较专业的,解剖了一下,功能比较完善。
TurboPower:公认的专业通讯控件。可以到其站点下载,开放源码了。
我在制作串口通讯软件时三种都用过,最终全部使用TurboPower!所以也推荐大家使用它。
写了个例子,基本的串口通讯都可以实现,可提供参考。
下载地址:http://www.kaer.cn/default.aspx(网站安全性较差,经常当机,如果急用,mail我)
多多指正:[email protected]