轻松让PLC数据到MQTT

工控安全 3年前 (2022) admin
877 0 0
轻松让PLC数据到MQTT
JZGKCHINA
工控技术分享平台


尊重原创 勿抄袭

勿私放其他平台

前 言:

近几年,物联网领域mqtt协议以轻量级的优势风靡起来,众多物联网设备开始需要使用mqtt协议来相互沟通。但是,在工控领域,对mqtt协议的直接支持还寥寥无几。如果有用户想将PLC或仪表的数据通过mqtt直接传输至数据中心呢?

北京伟联科技有限公司WL-320E-M边缘计算模块来帮忙。不需要修改PLC程序哦! 


本文以AB L33ERMPLC为例,将部分数据写入到WiSCADA 3.0软件的mqtt服务器内变量中。

思路:

先将PLC数据读回来,再按照mqtt服务器规定的格式编写JSON字符串,通过mqtt客户端写入功能将数据写入。 

轻松让PLC数据到MQTT

WiSCADA 3.0软件支持mqtt 服务器,OPC UA服务器、Modbus服务器 。


在WiSCADA 3.0软件内配置一些内部变量用于通过mqtt协议发布。在模拟变量属性的量程变换选项里面,扩展区域,写上mqtt=topic,这个topic名称可以自定义,本文测试使用testdata,记住这个名称,后面读取的时候会需要。其实也就是使用这个topic名称将需要发布的变量分类。多配置几个变量。
同时给这几个变量关联了秒变化变量,这些数据会随着秒的变化而变化。 
轻松让PLC数据到MQTT

01

配置WiSCADA 3.0软件的扩展服务,选择mqtt服务器,启用 

轻松让PLC数据到MQTT
 配置WiSCADA 3.0软件的扩展服务,选择mqtt发布服务,启用。此处需要注意几个参数
  • 服务器地址:mqtt服务器的IP地址,本文测试环境启用WiSCADA3.0软件自带的mqtt 服务器功能,此处可以写127.0.0.1,表示本机,也可以写本地计算机网卡IP地址。

  • 服务器端口:mqtt服务器端口

  • 客户端标识:WiSCADA 3.0软件自定义的。

  • 心跳时间:检测连接状态

  • 质量:选择质量选项

  • 写入主题:自定义,用于订阅客户端执行写入功能时对变量的分类

  • 用户名:由mqtt server提供的用户名密码,本文为admin密码admin。如果是第三方提供mqtt server,该用户名密码需要联系管理员获取。

  • 发送周期:可控制消息发布的频率 

轻松让PLC数据到MQTT
 

配置完毕后运行WiSCADA软件。 

轻松让PLC数据到MQTT
  

02

接下来读取PLC数据

在伟联边缘计算模块内,使用eth-ip in读取AB PLC数据,配合inject节点周期性触发整条流程,使用function函数整理读取回来的数据。 


Inject节点配置如下:

轻松让PLC数据到MQTT
轻松让PLC数据到MQTT
使用mqtt out节点执行mqtt协议数据的写入,在边缘计算模块内拖拽mqtt out节点用于写入数据到mqtt server,需要注意,写入操作需要mqtt server允许,如果连接的是其他mqtt服务器,需要联系管理员确认。
本文中WiSCADA 3.0软件提供的数据写入格式为
[{“id”:”Tagname”,”v”:value}]
Tagname为WiSCADA 3.0软件内发布的变量名,value为要写入的数值。
注意,每个mqtt服务器提供的数据写入JSON格式不尽相同,需要与管理索要详细的文档才可以。 

Function节点配置如下,根据mqtt服务器提供的数据格式,整理数据 
var ValueData = new Array() //定义数组
//定义全局变量存储标签值,有多少标签就需要定义多少这种全局变量
var TestFloat_0 = context.get('TestFloat_0')
var TestFloat_1 = context.get('TestFloat_1')
var TestFloat_2 = context.get('TestFloat_2')
var TestFloat_3 = context.get('TestFloat_3')
var TestFloat_4 = context.get('TestFloat_4')
//判断当前接受的消息是否是记录触发消息
if(msg.payload == "RecordStart")
{
    SetValue()  //调用子函数
    msg.payload = ValueData  //输出该数组
    return msg;   //函数节点输出
}
else   //如果接收的消息不是记录触发消息,为正常的数据,将消息传递给全局变量
{
    TestFloat_0 = msg.payload["TsetFloat[0]"];  //获取上一节点读取到的标签值
    TestFloat_1 = msg.payload["TsetFloat[1]"];  //获取上一节点读取到的标签值
    TestFloat_2 = msg.payload["TsetFloat[2]"];  //获取上一节点读取到的标签值
    TestFloat_3 = msg.payload["TsetFloat[3]"];  //获取上一节点读取到的标签值
    TestFloat_4 = msg.payload["TsetFloat[4]"];  //获取上一节点读取到的标签值
    context.set('TestFloat_0',TestFloat_0)  //将获取的消息传递给全局变量
    context.set('TestFloat_1',TestFloat_1)
    context.set('TestFloat_2',TestFloat_2)
    context.set('TestFloat_3',TestFloat_3)
    context.set('TestFloat_4',TestFloat_4)
}
function SetValue()
{   //有多少变量值需要写入,就需要在此创建多少数组对象
    ValueData[0]={
        "id""Sim1_tag11",
        "v": TestFloat_0
    }
    ValueData[1]={
        "id""Sim1_tag12",
        "v": TestFloat_1
    }
    ValueData[2]={
        "id""Sim1_tag13",
        "v": TestFloat_2
    }


轻松让PLC数据到MQTT
轻松让PLC数据到MQTT
配置完成后部署到边缘计算模块内即可。
可在WiSCADA 3.0软件内查看当前写入的数值。 
轻松让PLC数据到MQTT
至此,将PLC数据写入到mqtt服务器操作完毕。
轻松让PLC数据到MQTT
不止是本文中使用AB PLC,对于西门子、施耐德、欧姆龙、三菱等PLCmodbusRTU仪表,MS SQL Server,MySQL,Influxdb等数据库,伟联科技的边缘计算模块也完全支持。 
轻松让PLC数据到MQTT

WL-320E-M为伟联科技新一代专门针对工业的边缘计算产品,采用基于Node.js的架构,无需编写一行代码,实现可视化的工业数据采集和协议交换。通过在浏览器中拖拽的方式将不同的PLC、数据库以及Web应用连接在一起,构成数据流,使用户可以快速的创建出自己的应用。

功能特点:
—-可实现多种PLC之间的数据交换,AB,SIEMENS,Schneider,Omron和.Mitsubishi。
—-可实现和空
—- MQTT可方便
—-从PLC采集的数据可以直接通过WiFi进行无线数据传输
—-Python可实现灵活的二次系统开发
—-采集来的数据可进行数学和逻辑运算 
轻松让PLC数据到MQTT

未完待续

李大拿家的王小拿

2022年2月

往期精选

轻松让PLC数据到MQTT


轻松让PLC数据到MQTT轻松让PLC数据到MQTT

轻松让PLC数据到MQTT

人气推荐

more+


轻松让PLC数据到MQTT
轻松让PLC数据到MQTT
轻松让PLC数据到MQTT
轻松让PLC数据到MQTT

轻松让PLC数据到MQTT

1.Smart200&V90伺服系统:已更新15课

2.贝加莱直播课程:已更新16课

3.力控科技产品培训:已更新5课

4.剑指工控经典公开课:已更新22课
5.新品推荐:已更新3课

6.专家课堂:已更新12课

轻松让PLC数据到MQTT

原文始发于微信公众号(剑指工控):轻松让PLC数据到MQTT

版权声明:admin 发表于 2022年2月16日 下午10:00。
转载请注明:轻松让PLC数据到MQTT | CTF导航

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...