将 PLC 数据上传物联网平台并在云端进行操控

本篇为之前文章《将PLC数据上传至物联网平台进行可视化显示》的拓展,主要实现在可视化的同时在云端对变量进行操控,在之前文章中提到过的一些操作不再详细叙述,具体可查看上一篇文章及其前置文章。

注意事项:

  • PLC和运行Node-Red的电脑须在同一网段。
  • 运行时请使用实体PLC,PLCSIM Advanced仿真软件Node-Red可能无法连接。
  • 博图中创建相关数据DB块时,在块属性中,将”优化的块访问“复选框取消勾选。
  • 博图中编写PLC程序时在PLC设置窗体,找到防护与安全目录下,找到连接机制设置,将允许来自远程对象的Put/Get 通信访问勾选中。

具体流程:

一、编写PLC处程序

  1. 新建PLC设置其与运行Node-Red的电脑在同一网段。
  2. 在PLC属性中允许来自远程对象的Put/Get 通信访问。
  3. 创建一个DB块,并取消勾选其属性中优化块的访问。
  4. 在块中新建一个Bool型的变量,并对程序进行编译。

    img

二、设置物联网平台(详见之前的文章)

  1. 在阿里云物联网平台开通实例。
  2. 在设备管理中添加相关产品。
  3. 在设备管理中添加相关的产品设备。
  4. 在产品页面的操作栏中点击查看进入设备详细信息。
  5. 找到产品的功能定义并添加自定义功能(编辑草稿)。
  6. 创建一个功能名称为启动,标识符为Start,数据类型为bool的属性。
  7. 布尔值 0-关 1-开,读写类型为允许读写,确认并保存。

    img

  8. 再次以相同的方式创建一个状态功能,标识符为State,数据类型为bool的属性。

    img

  9. 创建完成后左下角点击发布上线。

三、设置阿里云 IoT Studio

  1. 进入项目管理处新建一个项目。
  2. 进入创建好的项目,在产品处点击关联物联网平台产品。
  3. 在设备处点击关联之前在物联网平台创建好的设备。
  4. 进入应用开发新建一个移动应用。
  5. 在左侧组件处拖出 基础-指示灯。
  6. 点击指示灯,右侧样式界面展示数据处配置数据源。
  7. 产品和指定设备选择之前创建好的。
  8. 属性处选择之前创建的 状态(Bool),此处由于设备没有上传过数据,右下角的验证数据格式可能会错误,忽略即可。

    img

  9. 在左侧组件处拖出 控制-按钮。
  10. 点击指示灯,右侧交互界面新增交互。
  11. 事件选择单击,添加子动作并选择设置设备属性。
  12. 设置设备属性处选择之前创建好的产品和指定设备,属性选择启动,值选择开。

    img

     

    img

  13. 点击右上角保存,再点击右上角发布。

    img

  14. 在界面左侧应用设置-域名管理处添加自己的域名或使用阿里云提供的域名,在浏览器处打开即可访问刚才做好的网页。

四、配置Node-Red(详见之前的文章)

  1. 拖出 s7 control 节点并根据之前的文章连接阿里云物联网平台。
  2. 在节点的PLC属性处创建 DB1,B0 Bool 变量。

    img

  3. 拖出 s7 in 节点并在其后连接 switch 节点进行状态判断,配置如下图所示。

    img

  4. 在 switch 后分别接两个 templat 节点,对上传的数据进行封装,使阿里云能够识别对应属性。

    img

     

    img

  5. 之后将两个节点都连接到同一个 mqtt out 节点,节点配置详见之前文章。
  6. 节点的主题填写 /sys/gwaexBTS8Wk/{设备名称}/thing/event/property/post ,从阿里云物联网设备管理的产品处 Topic 类列表中可以看到这是属性上报的主题。

    img

     

    img

  7. 拖出 mqtt in 节点,主题填写为 /sys/gwaexBTS8Wk/{设备名称}/thing/service/property/set ,显然这是属性设置主题。

    img

  8. 将接收到的信息再次交给 switch 判断,此时我们只对打开状态即状态1进行判断,因此只将 switch 的一个输出节点(符合条件时)连接到 change 节点,将 payload 设置为1。

    img

     

    img

  9. 在 change 节点后连接一个 s7 out 节点,设置为对 DB1,B0 进行写入。

    img

  10. 再在 change 节点后创建一个 template 节点,对状态信息进行封装(复位 Start)。

    img

  11. 将封装好的数据用 mqtt out 传送给阿里云,主题依然为 /sys/gwaexBTS8Wk/{设备名称}/thing/event/property/post

    img

  12. 总的流程图如下,点击右上角部署:

    img

五、结束

将程序下载入PLC,此时访问之前创建好的网页,可以看到指示灯为停止状态,点击按钮后会将 Start 属性设置为1,Node-Red 在接收到属性改变后会对应的将 PLC 内的变量值置1,同时将云端的 Start 属性复位。PLC 内的变量置1后被检测到,Node-Red将此状态上传到云端,State 属性状态相应的被改变,于是达到指示灯状态改变的效果。

若要将指示灯再次关闭即将PLC中的变量复位,可在PLC中写相应的程序,或在云端再次创建一个 Stop 属性,用同样的逻辑即可实现。

img

img

img

### 基于PLC物联网平台开发与集成解决方案 在现代工业环境中,PLC作为核心控制组件,在自动化生产线中扮演着重要角色。为了提升工厂智能化水平实现高效管理,越来越多的企业倾向于构建基于PLC物联网(IoT)平台。 #### 数据传输协议的选择 对于希望将现有PLC系统接入云端的应用场景而言,选择合适的数据传输协议至关重要。目前市场上主流的支持多种品牌PLC到云服务之间的数据交换方式包括但不限于OPC UA、Modbus TCP以及MQTT等[^2]。其中,OPC UA因其开放性和安全性成为最受欢迎的标准之一;而MQTT则凭借其轻量级特性适用于资源受限环境下的无线通讯需求。 #### 广泛兼容性的网关设备 考虑到实际应用场景中的多样性,选用具有高度灵活性和支持多类接口标准的产品显得尤为重要。例如某些特定型号的数据采集网关能够无缝对接来自不同制造商如西门子、三菱等多个品牌的PLC硬件,能轻松完成从本地网络向公共互联网的信息传递任务[^4]。这类产品通常还配备有图形化配置工具简化部署流程的同时也降低了后期维护成本。 #### 实现远程监控与诊断功能 借助先进的云计算技术和边缘计算架构可以进一步增强整个系统的实用价值。通过建立专门针对目标行业的SaaS服务平台不仅可以让管理者随时随地获取最新的运行状态报告还能及时响应异常情况实施预防性维修措施从而保障连续作业效率不受影响[^5]。 ```python import opcua_client as ua # Python OPC-UA客户端库用于连接服务器 from mqtt import MQTTClient # 导入MQTT模块发送消息给订阅者 def connect_plc_to_cloud(plc_ip, cloud_broker_url): """ 将指定IP地址上的PLC连接至远端云代理URL 参数: plc_ip (str): 可编程逻辑控制器所在位置 cloud_broker_url (str): 接收上传数据的目的地网址 返回值: None """ try: client = ua.Client(f"opc.tcp://{plc_ip}:4840") # 创建一个新的UA会话对象指向PLC client.connect() # 发起TCP/IP级别的握手请求尝试建立物理链路 root_node = client.get_root_node() # 获取根节点实例以便后续遍历访问内部变量属性 tags_data = {} # 初始化字典存储读取后的标签名及其对应数值对儿 for tag_name in ["Temperature", "Pressure"]: node_id = f"ns=2;s={tag_name}" # 构造唯一标识符字符串形式表示具体测量点路径 value = root_node.get_child([node_id]).get_value() tags_data[tag_name] = value # 更新映射关系表 publish_mqtt_message(cloud_broker_url, json.dumps(tags_data)) finally: if 'client' in locals(): client.disconnect() def publish_mqtt_message(broker_address, payload): """发布一条携带JSON编码后的内容至指定主题""" mqtt_client = MQTTClient(server=broker_address) topic = "/factory/monitoring" result = mqtt_client.publish(topic, payload) if __name__ == "__main__": connect_plc_to_cloud("192.168.1.100", "mqtt://example.com") ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值