http://digital.ni.com/public.nsf/allkb/F716ABC0F75705ED86257AF5002E1451
主要软件: LabVIEW Modules>>LabVIEW DSC Module
主要软件版本: 2011 SP1
主要软件修正版本: N/A
次要软件: Driver Software>>Comedi Drivers
|
问题:
我有几台自动化设备,通过Modbus通讯的,我可以用LabVIEW来做上位机程序控制吗?
解答:
这是完全可以的,本篇文档主要用于对DSC模块中的Modbus的使用做一个详述,以PLC为例来说明基于Modbus协议怎样与自动化工业现场中的各类设备交换数据,从而简化和扩大LabVIEW的使用。
1. Modbus通讯协议详述
Modbus是OSI模型第七层上即应用层的报文传输协议,它在连接至不同类型总线或网络的设备之间提供客户机/服务器通信。自从1979年出现工业串行链路的事实标准以来,Modbus使成千上万的自动化设备能够通信。目前,互联网组织能够使TCP/IP栈上的保留系统端口502 访问Modbus,扩大了Modbus的使用。因此,目前标准中有两个通讯规程,串行链路上的标准:232-F
和485-A;TCP/IP上的标准RFC793和RFC791。
Modbus协议以简单而雅观著称,是一个请求/应答协议,并且提供功能码规定的服务。一个通用的帧结构如下图所示:

那么对于使用Modbus来进行通讯和传递数据的工程师来说,就关注几个部分即可,地址域、功能码和数据。
先说数据
先说数据

再来看看功能码

至于地址,则需要根据具体设备的说明书或者厂家定义来确定,
以西门子公司的PLC为例。
以西门子公司的PLC为例。
以某公司全自动温控箱为例

我们清楚了通用的数据帧之后,就可以进行一次简单的Modbus通讯了,因为客户机/服务器的机制,在一个正确接收的通讯过程,不出现与请求功能相关的差错,服务器就将向客户机相应数据域包括请求的数据本身。
至此,我已经将厚厚一本的Modbus规范和标准抽丝剥茧,对于我们应用工程师来说,了解了以上内容就可以开始应用了。
2. NI DSC模块中的Modbus特点
NI的LabVIEW从8.0开始引入了本地ModbusTCP和ModbusSerial对任何以太网或串行端口的支持,通过DSC模块,采用窗口配置的方式就能创建Modbus的服务器或者客户端,并能指定不同的寄存器用于读写。如果客户使用的较早版本的LabVIEW或者没有安装DSC模块,依然可以使用LabVIEW的Modbus库在任意以太网或者串行端口上创建Modbus主从设备应用。
3. 连接实例(以西门子PLC S7-200 CPU221为例)
1) 先为PLC正确连接电源,设置好通讯参数,并烧录程序

2) 在LabVIEW中创建好一个Modbus的主设备

进行相应的配置,需要关注的几个参数为模式(Serial或者TCP/IP)、地址(根据设备手册)、报文格式(RTU或者ASCII)这几个。

3) 创建相应的变量,根据本文之前的西门子PLC的地址列表,000001就代表了PLC中的Q0.0,400001就代表了VB0,但是我们可以看到有些差别,中间会多出一个零,原因可以参考
http://digital.ni.com/public.nsf/allkb/41F3B1558F671521862577BA002C500F

4) 做完这些设置就可以开始编程了,编写一个简单的测试程序来监控和改写PLC中Q0.0、Q0.1以及VB0和VB1的值,可以正常读写和监测。

相关链接:
http://sine.ni.com/nips/cds/view/p/lang/zhs/nid/201711
http://digital.ni.com/public.nsf/allkb/9289275474D402678625795D0040CC02
http://digital.ni.com/public.nsf/allkb/41F3B1558F671521862577BA002C500F
附件: