数据能读出,从汽车衡的磅机上(上海耀华XK3190-A9),磅机232口发出10位的ascii数据,1位起始(02),10位结束(03),我现在打开端口,showmessage(mscomm.input),显示的是乱码汉字,关闭在打开几次能显示正确的数据类似+1234563E的数据,起始位置是02,是不是mscomm控件读取得数据不是开始从起始位置开始读取得,怎么做才能showmessage出正确的数据?每次从input里面读出的数据都不是完整的一组数据,
我在一个timer事件里面,
temp1:=mscomm1.input;
把input的内容缓冲到temp1变量里面
然后我再
if copy(temp1,1,1)=chr(02) then ...
else temp1:=delete(temp1,1)
这样先从缓冲里面一个字符一个字符的读取分析,删除,希望最终copy(temp1,1,1)=chr(02)了,再从temp1中按照磅机协议中,整组的读取数据
我这个思路对么,我以前没做过串口,水平很底,
给些完整可用的代码把
前天的帖子如下
http://community.csdn.net/Expert/topic/4754/4754953.xml?temp=.7842218
我在一个timer事件里面,
temp1:=mscomm1.input;
把input的内容缓冲到temp1变量里面
然后我再
if copy(temp1,1,1)=chr(02) then ...
else temp1:=delete(temp1,1)
这样先从缓冲里面一个字符一个字符的读取分析,删除,希望最终copy(temp1,1,1)=chr(02)了,再从temp1中按照磅机协议中,整组的读取数据
我这个思路对么,我以前没做过串口,水平很底,
给些完整可用的代码把
前天的帖子如下
http://community.csdn.net/Expert/topic/4754/4754953.xml?temp=.7842218
1.把读取到的数据放到缓冲区,然后分析缓冲区的数据(这里要考虑缓冲区读写的时候是否会冲突)2.找到起始字,然后后面的数据是正确的
总也找不到,气死我了
2005-12-24 21:10 1,971 CPort.inc
2005-12-24 21:11 102,015 CPort.pas
2005-12-24 21:33 51 CPortAbout.ddp
2005-12-24 21:33 1,558 CPortAbout.dfm
2005-12-24 21:02 1,327 CPortAbout.pas
2005-12-22 07:15 74,474 CPortCtl.pas
2005-12-24 21:02 12,660 CPortEsc.pas
2005-12-24 21:33 6,736 CPortImg.res
2005-12-24 21:39 8,106 CPortLib10.bdsproj
2005-12-24 21:38 344 CPortLib10.cfg
2005-12-24 21:38 782 CPortLib10.dpk
2005-12-24 21:02 876 CPortLib10.res
2005-12-24 21:33 624 CPortLib3.dpk
2005-12-24 21:33 692 CPortLib3.res
2005-12-24 21:33 731 CPortLib4.dpk
2005-12-24 21:33 1,536 CPortLib4.res
2005-12-24 21:33 744 CPortLib5.dpk
2005-12-24 21:33 1,536 CPortLib5.res
2005-12-24 21:33 741 CPortLib6.dpk
2005-12-24 21:33 1,536 CPortLib6.res
2005-12-24 21:33 781 CPortLib7.dpk
2005-12-24 21:33 1,508 CPortLib7.res
2005-12-24 21:41 8,056 CPortLib9.bdsproj
2005-12-24 21:33 781 CPortLib9.dpk
2005-12-24 21:33 876 CPortLib9.res
2005-12-24 21:33 4,385 CPortLibCB3.bpk
2005-12-24 21:33 758 CPortLibCB3.cpp
2005-12-24 21:33 1,536 CPortLibCB3.res
2005-12-24 21:33 4,388 CPortLibCB4.bpk
2005-12-24 21:33 758 CPortLibCB4.cpp
2005-12-24 21:33 1,536 CPortLibCB4.res
2005-12-24 21:33 2,439 CPortLibCB5.bpk
2005-12-24 21:33 788 CPortLibCB5.cpp
2005-12-24 21:33 1,536 CPortLibCB5.res
2005-12-24 21:33 4,113 CPortLibCB6.bpk
2005-12-24 21:33 523 CPortLibCB6.cpp
2005-12-24 21:33 1,536 CPortLibCB6.res
2005-12-24 21:02 11,580 CPortReg.pas
2005-12-24 21:33 51 CPortSetup.ddp
2005-12-24 21:33 1,882 CPortSetup.dfm
2005-12-24 21:02 2,382 CPortSetup.pas
2005-12-24 21:33 51 CPortTrmSet.ddp
2005-12-24 21:33 2,136 CPortTrmSet.dfm
2005-12-24 21:02 3,051 CPortTrmSet.pas
2005-12-24 21:40 7,668 DsgnCPort10.bdsproj
2005-12-24 21:36 344 DsgnCPort10.cfg
2005-12-24 21:36 663 DsgnCPort10.dpk
2005-12-24 21:02 876 DsgnCPort10.res
2005-12-24 21:33 602 DsgnCPort3.dpk
2005-12-24 21:33 32 DsgnCPort3.res
2005-12-24 21:33 651 DsgnCPort4.dpk
2005-12-24 21:33 1,536 DsgnCPort4.res
2005-12-24 21:33 650 DsgnCPort5.dpk
2005-12-24 21:33 1,536 DsgnCPort5.res
2005-12-24 21:33 661 DsgnCPort6.dpk
2005-12-24 21:33 876 DsgnCPort6.res
2005-12-24 21:33 661 DsgnCPort7.dpk
2005-12-24 21:33 1,536 DsgnCPort7.res
2005-12-24 21:41 7,744 DsgnCPort9.bdsproj
2005-12-24 21:33 661 DsgnCPort9.dpk
2005-12-24 21:33 876 DsgnCPort9.res
2005-12-24 21:33 4,367 DsgnCPortCB3.bpk
2005-12-24 21:33 713 DsgnCPortCB3.cpp
2005-12-24 21:33 1,536 DsgnCPortCB3.res
2005-12-24 21:33 4,370 DsgnCPortCB4.bpk
2005-12-24 21:33 713 DsgnCPortCB4.cpp
2005-12-24 21:33 1,536 DsgnCPortCB4.res
2005-12-24 21:33 2,676 DsgnCPortCB5.bpk
2005-12-24 21:33 767 DsgnCPortCB5.cpp
2005-12-24 21:33 1,536 DsgnCPortCB5.res
2005-12-24 21:33 4,298 DsgnCPortCB6.bpk
2005-12-24 21:33 654 DsgnCPortCB6.cpp
2005-12-24 21:33 1,536 DsgnCPortCB6.res
2005-12-24 21:02 63,516 gnugettext.pas
74 个文件 392,262 字节
2 个目录 7,139,360,768 可用字节cport 怎么安装
2 根据Delphi版本打开相应的 DsgnCPort7.dpk(Delphi7)的,编译,Install,有提示成功安装的
3 安装成功后就会在组件页面增加一个CPort页面
4 有Example可以看的
我想,每次控件读出的数据不是整组数据,而是前一组几位跟后一组的几位组成,
我的设备说明是
所有数据均位ASCII码输出,第一位起始位,10位结束位,
我直接memo1.text:=mscomm1.input
竟是乱码
则只能丢掉错位的数据,直到取到开始字后再正常取出数据用ComDataPacket1配合CPort1试试ComDataPacket1有一个StartString和StopString的属性设置后当检测到有这样的字节的时候会出发OnCustomStart与OnCustomStop事件
如果取到一个整包,则会触发OnPacket事件,在OnPacket事件中处理接收到的数据
说明书上说10位数据,1位为02,10为为03,
填
StartString=02
StopString=03
??、
StopString := #03
那个控件并不完善, 还是自己写吧,用api 特别是线程方面,很垃圾。
omcomm过程
case self.MSComm1.CommEvent of
comEvReceive:
begin
buffer:=self.MSComm1.Input;
self.MSComm1.InBufferCount:=0;
str:='';
str:=inttohex(buffer[0],2);
self.Memo1.Lines.Add(str);
if str='F6' then //判断帧头是否正确
begin
//接收数据
end
else self.MSComm1.InBufferCount:=0;
QQ:10609090
email: [email protected]
如果是用asc,那你的思路就有问题了,因为这样传输上来的,那就没错。
如果是RTU模式那就有问题了,因为超过127的数值在mscomm看来就是非法字符了,而用asc码通讯,就根本不可能超过这个数,所以才会出现你看不明白的数据,你可以检查一下,看看是不是大于127的数据都显示为00或者3F
请先转换成十六进制 然后再用字符串处理~!我们用的TEXT控件默认的编码不能正确识别好不~
2 根据Delphi版本打开相应的 DsgnCPort7.dpk(Delphi7)的,编译,Install,有提示成功安装的
3 安装成功后就会在组件页面增加一个CPort页面
4 有Example可以看的为什么根据上面的步骤安装comport,我是在做完第一步后,直接在D:\Program Files\Borland\Delphi7\Lib下打开DsgnCPort7.dpk的,然后编译,但是每次都会有报错,总是安装不成功,为什么! 报错内容为:error reading AnalyzePackageDlg.OnCreate: Invalid property value,哪位高手给我一点意见,谢谢!!