手机、电脑远程控制PLC(S7协议与MQTT)

您所在的位置:网站首页 电脑远程控制ip地址怎么看 手机、电脑远程控制PLC(S7协议与MQTT)

手机、电脑远程控制PLC(S7协议与MQTT)

2023-05-07 22:53| 来源: 网络整理| 查看: 265

前言:S7 协议是 SIEMENS S7 系列产品之间通讯使用的标准协议,本文用JAVA实现与PLC以及服务器通讯,实现远程控制,控制原理就是用JAVA去读写PLC数据块,然后结合MQTT协议与服务器通讯,可以实现对PLC的远程控制与数据采集。C#、python也可以实现与plc通讯,本文用JAVA

0x0软件

西门子1200PLC(用官方的仿真也行)、博图v15、eclipse、EMQX(MQTT服务器)、宝塔(服务器运维)、jdk、maven

1x0MQTT服务器搭建

MQTT服务器搭建

2x0安装博图v15、仿真、nettoplcsim保姆教程:https://blog.csdn.net/jjhghh/article/details/126491434#t0

nettoplcsim(有真机的不用安装,这个用来将仿真机的IP地址转换出来)

链接:https://pan.baidu.com/s/1Yvr69Jb0PVa13kaZQ9wSJA 提取码:31s23x0eclipse安装与配置maven

java环境配置:

https://blog.csdn.net/qq_38436214/article/details/105071088

eclipse安装:

https://blog.csdn.net/rothschild666/article/details/82914600

maven配置:

https://blog.csdn.net/qq_43663493/article/details/1046636384x0创建博图项目

新建数据块

点击设备属性勾选允许来自远程对象的put/get通讯访问

右键数据块勾选掉优化块的访问

启动仿真将程序写入

打开nettoplcsim转换IP地址

点击add

点击和你同网段的地址

选择你仿真plc的地址一般都是192.168.0.1

点击开始

5x0JAVA端采集程序与通讯程序

新建maven项目

选择maven project

勾选最上面这个

按要求填写

添加POM依赖库

com.github.s7connector s7connector 2.1 org.eclipse.paho org.eclipse.paho.client.mqttv3 1.2.0 org.json json 20211205

连接plc代码

public static S7Connector connector; // 初始化PLC连接对象 connector = S7ConnectorFactory.buildTCPConnector().withHost("192.168.8.98") // PLC 的 IP 地址 .withRack(0) // 架机号,可选 .withSlot(1) // 插槽号,可选 .build();

读取数据代码

byte[] PlcData = connector.read(DaveArea.DB, // 选择数据区块 1, // 区块编号 2, // 数据值长度 int长度2 0); // 开始位置 偏移量 int plcin = intCon.extract(new Integer(0).getClass(), PlcData, 0, 0); System.out.println(plcin);

写入数据块代码

byte[] data = new byte[2]; int i = 0;//需要写入的值 ByteBuffer buffer = ByteBuffer.allocate(4).putInt(i); data[0] = buffer.get(2); data[1] = buffer.get(3); connector.write(DaveArea.DB, 1, 0, data);

连接MQTT代码

public static String brokerUrl = "tcp://cxxxxxx:1883";//MQTT服务器地址    public static String clientId = "mqtt-subscriber";//连接ID,相当于备注    public static String topic = "top";//订阅的主题 MqttClient client = new MqttClient(brokerUrl, clientId);            client.setCallback(new postt());            client.connect();            client.subscribe(topic);

完整代码:

package ddd; import java.nio.ByteBuffer; import org.eclipse.paho.client.mqttv3.*; import org.eclipse.paho.client.mqttv3.MqttClient; import org.eclipse.paho.client.mqttv3.MqttCallback; import org.eclipse.paho.client.mqttv3.MqttMessage; import com.github.s7connector.api.DaveArea; import com.github.s7connector.api.S7Connector; import com.github.s7connector.api.factory.S7ConnectorFactory; import org.json.JSONObject; public class postt implements MqttCallback{    public static S7Connector connector; // 初始化PLC连接对象    public static String brokerUrl = "tcp://xxxxxxxxx:1883";//MQTT服务器地址    public static String clientId = "mqtt-subscriber";//连接ID,相当于备注    public static String topic = "top";//订阅的主题    public static void main(String[] args) throws MqttException {            // 连接到 PLC            connector = S7ConnectorFactory.buildTCPConnector().withHost("192.168.8.98") // PLC 的 IP 地址                    .withRack(0) // 架机号,可选                    .withSlot(1) // 插槽号,可选                    .build();             //连接到 MQTT 服务器            MqttClient client = new MqttClient(brokerUrl, clientId);            client.setCallback(new postt());            client.connect();            client.subscribe(topic);    }    //PLC写入数据    public void readplc(int a,int b,int c) {        byte[] data = new byte[2];        int i = b;//需要写入的值        ByteBuffer buffer = ByteBuffer.allocate(4).putInt(i);        data[0] = buffer.get(2);        data[1] = buffer.get(3);        connector.write(DaveArea.DB, c, a, data);    }    //断连回调    public void connectionLost(Throwable throwable) {        System.out.println("连接丢失:" + throwable.getMessage());    }    //收到消息的回调    public void messageArrived(String topic, MqttMessage message) throws Exception {        System.out.println("收到消息订阅主题" + topic + ": " + new String(message.getPayload()));        JSONObject json = new JSONObject(new String(message.getPayload()));        int wen = json.getInt("wen");        System.out.print("解析成功:"+wen);        readplc(0,wen,1);//将值写入    }    //消息发送成功的回调    public void deliveryComplete(IMqttDeliveryToken token) {      } }

打开在线的webmqtt测试工具,成功接收并解析到结果

    测试成功写入plc,成功

最后:

通过MQTT结合S7可以实现Web端、微信小程序端、Android端、IOS端对PLC远程控制以及采集PLC数据,可以结合硬件mqtt网关,然后前端用charts和threejs即可实现大数据看板与工厂数字孪生构建数字化工厂



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3