手机、电脑远程控制PLC(S7协议与MQTT) |
您所在的位置:网站首页 › 电脑远程控制ip地址怎么看 › 手机、电脑远程控制PLC(S7协议与MQTT) |
前言: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#t0nettoplcsim(有真机的不用安装,这个用来将仿真机的IP地址转换出来) 链接:https://pan.baidu.com/s/1Yvr69Jb0PVa13kaZQ9wSJA 提取码:31s23x0eclipse安装与配置mavenjava环境配置: https://blog.csdn.net/qq_38436214/article/details/105071088eclipse安装: https://blog.csdn.net/rothschild666/article/details/82914600maven配置: 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 |