REVOLUTION PI Family是基于树莓派的工业级工控机家族,型号和功能齐全,家族产品还包括现场总线各协议网关比如Profinet/EtherCAT/CANopen等,还包括DIO,AIO等模块。 与传统的树莓派相比是真正意义上适用于工业场合的模块,工作温度范围达到-40 ~55 °C,静电保护达到4 kV / 8 kV,且浪涌/爆裂测试以及EMI测试都达到了EN61131-2和IEC 61000-6-2标准的要求。 支持Node-RED,Python,或纯C等多种编程语言;支持通用的工业物联网(IIoT)协议,如MQTT和OPC UA;含两个以太网接口,其中一个可以通过Modbus TCP协议连接工业现场网络,另一个可以连接上级的IT系统或是云端服务器。 Modbus TCP从站应用 本应用示例适用于Jessie Image。但它并不适用于Wheezy。 在以下示例中,我们提供了一个Modbus TCP主站,它采集RevPi Core的CPU温度信息。我们使用的RevPi Core被视为从站。 提醒!在此示例中,我们使用Windows 计算机中的“qModMaster”软件来模拟Modbus主站。可以在https://sourceforge.net/projects/qmodmaster下载此软件。 下面开始正式操作。
首先启用Modbus-TCP 从站功能。
之后将进入登录界面。
现在你可以看到RevPi Core的当前设备状态。
进入PiCtory界面。 下面进行Modbus TCP从站配置。 打开设备目录中的“Virtual Devices”文件夹。 选择Modbus TCP Slave。 按住鼠标左键并将Modbus TCP从站拖到RevPi Core旁。Modbus TCP从站现在将出现在配置面板的最右侧。 在“Device Data”窗口中设置该设备的基本设置。此设置是可选的。如果你使用大量设备并希望稍后在另一个程序中处理数据,则此输入可能非常有用。 在“Value Editor”中,我们进行有关TCP连接的设置。在本示例中的设置是: TCP_port:502。 根据Modbus规范,TCP端口的默认值为“502”。你可以更改这个值。这是可行的,如果你想在同一网络中实现2个不同的控制器,它们不应相互干扰。 max._modbus_TCP_connections:10。 下面保存PiCtory配置。 单击“File>Save”以保存文件。 单击“Tools>Reset Driver”。这将激活设备的更改。 下面说明如何查询CPU温度。 你可以在命令行中使用以下命令查询RevPi Core的CPU温度: /usr/bin/vcgencmdmeasure_temp 可以得到当前的温度输出: 为了在Modbus上处理这个值,需要转换此输出量。温度需要x10即去掉小数点之后再用作输出量: /usr/bin/vcgencmdmeasure_temp | awk ' { print substr($0,6,2) substr($0,9,1) } ' 现在使用piTest将数据写入Modbus寄存器: piTest-w Output_1, $(/usr/bin/vcgencmd measure_temp | awk ' { print substr($0,6,2)substr($0,9,1) } ') 为确保温度不仅一次写入寄存器,而是连续写入,整个过程必须循环运行: whiletrue; do piTest -w Output_1,$(/usr/bin/vcgencmd measure_temp | awk ' { printsubstr($0,6,2) substr($0,9,1) } '); sleep 1; done & 下面进行Modbus-TCP主站配置。 在本示例中使用工具“qModMaster”来查询值。 针对本示例进行以下设置:
Modbus模式:TCP
SlaveAddr:1
扫描速率(毫秒):1000
功能码:Read Input Registers (0x04)
DataFormat:Dec
起始地址:0
寄存器数量:1 单击“选项”,然后选择“Modbus TCP”。 在“从机 IP”栏中设置RevPi Core的IP地址。 设置TCP口。对于Modbus TCP连接,通常为“502”。 单击“连接”。这将从站连接到Modbus主站。 单击“读/写”。这将通过Modbus提取值。 现在可以看到值505。这说明RevPi Core的CPU温度为50.5°C 下面来看看Modbus功能。 Modbus从站模块为你提供以下Modbus功能:
读输入
读输出
写入一个输入寄存器
写入多个输入寄存器 接着再介绍一些简单的操作示例。 首先仍使用主站读输入寄存器功能(0x04)来读取从站的输出。 将寄存器数量改为5。 单击“连接”,将从站连接到Modbus主站。 提取数据时可以选择单次抓取数据: 或者连续抓取数据: 这里使用连续抓取数据的“扫描”功能。 在已建立的SSH连接的命令行中输入“piTest -w Output_1,10”,随后可以在主站中读取到这个数据。 输入“piTest -w Output_2,20”,这个数据随后也出现在主站中。 同样的,由主站向从站写入数据也是可行的。 这时将功能码改为”Write Multiple Registers”(0x10),仍然选择向前5个寄存器写入数据,但将Data Format改为“十六进制”。 之后单击“连接”,将从站连接到Modbus主站。选择“扫描”方式连续处理数据。在五个寄存器中分别输入简单的1,2,3,4,5几个数据。 然后在命令行中输入“piTest -r Input_1”来读取从站输入口1的数据。 在主站中将1号寄存器的值改为“10”,读取的从站输入口1的数据也随之变化。 下面介绍如何一次性读取5个从站输入端口的数据。 首先需要明确从站输入口1 的Offset值。在命令行输入“piTest-v Input_1”可以获取详细信息。 从显示的信息可以看到Input_1的Offset值为11。 这样就可以使用“piTest -r 11,10,h”命令来读取从offset11开始的10个字节,并且以十六进制的格式显示。 一个Modbus TCP从站有32个输入寄存器和32个输出寄存器可供使用。如果你需要更多,也可以在PiCtory里配置多个Modbus TCP从站。 ---------------------------------------------------------------------------------------------------------------------- 我们尊重原创,也注重分享,文章来源于微信公众号:工业通讯,建议关注公众号查看原文。如若侵权请联系qter@qter.org。 ---------------------------------------------------------------------------------------------------------------------- |