基于 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小时内删除。
发表评论