LabVIEW 2020 实现最简单的Modbus TCP客户端程序(二)

LabVIEW 专栏收录该内容
62 篇文章 10 订阅

LabVIEW 2020 实现最简单的Modbus TCP客户端程序系列教程:

        LabVIEW 2020 实现最简单的Modbus TCP客户端程序(一)

        LabVIEW 2020 实现最简单的Modbus TCP客户端程序(二)

        LabVIEW 2020 实现最简单的Modbus TCP客户端程序(三)


目录

一、序言

二、设计前面板

1、运行NI LabVIEW 2020(32位)

2、创建一个文件名为:TCP_MODBUS的vi文件

3、前面板创建一个数值型数组控件。

4、前面板创建一个布尔型数组控件。

5、前面板创建一个开关量按钮控件。

三、设计程序框图

1、在程序框图添加一个While循环

 2、MODBUS TCP库拖一个New TCP MAster控件

 3、MODBUS TCP库拖一个Read Holding Registers控件

4、MODBUS TCP库拖一个Read Discrete控件

 5、连线开关量按钮和While循环

 6、While循环添加1个100毫秒的定时器

 7、连线New TCP MAster控件、Read Holding Registers控件和Read Discrete Inputs控件

四、验证

 五、问题

六、源程序


一、序言

        上一个教程LabVIEW 2020 实现最简单的Modbus TCP客户端程序(一)只实现了最简单的Modbus TCP客户端程序,本节我们设计一个稍微复杂一点的Modbus TCP客户端程序,完成如下功能:

       (1)、LabVIEW Modbus TCP客户端程序读取服务器10个保持寄存器的值,即:读取40001,40002,40003,40004,40005,40006,40007,40008,40009,40010。

      (2)、LabVIEW Modbus TCP客户端程序读取服务器10个离散输入寄存器的值,即:读取10001,10002,10003,10004,10005,10006,10007,10008,10009,10010。

      (3)、准备工作参见上一个教程:LabVIEW 2020 实现最简单的Modbus TCP客户端程序(一)

二、设计前面板

1、运行NI LabVIEW 2020(32位)

2、创建一个文件名为:TCP_MODBUS的vi文件

3、前面板创建一个数值型数组控件。

      前面板创建一个数值型数组控件,用来存储保持寄存器内容40001---40010。

      (1)、前面板空白处单击鼠标右键,弹出【控件】窗口

                

      (2)、【控件】--->【数据容器】--->数组

                  拖出1个数组控件到前面板(这个数组控件用来存储保持寄存器内容40001---40010)。

               

                      

      (3)、【控件】--->【数值】--->数值显示控件

                    拖出1个数值显示控件到数组控件中。

                    数值显示控件正在往数组控件中放的过程如下图 

 

                     数值显示控件已经放到数组控件中,然后鼠标把数组控件的下边框往下拉,直到至少露出10个数值显示控件,参见下图。(这个数组控件用来存储保持寄存器内容40001---40010)

       (4)、数组控件中的前面10个数值显示控件的表示法依次修改为U16

4、前面板创建一个布尔型数组控件。

      前面板创建一个布尔型数组控件,用来存储离散输入寄存器内容10001---10010。

 (1)、【布尔】--->方形指示灯

前面板【布尔】下拖动一个方形指示灯到【数组2】数组控件。

 

 

 布尔型方形指示灯控件已经放到数组控件中,然后鼠标把数组控件的下边框往下拉,直到至少露出10个方形指示灯控件,参见下图。(这个数组控件用来存储离散输入寄存器内容10001---10010)

5、前面板创建一个开关量按钮控件。

      前面板创建一个开关量按钮控件,用来退出While循环。

三、设计程序框图

设计程序框图包括以下几个方面:

(1)、在MODBUS TCP库拖一个New TCP MAster控件

             填写IP地址127.0.0.1,填写端口号502,然后连线。

(2)、在MODBUS TCP库拖一个Read Holding Registers控件

              填写起始地址0,填写寄存器数量10(表示读保持寄存器或者说4X寄存器,40001-40010),然后连线。

(3)、在MODBUS TCP库拖一个Read Discrete Inputs控件

              填写起始地址0,填写寄存器数量10(表示读离散输入寄存器或者说1X寄存器,10001-10010),然后连线。

1、在程序框图添加一个While循环

程序框图空白处单击右键,【函数】--->【结构】--->While循环

 2、MODBUS TCP库拖一个New TCP MAster控件

        (1)、程序框图空白处单击右键,【函数】--->【数据通信】--->【Modbus_Library】--->【Master API】--->Create Modbus Instance控件

         (2)、添加1个字符串常量控件,用来填写IP地址27.0.0.1

         (3)、添加1个数值常量控件,用来填写端口号502

         (4)、添加1个数值常量控件,用来填写超时时间 5000毫秒

         (5)、连线IP地址、端口号和超时时间到New TCP MAster控件。

 3、MODBUS TCP库拖一个Read Holding Registers控件

        (1)、程序框图空白处单击右键,【函数】--->【数据通信】--->【Modbus_Library】--->【Master API】--->Read Holding Registers控件

         (2)、添加1个数值常量控件,用来填写起始地址0

         (3)、添加1个数值常量控件,用来填写寄存器数量10

         (4)、连线起始地址、寄存器数量到Read Holding Registers控件。

         (5)、连线Read Holding Registers控件的输出端到数值型数组。

                      数值型数组中存储的就是我们读取的保持寄存器数值。

4、MODBUS TCP库拖一个Read Discrete控件

        (1)、程序框图空白处单击右键,【函数】--->【数据通信】--->【Modbus_Library】--->【Master API】--->Read Discrete Inputs控件

          (2)、添加1个数值常量控件,用来填写起始地址0

         (3)、添加1个数值常量控件,用来填写寄存器数量10

         (4)、连线起始地址、寄存器数量到Read Discrete Inputs控件。

         (5)、连线Read Discrete Inputs控件的输出端到布尔型数组。

                      布尔型数组中存储的就是我们读取的离散输入寄存器数值。

 5、连线开关量按钮和While循环

 6、While循环添加1个100毫秒的定时器

While循环添加1个100毫秒的定时器,用于MODBUS TCP客户端每隔100毫秒访问一次MODBUS TCP服务器。

 (1)、先添加1个定时器

 (2)、添加一个数值常量控件,值为100,表示100毫秒,然后连线到定时器

 7、连线New TCP MAster控件、Read Holding Registers控件和Read Discrete Inputs控件

四、验证

1、运行MBSlave.exe 仿真软件(MODBUS TCP服务器)

 2、创建保持寄存器起始地址=1,寄存器数量=10

  3、创建离散输入寄存器起始地址=1,寄存器数量=10

 4、连结网络

 5、运行labVIEW MODBUS客户端程序

 6、TCP MODBUS客户端收到TCP MODBUS服务器的数据(MBSlave)

       (1)、在TCP MODBUS服务器上设置40001=10,40002=20,40003=30,40004=40,40005=50,40006=60,40007=70,40008=80,40009=90,40010=100

       (2)、在TCP MODBUS服务器上设置10001=ON,10002=ON,10003=OFF,10004=OFF,10005=ON,10006=ON,10007=OFF,10008=OFF,10009=ON,10010=ON

         可以看到labVIEW 客户端接收正确。

          验证完毕。

 五、问题

        当运行一段时间后会弹出如下错误对话框,同时通信中断,请知道的网友告诉在下该如何解决。

        主要想解决如下异常情况:

        (1)、服务器突然异常(例如:服务器突然断电,过一会服务器正常) ,TCP MODBUS通信是否自动恢复正常。 

        (2)、服务器突然异常(例如:退出服务器仿真软件,过一会服务器仿真重新正常运行) ,TCP MODBUS通信是否自动恢复正常。 

        (3)、网线突然拨掉,过一会网线连接好,TCP MODBUS通信是否自动恢复正常。

六、源程序

本教程提供

         (1)、labVIEW2020源程序

         (2)、mbslave.exe  TCP从站仿真软件

下载链接:

https://download.csdn.net/download/ba_wang_mao/20597048

  • 0
    点赞
  • 0
    评论
  • 5
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

参与评论 您还未登录,请先 登录 后发表或查看评论
Modbus 主站测试软件 这是一个小巧的Modbus Master测试工具,综合了Modbus TCPModbus UDP、Modbus RTU、Modbus ASCII 四种工作模式.是现场通讯测试的佳助手。适合运行在任何Windows平台下。无需任何运行库。软件不需要安装,解压后可直接运行。 #### 功能简介 1. 选定连接方式为 以太网TCP、以太网UDP、串口RTU、串口ASCII 2. 如果是串口RTU、ASCII:设定串口客户端串口及参数,点击打开,可选择不同的寄存器进行读写操作。 如果是TCP、UDP:设定客户端IP和端口(默认502),点击连接,连接成功后,可选择不同的寄存器进行读写操作。 3. 该软件作为Modbus 主站(即Mdobus 客户端)使用,可以读取线圈寄存器(Output Coil)、离散输入寄存器(Input Relay)、保持寄存器(Holding Register)、输入寄存器(Input Register)的数据,同时可以写入线圈寄存器(Output Coil)、保持寄存器(Holding Register)数据;数据可以按格式格式进行显示,为测试工作带来便利。 #### 后更新 v.5.1.12.46(Build 2020/12/11) - 双击快速修改线圈寄存器(Output Coil) - 线圈寄存器(Output Coil)添加HEX,BIN格式输入 v.5.0.0.42(Build 2020/12/03) - 新增收发时间显示,及时间格式 - 新增收发数据显示不同颜色 - 新增数据保存功能 - 修订线圈寄存器、离散输入寄存器数据显示 - 新增0FH功能码功能 - 完善各功能码反馈提示信息及异常信息 - 新增本地端口参数 - 完善各种数据换位格式,可选择以下显示方式 - 1: Signed (2 Byte)有符号整数(AB)* - 2: Signed (2 Byte)有符号整数(BA) - 3: UnSigned(2 Byte)无符号整数(AB)* - 4: UnSigned(2 Byte)无符号整数(BA) - 5: LongWord (4 Byte)无符号整数(AB CD)* - 6: LongWord (4 Byte)无符号整数(CD AB) - 7: LongWord (4 Byte)无符号整数(BA DC) - 8: LongWord (4 Byte)无符号整数(DC BA) - 9: LongInt (4 Byte)有符号整数(AB CD)* - 10: LongInt (4 Byte)有符号整数(CD AB) - 11: LongInt (4 Byte)有符号整数(BA DC) - 12: LongInt (4 Byte)有符号整数(DC BA) - 13: Float(4 Byte)单精度浮点(AB CD)* - 14: Float(4 Byte)单精度浮点(CD AB) - 15: Float(4 Byte)单精度浮点(BA DC) - 16: Float(4 Byte)单精度浮点(DC BA) - 17: Double(8 byte)双精度浮点(AB CD EF GH)* - 18: Double(8 byte)双精度浮点(GH EF CD AB) - 19: Double(8 byte)双精度浮点(BA DC FE HG) - 20: Double(8 byte)双精度浮点(HG FE DC BA) - 21: String 字符(AB) 包含以下功能码: - 01H--读取线圈寄存器(Output Coil),位操作,可读单个或者多个 - 02H--读取离散输入寄存器(Input Relay),位操作,可读单个或多个 - 03H--读保持寄存器(Holding Register),字节指令操作,可读单个或者多个 - 04H--读取输入寄存器(Input Register),字节指令操作,可读单个或者多个 - 05H-写单个线圈寄存器(Output Coil),位操作,只能写一个 - 06H--写单个保持寄存器(Holding Register),字节指令操作,只能写一个 - 0FH--写多个线圈寄存器(Output Coil),字节指令操作,可写多个 - 10H--写多个保持寄存器(Holding Register),字节指令操作,可写多个
©️2022 CSDN 皮肤主题:1024 设计师:我叫白小胖 返回首页

打赏作者

ba_wang_mao

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值