基于 LabVIEW的 ModBus TCP网络的可靠性设计
摘要:LabVIEW中关于ModBus TCP的两种编程方法,调入函数的方式较I/O服务器方式稳定,但需要进行地址转换,详述地址转换方法。
关键词:LabVIEW;ModBus TCP
0 引言
在LabVIEW进行ModBus TCP编程时通常可以采用两种方法:在项目中创建关于ModBus TCP的I/O服务器和调用数据通信函数中的ModBus TCP函数,通常使用第一种方法。但在使用过程中,虽然在项目中创建I/O服务器的方式可以批量创建和编辑绑定变量,编程效率高,操作简单,但时常出现第一次运行通信失败的故障,非常影响运行效率。采用调用函数的方式则不会出现这种故障,通信连接成功率几乎百分之百,但在编程时需要特别注意地址转换问题。
1 ModBus TCP的网络模型
ModBus TCP是ModBus协议和TCP/IP协议结合的产物,其网络模型如表1所示,可以看出Mo
dBus协议在7层应用层,因此该协议本质是一种TCP/IP协议的应用,在设计ModBus TCP服务器时PC端IP和PLC端IP在设置在同一网段。
表1 ModBus TCP网络模型
ISO/OSI模型
7
应用层
ModBus协议
6
表示层
5
会话层
4
传输层
TCP
3
网络层
IP
2
数据链路层
CSMA/CD带冲突检测的载波监听多路访问
1
物理层
以太网物理层(IEEE 802.3)
2 两种编程方法
2.1 ModBus TCP的I/O服务器创建
安装好DSC模块以后新建一个LabVIEW项目,右击我的电脑,新建,选择I/O服务器,出现如图1左所示的界面,选择Modbus。如图1右所示,设置ModBus服务器的参数,选择Modbus以太网,设置服务器地址、刷新率、PLC的IP地址等。如图2左所示,创建绑定变量,依据PLC中各个变量的ModBus TCP对应表进行选择,此处为6位长度地址,通常0开头为DO、1开头为DI、3开头为AI、4开头为保持寄存器值。如图2右所示,批量编辑变量名称、数据类型和访问方式。如图3所示,在VI文件中选择一个变量绑定网络地址(如按钮绑定地址为000001的数字输出1)。
图1 创建ModBus的I/O服务器
图2 批量创建和编辑绑定变量
图3 应用变量绑定网络变量
2.2 ModBus TCP调用函数创建
新建VI文件,打开Modbus Master函数栏,如图4左所示,该栏包含了ModBus服务器的全部函数。选用创建主设备函数,选择新建TCP主设备,输入PLC的IP地址和端口号(502),
连接读取输入寄存器、写入线圈等业务函数,最后连接错误输出函数,在界面监视网络状态。如图4右所示,为写入单个保持寄存器函数,需要输入的参数主要有ModBus主设备数据流、地址和待写入寄存器值,需要注意的是地址的数据范围为0-65535,而PLC表中的地址为6位(如400001),此时需要进行转换。
图4 ModBus Master函数栏和写入保持寄存器函数
如表2所示,六位地址起始位为1,五位地址起始位为0,相互转换要去一位减1,I/O服务器中识别六位地址,调用函数识别五位地址的有效数字,通过不同的函数类型区分数据类型,即PLC地址的首位。
表2 地址转换表
数据类型
PLC地址类型1
PLC地址类型2
I/O服务器地址
调用函数类型tcp ip协议在设计时
函数的输入地址
DO
000003
00002
000003
写入线圈
2
DI
100003
10002
100003
读取线圈
2
AI
300003
30002
300003
读取输入寄存器
2
保持寄存器
400003
40002
400003
读取/写入保持寄存器
2
3 调用函数方法的应用
如图5、图6所示为调用四种业务函数的示例,读取模拟量和数字量分两个线程,线程中设置循环周期为100ms,该示例为一个伺服电机闭环恒压加载系统。如图5所示,模拟量选用读取输入寄存器函数,读取后进行量程换算显示,如压力、位移。如图6所示,伺服电机的控制根据压力值经过PID计算后设置增加的脉冲个数,选用写入保持寄存器函数,设置包括空载转速脉冲数、占空比、增加的脉冲数等;选用写入线圈函数,控制电机转向、电机伺服使能;选用读取线圈函数,读取行程两端限位开关。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。