使用IOT-Tree Server模拟Modbus设备对接西门子PLC S7-200

这个项目很有意思,用户现场已经有个运行很久的自动化系统,PLC使用西门子S7-200控制几台设备的运行,这是由厂家A提供,并每年提供维护支持。而另一个后来做的系统,由厂家B提供,通过4G方式远程采集几十公里之外的液位、压力、环境参数等信息,然后直接把数据发送到一个云端的系统中,系统提供了Web方式的监控和数据展示分析界面。

本来两个系统各自运行互不干扰,用户发现A厂家的系统如果能获取B厂家的几个数据,就可以实现远程联动,进而控制优化节约能耗。

那么问题来了,厂家A提供的西门子PLC控制系统不想更换,因为如果更换PLC做大升级厂家A需要的成本很高。用户希望用最小的代价实现------把数据接入现有的西门子S7-200中,厂家A只需要把升级程序修改好发送给用户自己下载到PLC中即可(人员不需要到现场,这样的工作可以归为维护)。

1 我给的技术方案

使用一个Linux嵌入IOT-Tree Server设备就可以搞定:

1)这个设备提供RS485接口,并安装在PLC控制柜内部,提供RS485接口连接西门子PLC S7-200.

2)设备通过本地宽带接入网络,能够访问厂家B的Web系统,通过一个URL获取json数据格式的实时数据,里面包含远程监测点的各个指标数据。

3)设备通过RS485口模拟了一个Modbus RTU Slave设备,这个设备内部提供液位等寄存器数据(含通信状态)。这样S7-200就可以直接通过RS485 Modbus RTU协议使用Master方式获取对应的数据,并通过液位数据实现本地设备的启停或更优化调度。

2 具体实现过程

2.1 使用的硬件设备和IOT-Tree Server配置安装

现场使用了一个巴掌大小的Linux模块,有2个RS485口和2个以太网口,内部运行IOT-Tree Server。

这样既可以通过网络访问B系统获取数据,也可以通过RS485口模拟Modbus RTU设备,给S7-200提供数据。

IOT-Tree Server在Linux设备上安装可以参考,本文就重复了:使用IOT-Tree Server制作一个边缘计算设备(Arm Linux)

2.2 新建IOT-Tree项目

访问边缘设备管理界面:http://your_device_ip:9090/admin/。在本地项目区域点击"新增",填写项目名称如下:

完成之后,点击此项目进入项目管理主界面。

2.3 Web数据获取并转换为通道标签数据

2.3.1 接入B系统Web数据并提取

我们可以先访问外部提供的URL,获取一个JSON数据。本文使用的JSON格式如下:

javascript 复制代码
{ "yeiwei":3.32, "pressure":0.21, "update_dt":17213546556 }

在左上角点击"接入",选择"HTTP Client",填写对话框 Name=web ,Title=Web。如下:

确定之后,鼠标右键点击新增的"web"项,选择新增连接。在弹出对话框填写外部提供的URL地址。当然也得提供Name和title。如下:

点击"Data Probe"按钮,在弹出的对话框左上角点击"json"按钮,然后把样本JSON数据填写如文本框:

确定之后,可以看到左边展示了整体的数据结构:

点击需要提取的数据值,并选择中间右箭头按钮,可以在Probed List增加对应内容:我们本次就提取这3个数据。其中,在Title列,点击就可以修改对应的标题。如下:

多次确定,完成"Url1 [u1]"这个接入。

2.3.2 定义通道和标签

鼠标右键浏览树的根节点选择"新增通道"。填写如下:

确定之后,把"Url1 [u1]"和ch1之间建立关联。如下:

点击ch1,在右边标签列表中添加如下几个标签数据:

2.3.3 绑定提取数据到标签

再次鼠标右键接入"Url1 [u1]",选择编辑,在弹出对话框中点击按钮"Bind Channel"。

在弹出绑定对话框中,左边选择提取的数据,右边选择通道下面对应的标签,点击中间绑定按钮。多次操作最终完成绑定:

确定之后,我们就可以启动项目查看通道ch1下面的标签值是否跟着外部Web系统提供的URL数据变化而变化。

2.3.4 转换标签数据类型(便于Modbus输出)

上面只要看到标签数据有效,且更新时间不断刷新,说明标签接入url、提取和绑定数据全部ok了。接着我们需要把这几个标签数据转换为modbus设备的内部寄存器地址中的数据。

为此,我们还需要做个标签数据类型转换:这是因为Modbus协议最基本的数据类型是bool(bit)和字(int16),为了PLC调用方便,我们可以把压力和液位两个数值从float转换为int16。并且设定

输出值=实际值*100

双击压力这个标签,点击"转换"-简单计算,其他一些转换填写内容如下(液位同样转换配置):

另外把更新计数绑定的时间毫秒数转换为int16,只保留数值后4个字符

更新计数=实际毫秒 % 10000 //除余10000,确保数据有变化即可

双击更新计数这个标签,点击"转换"-JS,转换填写内容如下:

javascript 复制代码
return $input % 10000;

2.3.5 运行查看效果

可以看到3个标签都转成了int16类型,这个很方便直接成为Modbus设备的数据了。

2.4 模拟Modbus RTU设备

这就要用的IOT-Tree Server消息流功能了。

2.4.1 新增Modbus Slave模块节点

在你的IOT-Tree项目管理界面左下角,你可以添加一个消息流,点击之后,可以看到消息流具体配置界面,你可以在配置界面左边列表选择模拟器分类下的"Modbus Slave"节点,拖拽到配置区就完成了节点的添加。如下图:

双击刚刚添加的Modbus Slave节点,可以看到弹出配置界面。你可以在里面进行详细配置。

2.4.2 配置总线上的设备

2.4.2.1 总线设备列表和对外接口

我们配置了设备1,地址=1的一个设备,以及串口COM3提供对外连接接口------此接口对应RS485与PLC相连。

一个Modbus Slave节点代表了一个Modbus 总线,上面可以配置一个或多个Modbus设备(每个设备地址不相同)。因此,在节点弹出的配置界面中,上面部分是设备区域(Devices),你可以在其中添加多个设备。

请注意:根据Modbus协议要求,每个设备地址不允许相同,设置时请限制在1-254之间的范围内

2.2.2 设备内部数据地址段

点击新增设备或现有设备编辑按钮。弹出单个设备具体的配置界面。如图:

我们点击段添加或现有段编辑按钮,弹出的编辑界面填写如下:

其中FC时功能码,我们选择4------这表示只读int16数据类型,地址idx从0开始,共有3个数据。

确定之后,点击选择此段,右边会出现3个数据地址列表,我们只需要把Bind Tag列选择添加对应的标签进行绑定即可:

确定之后,就完成了Modbus RTU设备对外提供Slave对接所有工作了。

2.5 测试接口

你可以使用modscan等软件,配合设备提供RS485接口对数据更新进行测试。

3 可靠性应对措施

这是一个工业现场必须考虑的情况------可靠性。以上的整体实现过程中间经过了2个环节,一个是B供应商提供的Web URL,以及本文使用的IOT-Tree Server。PLC在使用这个数据进行控制优化时,必须考虑这两个环节失效的情况,并做好应对措施,保证优化之后的系统能够安全运行------最坏情况应该是能够退出优化控制状态,等数据恢复之后再次自动进入优化控制状态。

1,PLC不仅要考虑此RS485接口及对应的模拟设备断开之后的应对措施------退出优化控制状态。

2,PLC还应该根据更新计数up_cc这个数据,判断数据是否有效,如果up_cc这个数据点超过一定的时间(如30秒)没有更新,则也应该认为当前获取的数据无效,进而退出优化控制状态。

相关推荐
蓁蓁啊2 小时前
C/C++编译链接全解析——gcc/g++与ld链接器使用误区
java·c语言·开发语言·c++·物联网
梦想的旅途22 小时前
企业微信API外部群自动化推送:从“群发工具”到“智能触达”的架构实践
运维·自动化·企业微信
Aloudata2 小时前
数据工程视角:指标平台选型深度对比(BI 指标中心 vs 传统 vs Headless vs 自动化平台)
数据分析·自动化·数据治理·指标平台·noetl
0思必得03 小时前
[Web自动化] Selenium处理文件上传和下载
前端·爬虫·python·selenium·自动化·web自动化
Arvin6273 小时前
研发环境:SSL证书快速部署
网络·网络协议·ssl
Trouvaille ~3 小时前
【Linux】网络编程基础(三):Socket编程预备知识
linux·运维·服务器·网络·c++·socket·网络字节序
酣大智4 小时前
DHCP中继配置实验
运维·网络·网络协议·tcp/ip·华为
小义_4 小时前
【RH134知识点问答题】第6章 管理 SELinux 安全性
linux·网络·云原生·rhel
REDcker4 小时前
RTSP 直播技术详解
linux·服务器·网络·音视频·实时音视频·直播·rtsp