【西门子】JAVA链接S7-1200,S7-1500上下行数据处理

2023-10-24 19:10

本文主要是介绍【西门子】JAVA链接S7-1200,S7-1500上下行数据处理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

S7-1200,S7-1500上下行数据处理

  • 仿真环境
    • 安装TIA Portal
    • 创建仿真项目
    • 创建PLC设备
    • 配置网络信息
    • 放开PLC,PUT/GET权限
    • 设定程序块用来模拟取值
    • 启动仿真
    • 解压缩NetToPLCsim
  • JAVA操作S7
    • S7链接工具类
    • JAVA读取DB块

仿真环境

首先用到的软件有以下几个

  • STEP 7 Basic/Professional 和 WinCC Basic/Comfort/Advanced
  • NetToPLCsim

安装TIA Portal

这个没什么特殊的一路下一步就行 (哦,有同事反应找个博图不好卸载。。建议虚拟机里装)

创建仿真项目

双击打开
双击打开这个软件,创建新的项目
在这里插入图片描述

在这里插入图片描述

创建PLC设备

在这里插入图片描述
添加新设备
在这里插入图片描述
按照自己需要的创建不同型号的PLC
在这里插入图片描述
在这里插入图片描述
点击添加。

配置网络信息

双击WLAN口,配置设备的网络信息
在这里插入图片描述
在这里插入图片描述
配置后如下图所示
在这里插入图片描述

放开PLC,PUT/GET权限

右键PLC设备,点击属性
在这里插入图片描述
在允许远程对象PUT/GET访问打上勾
在这里插入图片描述

设定程序块用来模拟取值

在这里插入图片描述
在这里插入图片描述
编号可以自动,也可以手动指定,这里跟后面程序访问时参数设定有关。
生成数据块之后右键点击数据块属性,在属性中设置关闭优化块访问
在这里插入图片描述

在这里插入图片描述
点击确定完成设置

添加项目完成数据块的设置
在这里插入图片描述
这里解释一下数据库名称
DBD0代表着偏移量0,数据类型时DInt,
DBW4代表着偏移量4,数据类型时Int

启动仿真

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
出现下面界面就算成功了,千万不要点击完成
在这里插入图片描述

解压缩NetToPLCsim

首先博图自带的仿真只是供开发时使用博图自己的调试程序调用的,java的链接工具是连不上的。所以需要NetToPLCsim。解压缩NetToPLCsim,这个运行时一定要使用管理员,他需要杀掉博图自带的102端口服务,然后替换成自己的,不使用管理员打开无法杀掉对应程序。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
主机地址不用手输,可以选择,选择自己的网卡IP
在这里插入图片描述
PLC仿真的IP,第一次打开可能无法访问到,会提示下面的错误
在这里插入图片描述
这个时候需要在仿真程序的小画面上模拟开机
先点击电源键
在这里插入图片描述
在这里插入图片描述
然后再点击电源键,这个时候就不再是未组态的PLC了,点击RUN启动PLC仿真的电源
在这里插入图片描述
一阵闪烁后会变为绿色
在这里插入图片描述
这个时候再选择就会有候选地址了
在这里插入图片描述
按照程序提示,设置插槽号和架机号,S7-1200/1500得设置成0/1
在这里插入图片描述
点击OK完成添加,成功后如下图所示
在这里插入图片描述
点击Start Server开启服务,就可以通过JAVA程序访问S7仿真了。

JAVA操作S7

S7链接工具类

使用S7Connector

        <dependency><groupId>com.github.s7connector</groupId><artifactId>s7connector</artifactId><version>2.1</version></dependency>

JAVA读取DB块

以读取我上面间的DBD0为例

S7Connector connector =S7ConnectorFactory.buildTCPConnector().withPort(102) // 端口号,默认是102.withHost("你主机的IP") .withRack(0) //架机号.withSlot(1) //插槽号.build();byte[] plcData = connector.read(DaveArea.DB, //选择区块200, // 区块编号,比如我上面建的是2004,  // 长度,跟你区块中建的变量有关0);   // 开始位置,跟你区块中建的变量有关S7Serializable converter = new LongConverter();
Long data = converter.extract(Long.class, plcData, 0, 0);
System.out.println(data);

执行结果如下
在这里插入图片描述
你可以在仿真里修改一下初始值尝试一下。这里附赠一下写的工具类

public class PlcUtils {private static Map<Class, S7Serializable> s7SerializableMap = new HashMap<>();static {s7SerializableMap.put(Integer.class, new IntegerConverter());s7SerializableMap.put(Long.class, new LongConverter());s7SerializableMap.put(Float.class, new RealConverter());}/*** PLC 数据读取* @param <T> targetClass 转换类型* @param connector PLC链接* @param db DB区块* @param length 数据长度* @param offset 数据开始位置* @return PLC数据*/public static <T> T read(Class<T> targetClass, S7Connector connector, Integer db, Integer length, Integer offset) {byte[] plcData = connector.read(DaveArea.DB, //选择区块db, // 区块编号length,  //长度offset);   //开始位置if (targetClass == String.class) {return (T) new String(plcData);}S7Serializable converter = s7SerializableMap.get(targetClass);return converter.extract(targetClass, plcData, 0, 0);}/*** 数据写入** @param value 写入数据* @param connector PLC链接* @param db DB区块* @param length 长度* @param offset 数据开始位置*/public static void write(Object value, S7Connector connector, Integer db, Integer length, Integer offset) {S7Serializable converter = s7SerializableMap.get(value.getClass());byte[] buffer = new byte[length];converter.insert(value, buffer, 0, 0, length);connector.write(DaveArea.DB, db, offset, buffer);}
}

这篇关于【西门子】JAVA链接S7-1200,S7-1500上下行数据处理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/277189

相关文章

Java实现Excel与HTML互转

《Java实现Excel与HTML互转》Excel是一种电子表格格式,而HTM则是一种用于创建网页的标记语言,虽然两者在用途上存在差异,但有时我们需要将数据从一种格式转换为另一种格式,下面我们就来看看... Excel是一种电子表格格式,广泛用于数据处理和分析,而HTM则是一种用于创建网页的标记语言。虽然两

java图像识别工具类(ImageRecognitionUtils)使用实例详解

《java图像识别工具类(ImageRecognitionUtils)使用实例详解》:本文主要介绍如何在Java中使用OpenCV进行图像识别,包括图像加载、预处理、分类、人脸检测和特征提取等步骤... 目录前言1. 图像识别的背景与作用2. 设计目标3. 项目依赖4. 设计与实现 ImageRecogni

Java中Springboot集成Kafka实现消息发送和接收功能

《Java中Springboot集成Kafka实现消息发送和接收功能》Kafka是一个高吞吐量的分布式发布-订阅消息系统,主要用于处理大规模数据流,它由生产者、消费者、主题、分区和代理等组件构成,Ka... 目录一、Kafka 简介二、Kafka 功能三、POM依赖四、配置文件五、生产者六、消费者一、Kaf

Java访问修饰符public、private、protected及默认访问权限详解

《Java访问修饰符public、private、protected及默认访问权限详解》:本文主要介绍Java访问修饰符public、private、protected及默认访问权限的相关资料,每... 目录前言1. public 访问修饰符特点:示例:适用场景:2. private 访问修饰符特点:示例:

详解Java如何向http/https接口发出请求

《详解Java如何向http/https接口发出请求》这篇文章主要为大家详细介绍了Java如何实现向http/https接口发出请求,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 用Java发送web请求所用到的包都在java.net下,在具体使用时可以用如下代码,你可以把它封装成一

SpringBoot使用Apache Tika检测敏感信息

《SpringBoot使用ApacheTika检测敏感信息》ApacheTika是一个功能强大的内容分析工具,它能够从多种文件格式中提取文本、元数据以及其他结构化信息,下面我们来看看如何使用Ap... 目录Tika 主要特性1. 多格式支持2. 自动文件类型检测3. 文本和元数据提取4. 支持 OCR(光学

Java内存泄漏问题的排查、优化与最佳实践

《Java内存泄漏问题的排查、优化与最佳实践》在Java开发中,内存泄漏是一个常见且令人头疼的问题,内存泄漏指的是程序在运行过程中,已经不再使用的对象没有被及时释放,从而导致内存占用不断增加,最终... 目录引言1. 什么是内存泄漏?常见的内存泄漏情况2. 如何排查 Java 中的内存泄漏?2.1 使用 J

JAVA系统中Spring Boot应用程序的配置文件application.yml使用详解

《JAVA系统中SpringBoot应用程序的配置文件application.yml使用详解》:本文主要介绍JAVA系统中SpringBoot应用程序的配置文件application.yml的... 目录文件路径文件内容解释1. Server 配置2. Spring 配置3. Logging 配置4. Ma

Java 字符数组转字符串的常用方法

《Java字符数组转字符串的常用方法》文章总结了在Java中将字符数组转换为字符串的几种常用方法,包括使用String构造函数、String.valueOf()方法、StringBuilder以及A... 目录1. 使用String构造函数1.1 基本转换方法1.2 注意事项2. 使用String.valu

java脚本使用不同版本jdk的说明介绍

《java脚本使用不同版本jdk的说明介绍》本文介绍了在Java中执行JavaScript脚本的几种方式,包括使用ScriptEngine、Nashorn和GraalVM,ScriptEngine适用... 目录Java脚本使用不同版本jdk的说明1.使用ScriptEngine执行javascript2.