第一种方式(s7connector)

S7官网:S7Connector — Documentation,有简单的读写操作参考。


1.创建maven工程引入依赖

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

2. 通过代码连接PLC

//PLC地址
String ipAddress = "192.168.101.90";
//默认端口
int port = 102;
S7Connector s7Connector = S7ConnectorFactory.buildTCPConnector().withHost(ipAddress).withPort(port).withTimeout(10000) //连接超时时间.withRack(0).withSlot(1).build();

3.解析获取的数据

//第一个参数:DaveArea.DB 表示读取PLC的地址区域为DB
//第二个参数:DB地址,若plc中是DB1082,则填1082
//第三个参数:数据长度
//第四个参数:偏移量
byte[] barcodeByte = s7Connector.read(DaveArea.DB, 1082, 16, 82);
Integer extract = integerConverter.extract(Integer.class, barcodeByte, 0, 0);
System.out.println(extract);

测试结果

 

 解析使用的工具类可使用S7jar包中自带的方法(方法还是很全面的)

需注意的是PLC中数据类型的所占长度和java有所出入!!!

第二种方式(HslCommunication) 

参考C语言读PLC而来:C# 读写西门子PLC数据,包含S7协议和Fetch/Write协议,s7支持200smart,300PLC,1200PLC,1500PLC - dathlin - 博客园


1.创建maven工程引入依赖

<dependency><groupId>com.github.dathlin</groupId><artifactId>HslCommunication</artifactId><version>3.1.1</version>
</dependency>

2. 通过代码连接PLC

SiemensS7Net siemensTcpNet = new SiemensS7Net(SiemensPLCS.S1200, "192.168.101.90");

3.解析获取的数据

//105代表读取的长度
OperateResultExOne<byte[]> read = siemensTcpNet.Read("DB1082.80", (short) 105);
if (read.IsSuccess) {byte[] content = read.Content;//2是下标short no = siemensTcpNet.getByteTransform().TransInt16(content, 2);System.out.println(no);
}

测试结果

总结

  • 两种方式皆可读取PLC中的数据,第一种方式只能单个读取,单个解析;第二种方式可读取整个DB块(字节数组)后解析其中数据(可根据实际情况去选择)
  • 两种方式皆需注意PLC要与本身电脑处于同一网段(可修改电脑网段或利用西门子博途软件修改PLC中设置的网段)

 最后大家要是觉得有用的话,给博主点个赞!!!

JAVA与PLC通讯读取数据(两种方式)相关推荐

  1. SparkStreaming从Kafka读取数据两种方式

    参考文章:http://www.jianshu.com/p/60344796f8a5 在结合 Spark Streaming 及 Kafka 的实时应用中,我们通常使用以下两个 API 来获取最初的 ...

  2. ireport参数传递json_Json传递数据两种方式(json大全)

    1.Json传递数据两种方式(json大全) ----------------------------字符串 var list1 = ["number","name&qu ...

  3. Java中线程的创建有两种方式

    Java中继承thread类与实现Runnable接口的区别 Java中线程的创建有两种方式: 1.  通过继承Thread类,重写Thread的run()方法,将线程运行的逻辑放在其中 2.  通过 ...

  4. java 读取css文件_java文件读取的两种方式

    JAVA中读取文件(二进制,字符)内容的几种方 JAVA中读取文件内容的方法有很多,比如按字节读取文件内容,按字符读取文件内容,按行读取文件内容,随机读取文件内容等方法,本文就以上方法的具体实现给出代 ...

  5. Java Spark之创建RDD的两种方式和操作RDD

    首先看看思维导图,我的spark是1.6.1版本,jdk是1.7版本 spark是什么?  Spark是基于内存计算的大数据并行计算框架.Spark基于内存计算,提高了在大数据环境下数据处理的实时性, ...

  6. Java中类加载器获取的两种方式

    import org.junit.Test;import java.io.FileInputStream; import java.io.IOException; import java.io.Inp ...

  7. java 深克隆_Java实现深克隆的两种方式

    序列化和依次克隆各个可变的引用类型都可以实现深克隆,但是序列化的效率并不理想 下面是两种实现深克隆的实例,并且测试类对两种方法进行了对比: 1.重写clone方法使用父类中的clone()方法实现深克 ...

  8. java的websocket_java 实现websocket的两种方式实例详解

    一.介绍 1.两种方式,一种使用tomcat的websocket实现,一种使用spring的websocket 2.tomcat的方式需要tomcat 7.x,JEE7的支持. 3.spring与we ...

  9. Java面试题:线程实现的两种方式及匿名内部类实现

    QUESTION:线程实现的两种方式及匿名内部类实现 ANSWER: 1.多线程两种实现方式 (1)继承Thread     * 定义类继承Thread     * 重写run方法     * 把新线 ...

最新文章

  1. java23中设计模式——结构模式——Composite(组合)
  2. 解决SpringMvc后台接收json数据中文乱码问题
  3. springboot 引入jdbc驱动_Spring Boot:企业常用的 Starter以及实现
  4. 为什么说PHP是很糟糕的,也是很好的编程语言
  5. 移动端1px细线问题
  6. 说说自动学习,是什么样的境界和体验
  7. webservice 视频教程 Spring+xfire 整合
  8. C++ 信息管理系统
  9. 仙人掌之歌——路转峰回(2)
  10. 拉格朗日法建立动力学方程
  11. CNKI E-Study与Endnote 的参考文献题录互导
  12. 小猫爪:嵌入式小知识11-MPU详解及其应用
  13. scikit 线性回归_使用scikit学习线性回归学习和体育运动nba数据数据科学
  14. Android之HttpURLConnection应用实例:武大教务系统获取课表
  15. windwos docker安装k8s一直staring的解决方法
  16. 魔兽怀旧服最新服务器人口,魔兽世界:仅三天时间正式服人口减少20万,怀旧服人口超越正式服...
  17. 【送书活动第一话】:送书伊始
  18. npm install 报错sill pacote range manifest for hmac-drbg@^1.0.0 fetched
  19. C++中的堆内存、栈内存和静态内存
  20. raid5阵列两块硬盘掉线如何恢复阵列中的数据库

热门文章

  1. 通讯桥接器NET30-FX在三菱编程软件GX Works2中的应用
  2. cesium底图切换
  3. npm和cnpm的区别和安装
  4. mysql 数据精确度_mysql数据精度丢失问题深入探讨
  5. Bazel Remote Caching
  6. 如何判断Android系统的版本
  7. 关于xp系统下的IIS 500错误
  8. 那么详细的智能工厂解决方案,爱了爱了!
  9. C/C++ 技术面试基础知识总结,包括语言、程序库、数据结构、算法、系统、网络、链接装载库等知识及面试经验、招聘、内推等信息
  10. 机器学习数学基础九:回归分析