文档介绍:标签: 虚拟仪器  
labview中的串口通信协议示例与分析
变频器与个人电脑使用RS-232/RS-485 串行总线连接,如下所示:
   
    在通讯操作中,通过个人电脑以命令方式控制仪器。
    通讯数据格式:
    l  起始位: 1 位
    l  数据位: 8 位
    l  奇偶位: 无
    l  停止位: 1 位
    应答及命令格式:
    l  命令模式
    ::- 数据头,只有以::开头的数据包才认为有效。
    AD  - 设备号,当前通讯的设备ID。
     ? - 指明该数据是PC发出的指令。 
    RI  - 响应时间,从PC发出命令到仪器应答的时间。
    SC  - 和检验码,等于图中“和校验范围”所示各位相加。
    l  应答模式
    #  - 指明该数据是仪器发回的应答数据。
    其它同上。
    l  故障模式
    %  - 指明该数据是仪器发回的故障数据。
    其它同上。
    协议说明:
    无论是控制仪器还是查看仪器数据都需要PC发出相应的命令;只要PC发出命令(前提是与仪器正常通讯),仪器都会返回数据(应答或故障)。
    使用LabVIEW编写通信模块:
    1. 主要节点:Functions->Instrument I/O->VISA Resource Name Constant, Functions->Instrument I/O->Serial->VISA Config Serail Port, VISA Read, VISA Write, VISA Close
    2. 串口设置:根据仪器说明设置如波特率等等串口参数。超时设置根据上述RI。
    3. 写串口指令:根据上述“命令模式”的格式包装命令数据,和校验由“和校验范围”中数位相加而得,所以之前应该写一子VI用来计算和校验。建议使用以下变量来包装数据:
    l  prefix:前缀,这里是::
    l  devID:设备号
    l  type:通讯类型(这里是?),可以与RI合并
    l  cmdNum:命令号
    l  cmdValue:命令号对应的命令值
    l  sumVerify:和校验码
    l  end:结束字符
    注意:一般协议要求“命令内容”满足一定的位数,所以应该做一个子VI,专门在那些数位不够的命令前补足空格或0。
    4. 读串口数据:系统为串口开辟了一定大小的缓冲队列空