数据能读出,从汽车衡的磅机上(上海耀华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

解决方案 »

  1.   

    用串口监视器监控一下看看传上来的数据是不是正确的MSComm没用过,我用过CPort控件,很方便你的基本思路是对的
    1.把读取到的数据放到缓冲区,然后分析缓冲区的数据(这里要考虑缓冲区读写的时候是否会冲突)2.找到起始字,然后后面的数据是正确的
      

  2.   

    copy(temp1,1,1)=chr(02)
    总也找不到,气死我了
      

  3.   

    给你个CPort的下载地址http://www.softsky.com.cn/Soft/ShowSoft.asp?SoftID=969
      

  4.   


    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 怎么安装
      

  5.   

    1 把这些文件复制到Delphi的Lib目录下面
    2 根据Delphi版本打开相应的 DsgnCPort7.dpk(Delphi7)的,编译,Install,有提示成功安装的
    3 安装成功后就会在组件页面增加一个CPort页面
    4 有Example可以看的
      

  6.   

    我安装了,读出的数据经常还是乱吗
    我想,每次控件读出的数据不是整组数据,而是前一组几位跟后一组的几位组成,
    我的设备说明是
    所有数据均位ASCII码输出,第一位起始位,10位结束位,
    我直接memo1.text:=mscomm1.input
    竟是乱码
      

  7.   

    如果确定设置没问题,仅仅是数据字节错位
    则只能丢掉错位的数据,直到取到开始字后再正常取出数据用ComDataPacket1配合CPort1试试ComDataPacket1有一个StartString和StopString的属性设置后当检测到有这样的字节的时候会出发OnCustomStart与OnCustomStop事件
    如果取到一个整包,则会触发OnPacket事件,在OnPacket事件中处理接收到的数据
      

  8.   

    ComDataPacket1 控件在哪里,是第三方的,我下载那个?
      

  9.   

    ComDataPacket1控件是CPort控件组中的
      

  10.   

    StartString和StopString中填写起始位和结束位?
    说明书上说10位数据,1位为02,10为为03,

    StartString=02
    StopString=03
    ??、
      

  11.   

    StartString := #02
    StopString := #03
      

  12.   


     那个控件并不完善, 还是自己写吧,用api 特别是线程方面,很垃圾。
      

  13.   

    MSComm1.RThreshold := 10;//接收多少位后触发oncomm事件
    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;
      

  14.   

    我可以幫你解決這個問題
    QQ:10609090
    email: [email protected]
      

  15.   

    你是用asc通讯,还是RTU?
    如果是用asc,那你的思路就有问题了,因为这样传输上来的,那就没错。
    如果是RTU模式那就有问题了,因为超过127的数值在mscomm看来就是非法字符了,而用asc码通讯,就根本不可能超过这个数,所以才会出现你看不明白的数据,你可以检查一下,看看是不是大于127的数据都显示为00或者3F
      

  16.   

    恩 是接受的数据格式不对
    请先转换成十六进制 然后再用字符串处理~!我们用的TEXT控件默认的编码不能正确识别好不~
      

  17.   

    关注,可能数据都是作为二进制传送的吧,直接showmessage恐怕显不出来,如果是modbus协议,按协议接收处理即可
      

  18.   

    1 把这些文件复制到Delphi的Lib目录下面
    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,哪位高手给我一点意见,谢谢!!