用vb编程序 串口通信   怎样发送一个通讯协议         一串数据 

解决方案 »

  1.   

    MSComm1.Output = “********”
      

  2.   

    给LZ一个通信协议参考:  
              通  讯  协  议
                 (磁效应液位仪)一﹑接口标准
       RS-485(二线制)
       上位机推荐使用研华PCL-745B通讯数据采集卡二﹑协议
    MODBUS通讯协议03功能三﹑通讯控制方式
       采用主从控制方式,上位机为主站,仪表为从站。主站对从站采用ASCII码进行异步半双工数据通信。四﹑数据寄存器地址
                40007——液面值
                40009——界面值
                40010——温度值五﹑寄存器数据格式
    寄存器单元 单位 数值范围 字节数 符号 符号占用位数(二进制) 数值占用位数(二进制)
    液面值 mm 0-65535 2 无 0 16位
    界面值 mm 0-65535 2 无 0 16位
    温度值 0.5℃ -55~+125℃ 2 有 最高4位
    0:正 1:负 低12位
    六﹑通讯数据格式
       通讯参数:2400波特率,无奇偶校验,7位数据位,2位停止位
       03功能数据格式:
       上位机发送报文格式
    幀首 站号 固定值 数据寄存器号高位 数据寄存器号低位 固定值 固定值 错误校验    幀尾
    3A 03H 00H 01H 0D 0A   下位机应答报文格式
    幀首 站号 固定值 固定值 数据寄存器值高位 数据寄存器值低位 错误校验    幀尾
    3A 03H 02H 0D 0A
    (1) 幀首:3A(ASCII码)
     幀尾:0D,0A(ASCII码)
    (2) 站号:仪表的地址号(见仪表标牌上的仪表编号)
    (3) 数据寄存器号:数据寄存器号=数据寄存器地址 - 40001
          例如:寄存器地址为40006,则40006-40001=0005
               高位为高8位字节:00H,低位为低8位字节:05H。
    (4) 数据寄存器值:高位为寄存器数据值的高8位字节,
                        低位为寄存器数据值的低8位字节。
    (5) 错误校验:将除了幀首幀尾外的所有16进制字节相加后取反  
                    加1。错误校验值为1个字节(16进制)
    (6) 发送报文和应答报文都要将16进制码转换成ASCII码进行传
     送。        
          例如:十六进制的1个字节03H变成2个字节的ASCII码30,
               33。
     
    七﹑通讯范例
       以读取1号站仪表40007寄存器值为例
    发送格式
    幀首 站号 固定值 数据寄存器号高位 数据寄存器号低位 固定值 固定值 错误校验    幀尾
    3A 01H 03H  00H  06H 00H 01H  F5H 0D 0A说明:(1)站号:01
         (2)数据寄存器号=40007-40001=0006  高位:00H
                                             低位:06H
         (3)错误校验值:01H+03H+06H+01H=0BH 取反加1后为F5H     
    发送报文(ASCII码):3A,30,31,30,33,30,30,30,36,30,30,30,31,46,35,0D,0A 回文格式
    幀首 站号 固定值 固定值 数据寄存器值高位 数据寄存器值低位 错误校验    幀尾
    3A 01H 03H 02H  55H  55H  50H 0D 0A
    说明:(1)站号:01
         (2)数据寄存器值=5555H=21845mm
         (3)错误校验值:01H+03H+02H+55H+55H=B0H 取反加1
                          后为50H     
    应答报文(ASCII码):3A,30,31,30,33,30,32,35,35,35,35,35,30,0D,0A八﹑编程说明
    为了得到真实的液位,需将从一次表读取的液面值和界面值进行零点调整。具体步骤方法如下:
    1.求零点值
    将油罐中的液面固定在某一点A,利用量油尺或其它测量手段得到该点的真实液位YA,读取一次表该点的液面值YDA,根据YA和YDA求YC(零点值),计算公式如下:
    YC=YA-YDA。
    YC是带符号值,若YA>YDA则YC为正, 若YA<YDA YC为负。
    2.零点调整
    根据零点调整公式将从一次表读取的液面值和界面值转换成实际值。该过程需编程者通过软件实现。
    零点调整公式:YZ=YD+YC
    YZ:实际值
    YD:从一次表读取的液面值或界面值
    YC:零点值    
    举例说明:
    将油罐中的液面固定在某一点,利用量油尺或其它测量手段得到该点的真实液位YA=1000mm,读取一次表该点的液面值YDA=1543mm,YC=YA-YDA=1000-1543=-543mm(零点值)
    YZ=YD-543
        
    九﹑通讯接口连接
       仪表         通讯卡
       S-   ——   DATE-
       S+   ——   DATE+
      

  3.   

    建议楼主先看看这本书,关于串口通信的教程:
    http://download.csdn.net/source/1498637
    http://download.csdn.net/source/1498644
      

  4.   

    LZ提醒你下 最好别用USB转串口的通信方式 最好是直接电路上的9针对台式机后的9针(其实只要3针就可以,2-2,3-3,5-5)
    为什么呢?因为转下,如果数据发送接收过快,容易丢失,以致你的VB程序死掉,都是有可能的,吾的亲身体会!
    至于怎么发送,给你个例子(这是发送AA AA FF 06 31 0 0 0 FF,
    格式: 
    标志字节(帧首)  +  命令字节 + 数据参数字节    +    帧尾字节 
            2字节        2字节        4字节            1字节Private Sub Form_Load()
        MSComm1.CommPort = port
        MSComm1.Settings = setting
    End Sub
    Private Sub Command1_Click()
              Dim lngP As String
              Dim buff_out10() As Byte
              ReDim buff_out10(8)
              MSComm1.Settings = "9600,N,8,1"   ' 9600 波特,无奇偶校验,8 位数据,一个停止位。
              MSComm1.InputLen = 0
              If MSComm1.PortOpen = False Then
                 MSComm1.PortOpen = True
              End If
              buff_out10(0) = &HAA
              buff_out10(1) = &HAA
              buff_out10(2) = &HFF
              buff_out10(3) = &H6
              buff_out10(4) = &H31
              buff_out10(5) = &H0
              buff_out10(6) = &H0
              buff_out10(7) = &H0
              buff_out10(8) = &HFF
              MSComm1.Output = buff_out10
              lngP = GetTickCount    'API函数
              Do
                     DoEvents
              Loop Until GetTickCount - lngP > 100 Or MSComm1.InBufferCount > 10 '当等待时间超过100毫秒或串口接受缓冲区的数据达到10个字节时退出等待循环,这就是一个通信等待的过程。
              DoEvents
    End Sub
      

  5.   

    楼上的,lngP的类型定义错了,应该是Long
      

  6.   

    usb转串口的行吗      多按几次发送键      接收的数据次序就变化了  不过看你介绍的   又了解多了成     在发送协议的时候需要延时吗
      

  7.   


    显示汉字,参考这个:http://download.csdn.net/source/1785343
      

  8.   

    显示成汉字的参考下阿根廷的,USB转串口的主要是一般买的都不好使,要买就买好点的。