简介

Java实现操作西门子S7系列PLC,基于开源项目s7connect实现,使用的是基于以太网的TCP/IP实现,不需要额外的组件,读取操作只要放到后台线程就不会卡死线程,本组件支持超级方便的高性能读写操作。
项目实现&测试源码

特性

  • 使用 TCP 协议连接西门子S7系列PLC
  • 高性能读写西门子S7系列PLC
  • 支持 OSGi
  • 支持 PROFINET
  • 支持注解定义

使用

连接PLC

private static final String HOST = "192.168.0.20";S7Connector connector =  S7ConnectorFactory.buildTCPConnector().withHost(HOST).build();

定义读写操作模块

@Data
public class PlcDb {@S7Variable(type = S7Type.BOOL, byteOffset = 0, bitOffset = 0)public boolean status;@S7Variable(type = S7Type.DWORD, byteOffset = 2)public long option;@S7Variable(type = S7Type.REAL, byteOffset = 34)public float position;@S7Variable(type = S7Type.TIME, byteOffset = 66)public long time;
}

读数据

private static final int DB_NUM = 7;
private static final int BYTE_OFFSET = 0;PlcDb plcDb = serializer.dispense(PlcDb.class, DB_NUM, BYTE_OFFSET);

写数据

private static final int DB_NUM = 7;
private static final int BYTE_OFFSET = 0;
PlcDb plcDb =new PlcDb();
plcDb.set...
...serializer.store(PlcDb.class, DB_NUM, BYTE_OFFSET);

关闭操作

 connector.close();

Test测试

项目实现&测试源码

Websocket 下的操作实例

package com.poster.controller;
import com.alibaba.fastjson.JSON;
import com.github.s7connector.api.S7Connector;
import com.github.s7connector.api.S7Serializer;
import com.github.s7connector.api.factory.S7ConnectorFactory;
import com.github.s7connector.api.factory.S7SerializerFactory;
import com.poster.bean.PlcDb;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;import javax.websocket.OnClose;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;
import java.io.IOException;
import java.util.Timer;
import java.util.TimerTask;/*** <p>Copyright(c) 2018. Pnoker All Rights Reserved.* <p>Author     : Pnoker* <p>Email      : pnokers@gmail.com* <p>Description: Websocket Controller控制类*/
@Slf4j
@Component
@ServerEndpoint(value = "/ws/poster")
public class WsController {private static final String HOST = "192.168.0.20";private static final int DB_NUM = 7;private static final int BYTE_OFFSET = 0;private Session session;private volatile boolean isRun = false;private S7Connector connector = null;@OnOpenpublic void onOpen(Session session) {log.info("open websocket {}", session.getId());this.session = session;if (null == connector) {try {isRun = true;connector = S7ConnectorFactory.buildTCPConnector().withHost(HOST).build();} catch (Exception e) {connector = null;log.error("new s7connector fail {}", e.getMessage(), e);}}if (null != connector) {S7Serializer serializer = S7SerializerFactory.buildSerializer(connector);Timer timer = new Timer();timer.schedule(new TimerTask() {@Overridepublic void run() {try {if (isRun) {PlcDb plcDb = serializer.dispense(PlcDb.class, DB_NUM, BYTE_OFFSET);sendMessage(JSON.toJSONString(plcDb));} else {cancel();log.info("stop send message to session {}", session.getId());}} catch (Exception e) {log.error("send message timer fail {}", e.getMessage(), e);}}}, 2000, 200);}}@OnMessagepublic void onMessage(String message, Session session) {log.info("receive message '{}' from session id '{}' ", message, session.getId());}@OnClosepublic void onClose() {log.info("close websocket {}", session.getId());isRun = false;}public void onError(Session session, Throwable error) {log.error(error.getMessage());}public void sendMessage(String message) {try {log.info("send message {} ", message);session.getBasicRemote().sendText(message);} catch (IOException e) {log.error("sendMessage fail {}", e.getMessage(), e);}}
}

项目推荐



DC3是基于Spring Cloud的开源可分布式物联网(IOT)平台,用于快速开发、部署物联设备接入项目,是一整套物联系统解决方案。

Java读写操作西门子S7系列PLC相关推荐

  1. C# 读取西门子S7系列PLC教程及源码

    创建 PLC 实例,连接和断开连接 若要创建驱动程序的实例,需要使用此构造函数: public Plc(CpuType cpu, string ip, Int16 rack, Int16 slot) ...

  2. 西门子S7系列PLC安全防护研究

    近年来,随着中国制造的不断崛起,工业控制系统已成为国家关键基础设施的重中之重,工控系统的安全问题也随之而来.工控产品的多样化,造成了工控系统网络通讯协议不同,大量的工控系统采用私有协议,从而导致协议存 ...

  3. 西门子S7系列PLC如何实现工业互联?(S7中间件)

        为了更加方便快捷地提供西门子S7系列PLC数据交换到工业云平台(WebAPP或移动端APP),作者开发了西门子S7系列支持TCP/IP连接方式的PLC数据交换平台-S7数据采集及交换平台(以下 ...

  4. 西门子逻辑运算指令_西门子S7系列plc逻辑运算指令

    西门子S7系列plc逻辑运算指令: 有关西门子S7系列plc逻辑运算指令,包括字节逻辑运算指令,IN1和IN2还可以是常数,字逻辑运算指令,双字逻辑运算指令. 1.字节逻辑运算指令 ANDBIN1,O ...

  5. 西门子S7系列PLC以太网通讯处理器MPI-131

    基本说明:MPI-131用于西门子 SIMATIC S7 系列 PLC(包括 S7-200. S7-300. S7-400).西门子数控机床(840D,840DSL等)的以太网通讯,支持以太网编程下载 ...

  6. 艾默生DCS(ModbusTCP)与西门子S71500系列PLC(PROFINET)通讯

    艾默生DCS(ModbusTCP)与西门子S71500系列PLC(PROFINET)通讯 艾默生DCS控制系统需要和西门子的PLC控制系统交互数据,德国赫优讯NT100-RE-EN通讯网关提供了快捷可 ...

  7. tinyint对应什么数据类型_学习西门子S7-200系列PLC不得不掌握的数据类型

    在学习PLC的过程中经常会有说到数据类型这个概念,那到底什么是数据类型?数据类型有什么作用?在西门子200系列PLC中的数据类型有哪些?这些都是学习西门子PLC不等不掌握的内容? 那到底什么是数据类型 ...

  8. MatrikonOPC与西门子S7300系列PLC以太网通讯

    摘要 MatrikonOPC通过以太网连接西门子S7300系列PLC,NET30-MPI通讯桥接器为PLC提供以太网通讯接口.通过MatrikonOPC采集现场设备的实时生产和设备数据.主要设备的控制 ...

  9. YAMAHA机器人(EtherNet/IP)与西门子S71500系列PLC(PROFINET)通讯

    YAMAHA机器人(EtherNet/IP)与西门子S71500系列PLC(PROFINET)通讯 雅马哈机器人(YAMAHA RCX3等系列)控制系统需要和西门子的PLC控制系统交互数据,德国赫优讯 ...

最新文章

  1. Spring-Cloud 从0开始(二) Eureka-Client
  2. php循环输出多个网络地址图片,php中curl循环往请求多个URL和多线程去请求多个URL的方法...
  3. 浅析企业网站页面设计如何才能更吸引用户注意!
  4. java list多字段排序_java中list通过多条件排序
  5. 安徽工业大学计算机考研调剂,安徽工业大学2019年考研预调剂公告
  6. 关于$_SERVER['PHP_AUTH_USER']
  7. Jsoup抓取网页数据完成一个简易的Android新闻APP
  8. smarty课程---最最最简单的smarty例子
  9. 用python绘制图形_python绘制图形
  10. 20. 有效的括号 golang 堆栈
  11. ServiceComb中的数据最终一致性方案
  12. 域 正在应用计算机设置,入域的时候卡在”正在应用计算机设置”持续了好几分钟...
  13. c语言函数制作,C语言库函数制作方法
  14. [转]杀毒软件的引擎
  15. 10G 网络变压器 10GBASE-T与1000Base-T区别
  16. Android四大组件Service之AIDL详解
  17. Android基站定位——通过手机信号获取基站信息
  18. js 立方 平方怎么写
  19. 国内十大源码下载类知名网站总体简评
  20. 投掷骰子的python代码_Python基础篇——模拟掷骰子小游戏

热门文章

  1. Go名库欣赏-uitable:终端数据表格展示工具
  2. 论 fmap、fmap fmap、与 fmap fmap fmap
  3. next_permutation_31. Next Permutation
  4. 修复苹果iOS 原生键盘遮挡input框
  5. inspect python_Python之inspect模块实现获取加载模块路径的方法
  6. moto 如何解锁BL 以edge s pro为例,保姆级教程
  7. Python-函数的初始
  8. 这哪是NBA球场!简直就是黑科技实验室啊!
  9. android drawable 点击事件,Android中EditText的drawableRight属性设置点击事件
  10. LM317 5V输出电路学习