需要采用mscomm控件实现于智能仪表的通信,然后利用ADO将采集的的数据保存在数据库中,都只是些仪表的内部数据。请问如何实现

解决方案 »

  1.   

    AI仪表通讯协议规定,地址代号为两个字节,其数值范围(16进制数)是80H—BFH,两个字节必需相同,数值为(仪表地址+80H)。例如,仪表参数Addr=10(16进制数为0AH,0A+80H=8AH),则该仪表的地址表示为:  8AH  8AH读: 地址代号+52H(82)+要读参数的代号+0+0+CRC校验码
    写: 地址代号+43H(67)+要写参数的代号+写入数低字节+写入数高字节+CRC校验码读指令的CRC校验码为:要读参数的代号*256+82+ADDR
    ADDR为仪表地址参数值,范围是0-100(注意不要加上80H)。CRC为以上数做二进制16位整数加法后得到的余数(溢出部分不处理),余数为2个字节,其低字节在前,高字节在后。
    写指令的CRC校验码则为:要写的参数代号*256+67+要写的参数值+ADDR。
    要写得参数值用16位二进制整数表示。
        无论是读还是写,仪表都返回以下数据
        测量值PV+给定值SV+输出值MV及报警状态+所读/写参数值+CRC校验码
        其中PV、SV及所读参数值均为整数格式,各占2个字节,MV占一个字节,数值范
    围0-220,报警状态占一个字节,CRC校验码占2个字节,共10个字节。
        CRC校验码为PV+SV+(报警状态*256+MV)+参数值+ADDR,按整数加法相加后得到的余数。AI 仪表可读/写的参数代号表:
    参数调节器AI-708M巡检仪流量积算仪AI-338频率调节器
    代号(AI-708/808/708P/808P) (AI-708H/Y)/IO模块
    00H 状态位(空) SV批量控制给定值 SV/SteP给定值/程
      给定值/程序段   序段
    01H HIAL上限报警 HIA(X) FHIA HIAL上限报警
    02H LoAL下限报警 LoA(X) FLoA LoAL下限报警
    03H DHAL正偏差报警(空) SPE DHAL正偏差报警
    04H DLAL负偏差报警(空) Act DLAL负偏差报警
    05H dF回差 dF(X) Esn dF回差
    06H Ctrl控制方式(空) FSc CtrL控制方式
    07H M5保持参数(空) PdIH M5保持参数
    08H P速率参数(空) CSc P速率参数
    09H t滞后参数(空) CdIH t滞后参数
    0AH CtI控制周期(空) Cut CtI控制周期
    0BH Sn输入规格 Sn(X)-34(只读) FdIH 
    0CH dIP小数点位置 Sn(X)-1(只读) FdIP dIP小数点位置
    0DH dIL下限显示值 dIL(X) PA 
    0EH dIH上限显示值 dIH(X) Po 
    0FH ALP报警输出选择 ALP(X) Co 
    10H Sc传感器修正(空) Frd 
    11H OP1输出方式(空) CF 
    12H OPL输出下限(空) bc 
    13H OPH输出上限(空) IoL 
    14H CF功能选择 Cn功能选择 Foh 
    15H 仪表型号特征 仪表型号特征 仪表型号特征 仪表型号特征
    16H addr仪表地址addr仪表地址addr仪表地址addr仪表地址
    17H dL数字滤波 Sn(X)-2(只读) IoH 
    18H run运行参数 nonc常开/常闭 dL 
    19H Loc参数封锁 Loc参数封锁 Loc 
    1AH C01 无 备用 
    1BH t01  无 FDF 
    1CH C02 无 CHIA 
    1DH t02 无 CLOA 
    1EH C03 无 PHIA 
    1FH t03 无 PLOA 
    20H C04 无 ALP 
    21H t04 无 FSB 
    22H C05 无 CDIP 
    23H t05 无 PDIP 
    24H C06 无 PSc 
    25H t06 无 CLN 
    26H C07 无 FLJH 
    27H t07 无 FLJL 
    28H C08 无 EJH(补前流量高) 
    29H t08 无 EJL(补前流量低) 
    2AH- C09-C31程序数据 无 无 
    55H    
    56H 运行时间   
      

  2.   

    根据上面的,用VB如何实现啊?谢谢上面的zdingyun()
      

  3.   

    你那个通信协议是TEX-200系列仪表V6.0串行通讯接口协议说明中规定的。
    TEX-200系列人工智能调节器/多路巡检仪/流量积算仪的TEX-200通讯接口协议,具备 16位的求和校正码,通讯可靠,支持1200,2400,4800,9600,19200等多种波特率,并且将上位机访问一台仪表的平均时间缩短到0.1秒以下.仪表允许在一个RS485通讯接口上连接多达101台仪表。
    一、接口规格
        TEX-200系列仪表使用异步串行通讯接口,接口电平符合RS232C或RS485标准中的规定。数据格式为1个起始位,8位数据,无校验位,一个或2个停止位。通讯传输数据的波特率可调为1200--19200 bit/S(波特率为19200时需配界高速光耦的通讯模块。TEX-200仪表采用多机通讯协议,如果采用RS485通讯接口,则可将1—101台的仪表同时连接在一个通讯接口上。采用RS232C通讯接口时,一个通讯接口只能联接一台仪表。
        RS485通讯接口通讯距离长达1KM以上,只需两根线就能使多台TEX-200仪表与计算机进行通讯,优于RS232通讯接口。为使用普通个人计算机PC能作上位机,可使用RS232C/RS485型通讯接口转换器,将计算机上的RS232C通讯口转为RS485通讯口。宇光电子技术有限公司所为此专门开发了新型RS232/RS485转换器,与其他公司同类产品相比,具备体积小,无需初始化而可适应任何软件,无需外接电源,具有抗雷击等优点.
    按RS485接口的规定,RS485通讯接口可在一条通讯线路上连接最多32台仪表或计算机。需要联接更多的仪表时需要中继器,也可选择采用特殊芯片的通讯接口,则最多可连接100台TEX-200仪表在一条通讯线路上,目前生产的TEX-200仪表通讯接口模块通常采用特殊芯片,具备一定的防雷和防静电功能,且无需中继器即可连接约101台仪表。
        TEX-200仪表的RS232C及RS485通讯接口采用光电隔离技术将通讯接口与仪表的其他部分线路隔离,当通讯线路上的某台仪表损坏或故障时,并不会对其它仪表产生影响。同样当仪表的通讯部分损坏或主机发生故障时,仪表仍能正常进行测量及控制,并可通过仪表键盘对仪表进行操作。16位校验码不仅保证数据可靠性,并保证在通讯异常,比如网络上有地址相同的仪表或有其他公司产品时,仪表和计算机机仍能分别正常工作,不会产生数据混乱的问题,因此采用TEX-200仪表组成的集散型控制系统具有较高工作可靠性。
        由于采用普通计算机作上位机,其软件资源丰富,发展速度极快。新的TEX-200上位机软件广泛采用WINDOWS作为操作环境,不仅操作直观方便,而且功能强大。这使得TEX-200DCS系统价格大大低于传统DCS系统,而性能及可靠性则均可优于传统DCS系统。 
    二、通讯指令
        TEX-200仪表采用16进制数据格式来表示各种指令代码及数据。TEX-200仪表软件通讯指令经过优化设计,只有两条,一条为读指令,一条为写指令,两条指令使得上位机软件编写容易。不过却能100%完整地对仪表进行操作。
        地址代号:为了在一个通讯接口上连接多台TEX-200仪表,需要给每台TEX-200仪表编一个互不相同的代号。TEX-200有效的地址为0—100。所以一条通讯线路上最多可连接101台TEX-200仪表。仪表的地址代号由参数Addr决定。
       仪表内部采用整型数据表示参数及测量值等,数据最大范围为:-2999—+32767。因此采用-32768—-7160之间的数值来表示地址代号,来降低因数据与地址重复造成冲突的可能性。TEX-200仪表通讯协议规定,地址代号为两个字节,其数值范围(16进制数)是80H—BFH,两个字节必需相同,数值为(仪表地址+80H)。例如,仪表参数Addr=10(16进制数为0AH,0A+80H=8AH),则该仪表的地址表示为:  8AH  8AH
    参数代号:仪表的参数用1个8位二进制数(一个字节,写为16进制数)的参数代号来表示。它在指令中表示要读/写的参数名。
    TEX-200 仪表可读/写的参数代号表:
    参数 调节器 TEX-200巡检仪
    代号 TEX-200系列仪表  
    00H 给定值 (空) *
    01H  HIAL上限报警  HIA(X)
    02H  LoAL下限报警  LoA(X)
    03H  DHAL正偏差报警 (空) *
    04H  DLAL负偏差报警 (空)
    05H  dF回差  dF(X) *
    06H  Ctrl控制方式 (空)
    07H  M5保持参数 (空)
    08H  P速率参数 (空)
    09H  t滞后参数 (空)
    0AH  CtI控制周期 (空)
    0BH  Sn输入规格  Sn(X)-34(只读)
    0CH  dIP小数点位置  Sn(X)-1(只读)
    0DH  dIL下限显示值  dIL(X)
    0EH  dIH上限显示值  dIH(X)
    0FH  ALP报警输出选择  ALP(X)
    10H  Sc传感器修正 (空)
    11H  OP1输出方式 (空)
    12H  OPL输出下限 (空)
    13H  OPH输出上限 (空)
    14H  CF功能选择  Cn功能选择
    15H  仪表型号特征  仪表型号特征
    16H  addr仪表地址 addr仪表地址
    17H  dL数字滤波  Sn(X)-2(只读)
    18H  run运行参数  nonc常开/常闭
    19H  Loc参数封锁  Loc参数封锁  
    1AH  C01  无  
    1BH  t01   无  
    1CH  C02  无  
    1DH  t02  无  
    1EH  C03  无  
    1FH  t03  无  
    20H  C04  无  
    21H  t04  无  
    22H  C05  无  
    23H  t05  无  
    24H  C06  无  
    25H  t06  无  
    26H  C07  无  
    27H  t07  无  
    28H  C08  无  
    29H  t08  无  
    2AH-  C09-C31程序数据  无  
    55H      
    56H  运行时间    
     
    说明:1、仪表测量值PV没有参数代号,但是只要有对仪表操作,即无任读还是写都会返回测量值,具体见后文。
          2、如果向仪表读取参数代号在表格中参数以外,则仪表不会返回任何数据。
          3、TEX-200—808系列1AH为手动输出值MV。当参数run=0时,可通过写该参数来调
    节手动输出值。为保持兼容性,写 TEX-200-808型仪表1AH也为手动输出值,但建议目前编程统一到16H。
          4、TEX-200-708P型另有60个参数(30个时间及30个温度),其参数代号从1AH-55H,第1段温度为1AH,第一段时间为1BH,第二段温度为1CH,依此排列,程序段号参数SteP为00H,无SV参数。代号56H为当前段已运行时间,只许读,不能写。
    5、15H为仪表型号的特征:
    V5.0-V6.0版仪表开始,15H将逐步用于表示仪表的型号特征,这样从上位机软件就能实现对下位机仪表的自动识别。为了尽量与旧有仪表保持兼容,特作以下约定:
    (1)虽然TEX-200系列仪表允许设置很低的通讯波特率,但1200及以下波特率的使用基本上没有,对于TEX-200-708/808型仪表,15H仍返回波特率,这样其高位字节数通常应大于或等于5,当在软件中识别 15H高字节大于5时,上位机软件可识别为TEX-200-708/808型仪表。
    (2)对于AI-708/808P型仪表,15H仍返回程序控制字,其高位字节数值为0,低位字节数据如下:
        (X)(X)(X)(X)(STOP)(HOLD)(EV1)(EV2)
    前4位( BIT)目前暂不用,程序中应允许起为任意值。
    HOLD 及STOP=0,则程序运行。
    STOP=0,HOLD=1则程序暂停,
    STOP=1,HOLD=1,则程序停止
    EV1,EV2表示事件输出状态,为1时表示事件输出动作,为0时表示事件输出无效。
    (3)TEX-200-708H./Y型仪表,15H的高字节为1低字节备用,应允许其为任意值。
    (4)TEX-200-708M型仪表,15H的高字节为3低字节备用,应允许其为任意值。读/写指令分别如下:    读: 地址代号+52H(82)+要读参数的代号+0+0+CRC校验码
        写: 地址代号+43H(67)+要写参数的代号+写入数低字节+写入数高字节+CRC校验码读指令的CRC校验码为:要读参数的代号*256+82+ADDR
    ADDR为仪表地址参数值,范围是0-100(注意不要加上80H)。CRC为以上数做二进制16位整数加法后得到的余数(溢出部分不处理),余数为2个字节,其低字节在前,高字节在后。
    写指令的CRC校验码则为:要写的参数代号*256+67+要写的参数值+ADDR。
    要写得参数值用16位二进制整数表示。
        无论是读还是写,仪表都返回以下数据
        测量值PV+给定值SV+输出值MV及报警状态+所读/写参数值+CRC校验码
        其中PV、SV及所读参数值均为整数格式,各占2个字节,MV占一个字节,数值范
    围0-220,报警状态占一个字节,CRC校验码占2个字节,共10个字节。
        CRC校验码为PV+SV+(报警状态*256+MV)+参数值+ADDR,按整数加法相加后得到的余数。
      

  4.   

    你需做的是根据通信协议,构建VB的通信主窗体模块,我使用简化的串口调试精灵代码来完成:见http://zhidao.baidu.com/question/24721391.html我的答复。
    此外需设计读数据轮询代码和写数据轮询代码。整个通信使用16进制(二进制)方式进行。我代码中16进制以字符形式表示,每2字节16进制构成一字节通信数据。
      

  5.   

    比如我现在想读取  01H(HIAL上限报警)的值,其算法如何实现,我是
    Private Sub Command1_Click()
    Dim arr(1 To 8) As Byte
    Dim ReceiveResult As Variant
    arr(1) = &H81
    arr(2) = &H81
    arr(3) = &H52
    arr(4) = &H1
    arr(5) = &H0
    arr(6) = &H0
    arr(7) = &H53
    arr(8) = &H1
    MSComm1.Output = arr
     
    If MSComm1.InBufferCount >= 10 Then
        ReceiveResult = MSComm1.Input
     Text1.Text = (ReceiveResult(3) * 256 + ReceiveResult(2)) / 10
     End If
    End Sub
    可是始终显示的是仪表的给定值
      

  6.   

    按读:地址代号 + 52H(82)+要读参数的代号 +0  +0  + CRC校验码
          &H81 &H81  &H52        &H1          &H0 &H0  &H53 &H1
    你命令中CRC校验码后多&H1,是否是未达目的原因.
    其二,你对AI仪表的上限报警作了设置,我理解未作设置可能缺省设置为仪表的给定值+0,即仪表的给定值.
    以上意见供参考.