• 【Labview】通过串口通信从上位机读取和写入数据


    最近博主需要通过Labview的上位机控制一个温控仪表,主要实现在上位机读取实时温度和设定的目标温度,以及通过上位机设定目标温度。这里将其中遇到的问题和心得分享给大家,博主自己也做一个记录。

    由于温控仪表采用的485通讯,modbus RTU协议,因此这里相当于分享的是在Labview中如何通过modbus RTU协议,实现读数据和写数据。

    1、读取过程温度与设定的目标温度。

    这里先说一下,从GUI面板跳转到程序框图的快捷键是“Ctrl+E”。原始的Labview程序框图如下图:

    这里重点要注意写入的时候,一定要定义写入值的模式,比如“十六进制显示”(Hex Display),而不是普通(Normal display)。

    写入值Modbus RTU协议的数据结构是:设备地址(如01)+RTU功能码(如03,表示读取单一寄存器)+寄存器地址(如0002,可以在设备通讯说明上看到)+读取的字节数(如0002,是两个字节)+CRC校验码(可以用在线CRC校验码在线计算器得到)。CRC校验码在线计算器的网址如下:16进制(CRC16)(MODBUS RTU通讯)校验码在线计算器 (23bei.com),在空白处输入数据中除CRC校验码的部分,然后点击计算,会在CRC-16 Modbus中看到自动生成的CRC校验码,将其复制到Labview中即可。

    然后强制转换的格式一定要是U16的,如果不缺定是哪种数据类型,可以多尝试几种。

    温度显示的时候,也一定要注意设定显示数据的格式,比如DBL双浮点。

    2、写入设定的温度。

    这里和上述读取数据不同的地方在于,数据结构中modbus RTU功能码改为了06,即写入寄存器,因为是十六进制数据,因此要将十进制数据转化为十六进制的,这里为手动提前将十进制的温度转为十六进制后,直接复制到Labview中。

    设备ID是01,功能码是06,寄存器地址是0002,写入值的十六进制是0078,CRC校验码是2828,所以整条modbus通讯数据的形式就是“0106 0002 0078 2828”。

    例子框图程序中,设定目标温度为120℃,因此120的十六进制数是78,即0078;然后末尾的2828CRC校验码,为通过上面在线计算器求得的。这里一定要注意,输入数值的形式要选择Hex Display;

  • 相关阅读:
    Java学习笔记------内部类
    RabbitMQ学习笔记-rabbitMQ是什么
    eub:SpringSecurity的使用(三)
    SpringMVC的响应处理
    【C】—文件版本通讯录的实现
    VS“无法查找或打开PDB文件”问题
    yolo后处理操作-如何获取我们想要的目标框及置信度?
    visual studio 2017安装完成后,编译c++项目失败,提示E696,无法打开ctype.h errno.h float.h stdio.h
    头疼!卷积神经网络是什么?CNN结构、训练与优化一文全解
    【总结】maven 打包刷新下载依赖卡死
  • 原文地址:https://blog.csdn.net/dave496206/article/details/139576159