-
2020-06-15 22:48:36
放张图片给大家压压惊,读取的图片数据在第二张图片 前8个数据
目前了解有两款开发包
<dependency> <groupId>com.github.s7connector</groupId> <artifactId>s7connector</artifactId> <version>2.1</version> </dependency> https://github.com/s7connector/s7connector // https://www.cnblogs.com/jearchen/p/13741553.html 教程详细看这个
//根据官网扩展的 https://github.com/xtrinch/moka7-live 下面案例也是用的这个 <dependency> <groupId>si.trina</groupId> <artifactId>moka7-live</artifactId> <version>0.0.13</version> </dependency> 参考-> C# sanp7 文档http://snap7.sourceforge.net/sharp7.html
根据官网sanp7总结下方示例 http://snap7.sourceforge.net/ 可能国内打不开,
// 需要了解的相关词汇: //数据块 db块 dbw块什么的 ; 定义数据的地方; //偏移量--数据在数据块具体的位置 // 偏移量长度 一个具体数据所占的 位置长度 8个bool 占据 1个字节位置 1个 int 占据2个字节位置, 2个int 占据 4个字节位置; 以上都是plc数据类型 ---------------------------------------------------------------- //准备连接 S7Client s7Client = new S7Client(); //连接参数 机器的ip,机器的机架号 ,插槽号 s7Client.ConnectTo("192.168.5.1",0,1); // 容器 读出的数据存放位置 大小不能少于数据数量 byte[] bytes = new byte[64]; //参数1 :读取函数 参数 数据块类型 ,2: 数据块位置 例如"DB601" , //3:读取的开始位置, 4: plc数据偏移量, , 5: 读取数据所存放的容器; // 在这里是1位 ,bool特殊 站1位(1/2/3/8个bool 也是一个字节) ,其余写占多少字节 //返回类型 0代表成功 int i = s7Client.ReadArea(S7.S7AreaDB, 601, 0, 1, bytes); if (i==0){ //amount 数据类型占多少 字节--bool比较特殊 读取一个bool 也是一个字节 //根据的 44 getbite函数 解析 得出 java Boolean值 //连续8个出现的 bool 读取出来是一个数: byte容器,容器数值索引,位置 //根据读出来的1个 数 解析出来8个bool 值 看下面 //44 解析成 二进制 得出 8bit 8个bool值 System.out.print("\n"+S7.GetBitAt(bytes,0,0) +"\t"); System.out.print(S7.GetBitAt(bytes,0,1) +"\t"); System.out.print(S7.GetBitAt(bytes,0,2) +"\t"); System.out.print(S7.GetBitAt(bytes,0,3) +"\t"); System.out.print(S7.GetBitAt(bytes,0,4) +"\t"); System.out.print(S7.GetBitAt(bytes,0,5) +"\t"); System.out.print(S7.GetBitAt(bytes,0,6) +"\t"); System.out.print(S7.GetBitAt(bytes,0,7) +"\t"); //写入数据 setbitat() 读出存放容器 byte, ?, 第三个参数 数据 索引 , 4:修改的值 . S7.SetBitAt(bytes,0,0,true); s7Client.WriteArea(S7.S7AreaDB,601,0,1,bytes);
//读取上面的数据 input11 偏移量36 的DINT数据 占 4字节 存入 byte[4] 就行 //host=IP地址 @Test public void getDint36_40(){ S7Client s7Client = new S7Client(); s7Client.ConnectTo(Host,0,1); byte[] bytes = new byte[8];//byte[4] 就行;--- 长度8个为for循环演示 int i = s7Client.ReadArea(S7.S7AreaDB, 603, 36, 4, bytes); // 读取数据成功 此时byte 数据 -1 -1 -1 -18 System.out.print( S7.GetDIntAt(bytes)); // 输出 -18 // S7.GetDIntAt读取数据 它返回的就是18 例子 S7.GetDIntAt(bytes, 0) 返回18 ;内部去取 // bytes 0位置的前4个数据 进行位运算 for (int j = 0; j < bytes.length-4; j++) { //S7.GetDIntAt 数据转换 4个 byte = 32位的二进制 = 4字节的 PLC的Dint数据 =java int数据 int i1 = S7.GetDIntAt(bytes, j); System.out.print(i1 +" "); } s7Client.Disconnect();//关闭连接 } // 转换后打印 bytes 输出-18 -4608 -1179648 -301989888 @Test // 上面的 input10 读取 设置值 在写回去PLC public void getWord34_36(){ S7Client s7Client = new S7Client(); s7Client.ConnectTo(Host,0,1); byte[] bytes = new byte[8]; //byte[2] 就行 word类型 占 2个字节 解析出来也是两个数 截取第一个 int i = s7Client.ReadArea(S7.S7AreaDB, 603, 34, 2, bytes); for (int j = 0; j < bytes.length-4; j++) { int i1 = S7.GetWordAt(bytes, j); System.out.println(i1); } //打印输出数据 17 4352 0 0 int a2=S7.GetWordAt(bytes, 0); System.out.println(a2); //打印输出数据 17 s7Client.Disconnect(); } //写入数据 根据读出的数据类型确定写入 S7.SetWordAt(bytes,0,18); s7Client.WriteArea(S7.S7AreaDB, 603, 34, 2, bytes);
S7Client 参考 ConnectTo 连接一个 到 PLC 的客户端对象 Connect 连接一个 带有隐式参数的 PLC 的客户端对象。 Disconnect 断开 ReadArea 读取数据 来自 PLC 的区域。 WriteArea 写入数据 区域到PLC。 S7 Helper syntax //读取字节转换函数 GetBitAt GetWordAt GetShortAt GetDWordAt GetDIntAt GetFloatAt GetStringAt GetPrintableStringAt GetDateAt Write functions //数值转换 byte函数 SetBitAt SetWordAt SetShortAt SetDWordAt SetDIntAt SetFloatAt SetDateAt
关于长连接的问题 ; S7Client. LastError ==0 检测断开连接 , 或则心跳机制 读取其他数据 返回值
有兴趣的推荐看下GitHub(Mokka7) ;重构的 snap7 带客户端,可以直接选读取数据类型, 可以根据他的模仿写了一个javaFX客户端更多相关内容 -
原生JAVA读写PLC
2018-06-28 13:58:39使用java8 scoket 实现西门子s7协议 可以读写 s7系列全部plc 没有dll 文件 纯原生java -
JAVA与PLC通讯读取数据(两种方式)
2021-12-17 15:24:57第二种方式(HslCommunication) 参考C语言读PLC而来:C# 读写西门子PLC数据,包含S7协议和Fetch/Write协议,s7支持200smart,300PLC,1200PLC,1500PLC - dathlin - 博客园 1.创建maven工程引入依赖 ...第一种方式(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 读写文件
2017-06-21 21:23:46java读写文件简单命令 -
OPC工具读取PLC数据
2015-09-22 14:38:20一个读取PLC数据的工具,OPC 配置参数过程(读取西门子 PLC S7200 SMART的数据) 1、 新建NEW Channel –> Channel name xxxx -> Device driver “Siemens TCP/IP Ethernet” -> Network Adapter “Realtek PCIe GBE... -
java读写西门子plc数据块 采用TCP网络连接
2021-09-03 11:47:00PLC数据 Eclipse+Maven+JDK8 使用的轮子是 s7connector 官网有简单的案例 官网地址https://s7connector.github.io/s7connector/ 创建Maven工程, 需要导入的Maven依赖 junit junit 3.8.1 test ...import java.io....PLC数据
Eclipse+Maven+JDK8
使用的轮子是 s7connector 官网有简单的案例 官网地址https://s7connector.github.io/s7connector/
-
创建Maven工程,
-
需要导入的Maven依赖
-
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <dependency> <groupId>com.github.s7connector</groupId> <artifactId>s7connector</artifactId> <version>2.1</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.25</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.25</version> </dependency> </dependencies>
获取数据代码
import java.io.IOException; import java.math.BigDecimal; import com.github.s7connector.api.DaveArea; import com.github.s7connector.api.S7Connector; import com.github.s7connector.api.factory.S7ConnectorFactory; import com.github.s7connector.impl.serializer.converter.BitConverter; import com.github.s7connector.impl.serializer.converter.IntegerConverter; import com.github.s7connector.impl.serializer.converter.RealConverter; import com.github.s7connector.impl.serializer.converter.StringConverter; /** * 测试PLC通信 * 获得PLC的数据 */ public class PlcTest1 { //Int类型的封装类 用来转义 private static IntegerConverter intCon = new IntegerConverter(); //String... private static StringConverter strCon = new StringConverter(); //Boolean... private static BitConverter boolCon = new BitConverter(); //real实数浮点... private static RealConverter realCon = new RealConverter(); public static void main(String[] args) { long startTime = System.currentTimeMillis(); // 获取开始时间 //创建与PLC的链接 final S7Connector connector = S7ConnectorFactory.buildTCPConnector().withHost("192.168.0.21") // .withRack(0) // 架机号 可选 .withSlot(1) // 插槽号 可选 .build(); byte[] PlcData = connector.read(DaveArea.DB, // 选择数据区块 5, // 区块编号 2, // 数据值长度 int长度2 2); // 开始位置 偏移量 System.out.println("转换int="+intCon.extract(new Integer(0).getClass(), PlcData, 0, 0)); PlcData = connector.read(DaveArea.DB, // 选择数据区块 5, // 区块编号 16, // 数据值长度 String最小3 随值长度增加 4); // 开始位置偏移量 System.out.println("转换str="+strCon.extract(new String().getClass(), PlcData, 0, 0)); PlcData = connector.read(DaveArea.DB, // 选择数据区块 5, // 区块编号 1, // 数据值长度 boolean长度1 0); // 开始位置偏移量 System.out.println("转换bool="+boolCon.extract(new Boolean(false).getClass(), PlcData, 0, 0)); PlcData = connector.read(DaveArea.DB, // 选择数据区块 5, // 区块编号 4, // 数据值长度 double长度4 516); //偏移量 Double num1 = realCon.extract(new Double(0).getClass(), PlcData, 0, 0); BigDecimal bd1 = new BigDecimal(num1); System.out.println("转换real浮点="+bd1.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString()); try { connector.close();//关闭链接 } catch (IOException e) { e.printStackTrace(); } long endTime = System.currentTimeMillis(); // 获取结束时间 System.out.println("程序运行时间:" + (endTime - startTime) + "ms"); // 输出程序运行时间 } }
运行结果
写入数据代码
package wlf.learn; import java.math.BigDecimal; import java.nio.ByteBuffer; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.ThreadPoolExecutor; import com.github.s7connector.api.DaveArea; import com.github.s7connector.api.S7Connector; import com.github.s7connector.api.factory.S7ConnectorFactory; import com.github.s7connector.impl.serializer.converter.BitConverter; import com.github.s7connector.impl.serializer.converter.IntegerConverter; import com.github.s7connector.impl.serializer.converter.RealConverter; import com.github.s7connector.impl.serializer.converter.StringConverter; /** * 测试PLC通信 获得PLC的数据 * 多线程 */ public class PlcTest2 { public static void main(String[] args) { long startTime = System.currentTimeMillis(); // 计算开始时间 S7Connector connector = S7ConnectorFactory.buildTCPConnector().withHost("192.168.0.21") // .withRack(0) // 架机号 可选 .withSlot(1) // 插槽号 可选 .build(); // 线程池 ExecutorService pool = Executors.newFixedThreadPool(10); ThreadPoolExecutor executor = (ThreadPoolExecutor) pool; executor.setCorePoolSize(2); executor.setMaximumPoolSize(3); //Real读写 executor.execute(new WriteReal(connector,(float)202109.06)); executor.execute(new GetReal(connector)); //String读写 executor.execute(new WriteString(connector,"SShelloword"));//'SS'占位符 从第3个字符开始为写入内容 executor.execute(new GetString(connector)); //关闭线程池 pool.shutdown(); long endTime = System.currentTimeMillis(); // 计算结束时间 System.out.println("程序整体运行时间:" + (endTime - startTime) + "ms"); // 输出程序运行时间 } } class GetString implements Runnable { S7Connector connector = null; GetString(S7Connector connector) { this.connector = connector; } public void run() { long startTime = System.currentTimeMillis(); // 计算开始时间 // String... StringConverter strCon = new StringConverter(); byte[] PlcData = connector.read(DaveArea.DB, // 选择数据区块 5, // 区块编号 128, //byte数据值长度 String最小3 最大96 随值长度增加 4); // 开始位置偏移量 System.out.print("str=" + strCon.extract(new String().getClass(), PlcData, 0, 0).trim()); long endTime = System.currentTimeMillis(); // 计算结束时间 System.out.println("\t时间:" + (endTime - startTime) + "ms"); // 输出程序运行时间 } } class GetReal implements Runnable { S7Connector connector = null; GetReal(S7Connector connector) { this.connector = connector; } public void run() { long startTime = System.currentTimeMillis(); // 计算开始时间 RealConverter realCon = new RealConverter(); byte[] PlcData = connector.read(DaveArea.DB, // 选择数据区块 5, // 区块编号 4, //byte数据值长度 double长度4 260); // 偏移量 Double num1 = realCon.extract(new Double(0).getClass(), PlcData, 0, 0); BigDecimal bd1 = new BigDecimal(num1); System.out.print("real浮点=" + bd1.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString()); long endTime = System.currentTimeMillis(); // 计算结束时间 System.out.println("\t时间:" + (endTime - startTime) + "ms"); // 输出程序运行时间 } } /** * 写入Real到PLC * @author 1 * */ class WriteReal implements Runnable { S7Connector connector = null; Float data = null; WriteReal(S7Connector connector,Float data) { this.connector = connector; this.data = data; } public void run() { long startTime = System.currentTimeMillis(); // 计算开始时间 System.out.println(); // 输出程序运行时间 byte[] bytes = ByteBuffer.allocate(4).putFloat(data).array(); connector.write(DaveArea.DB,5,260,bytes); long endTime = System.currentTimeMillis(); // 计算结束时间 System.out.println("写入Real成功:"+data+"\t时间:" + (endTime - startTime) + "ms"); } } /** * 写入String到PLC * @author 1 * */ class WriteString implements Runnable { S7Connector connector = null; String data = null; WriteString(S7Connector connector,String data) { this.connector = connector; this.data = data; } public void run() { long startTime = System.currentTimeMillis(); // 计算开始时间 byte[] bytes = data.getBytes(); connector.write(DaveArea.DB,5,4,bytes); long endTime = System.currentTimeMillis(); // 计算结束时间 System.out.println("写入Str成功:"+data+"\t时间:" + (endTime - startTime) + "ms"); } }
-
-
java 使用opc server抓取plc数据
2017-06-15 08:36:44公司今天要我研究这个方面的技术,以前从来没接触过。有知道这一块的大神吗? -
java与PLC通信,java读写S7-S200、S7-300、S7-400
2021-05-28 14:24:22这个例子是java采集java S7-S200、java S7-300、java S7-400协义数据, 可以实现数据同步图表显示,并且可以写入数据, 以上全开源,一看就知道,请放心下载,已经使用在生产上 请浏览详情 ... -
java与plc通讯示例代码
2019-07-18 15:55:59该示例代码使用modbus4j通过modbus连接plc 并实现读取plc端口数据及plc内部寄存器数据。 -
JAVA对PLC控制或进行对应块数据获取;zf.zip;
2021-10-29 13:07:21最近新接了个项目,其中一个功能是要和PLC进行交互,获取PLC的块信息,网上看了很多,都没有详细的方法,下面是我自己整理的一些方法及资料,众所周知,PLC是不可以直接进行HTTP请求发送,那么常见的PLC通讯方式有... -
java连接opc读取数据实例及文档
2016-03-28 16:01:52在已有java web工程里添加读取opc的接口类。附有详细说明操作步骤。 -
欧姆龙CJ2M系列PLC与PLC之间的数据互相读取设定
2021-04-18 03:29:22同享一下欧姆龙CJ2M系列的plc与PLC之间的数据互相读取设定,因为CJ2M系列PLC自带EIP协议,所以硬件联接只需求将多个PLC经过网线用沟通机连起来,并将悉数的PLC的IP地址设置在同一个网段即可(如192.168.250.1;...同享一下欧姆龙CJ2M系列的plc与PLC之间的数据互相读取设定,因为CJ2M系列PLC自带EIP协议,所以硬件联接只需求将多个PLC经过网线用沟通机连起来,并将悉数的PLC的IP地址设置在同一个网段即可(如192.168.250.1;192.168.250.2;……)
1,IP地址的设置:
翻开编程软件,
用USB线将CPU与电脑连起来,翻开IO表,将每个PLC的CJ2M-EIP21的IP地址设为同一网段纷歧样节点,用USB线别离下载到每个PLC。
2,翻开network configratorn软件
在菜单栏挑选USB接口,并在线
点击OK,挑选TCP:2联接
挑选网络
挑选上载网络
上载后就能够看到悉数网络里的悉数设备
下面咱们来设置各PLC互相读取的数据(在这儿咱们用1#PLC别离与2#,3#,4#,5#PLC进行数据沟通,1#PLC的D00000,D02000,D03000,D04000作为发送地址,D00010,D02100,D03100,D041000作为接纳地址,2#,3#,4#,5#PLC均由D00000作为接纳地址,D00010作为发送地址),
树立1#PLC的CJ2M-EIP21的tag,双击1#EIP模块,点击edit tags进入新建页面,点击NEW新建tag称谓为D0,8个字节,顺次树立D2000,D3000,D4000,均为8个字节;往后在OUT新建tag,地址别离为D10,D2100,D3100,D4100,地址均为8个字节。
以相同的办法别离在2#,3#,4#,5#PLC树立发送和接纳地址,这儿需求留神的是,发送数据的巨细和对应接纳数据的巨细有必要一同,不然,将会报错。
下面咱们将在1#PLC下注册2#,3#,4#,5#PLC,在2#,3#,4#,5#PLC下注册1#PLC。
点击向下的箭头
双击IP地址
挑选输入地址对应到输出地址
顺次将2#,3#,4#,5#注册,注册往后模块下方将呈现一个小方框,里边有个小箭头。
终究下载到PLC。
-
Java读写操作西门子S7系列PLC
2019-06-13 13:26:39原帖地址 https://blog.csdn.net/pnoter/article/details/90231852 -
Java接收三菱plc发送的数据
2021-04-19 15:09:09Java接收三菱plc发送的数据 一、需求 plc做服务端,Java做客户端,将焊机电流,报警信息,焊接工件数量等信息传送到java端,数据保存到数据库,进行web展示等。 二、实现方式 作为java开发程序员,常使用byte... -
PC通过数据网关读写plc寄存器的python通信协议
2018-06-30 16:58:40使用西门子S7-200CN PLC,V4.0 STEP 7 MicroWIN SP9上导入Modbus Slave Port0(v1.0),下载slave.mwp到PLC并运行,串口连接PLC与数据采集网关(PC、树莓派或开发板),运行数据采集网关上的server.py,运行另一台PC上... -
西门子PLC数据读写软件
2017-08-04 10:13:04西门子300 400 1200 1500PLC 以太网读写软件 不使用任何OPC服务器。 本软件运行环境 Framework 4.0 如果电脑上没有安装请在百度搜索下载安装。 有任何问题请联系QQ781885609 或加QQ群478867152 技术交流。 -
java使用Fx串口协议批量读写plc.rar
2019-07-18 17:17:12该文档是java使用Fx串口协议批量读、写入的demo,解压文件设置好串口规则运行即可。涉及到串口操作,需要引入RXTX库,将资源中rxtxParallel.dll/rxtxSerial.dll放在jdk安装目录下。 -
欧姆龙CJ2M系列PLC与PLC之间的数据相互读取设定
2021-03-14 10:59:00分享一下欧姆龙CJ2M系列的plc与PLC之间的数据相互读取设定,因为CJ2M系列PLC自带EIP协议,所以硬件连接只需要将多个PLC通过网线用交换机连起来,并将所有的PLC的IP地址设置在同一个网段即可(如192.168.250.1;... -
java读写PLC物联网Modbus RTU数据,java串口modbus通信,PLC工业协议Modbus RTU与java通信 JavaPLC网关 一...
2021-11-08 21:19:20最近在研究处理java写modbus RTU通信,分别使用几套工具,模拟modbus从站、模拟串口等才能正常在电脑测试成功。 最开始使用阿里开发的jdkAlibaba Dragonwell 8.8.9,一报错,后来使用oracle的jdk正常 以下是一些... -
s7connector:适用于Java的S7 PLC连接器
2021-04-28 08:28:14从S7 PLC读取数据或向S7 PLC写入数据 OSGi支持 PROFINET支持 直接从Maven Central使用 Apache许可证 入门 简单的读/写示例 // Create connection S7Connector connector = S7ConnectorFactory .... -
Java连接西门子PLC(S7-1200)及读写操作
2022-01-19 15:53:37Java连接西门子PLC(S7-1200)及读写操作 -
java与plc 西门子 通讯,进行读写操作 采用TCP 直接连接
2020-12-30 12:23:54java与plc 西门子 通讯,进行读写操作 采用TCP 直接连接 0x0 阅读本文章你能会使用java与西门子plc 进行通信 所有环境都为仿真模拟环境, 本测试使用的是西门子plc(s7-1500) 软件为: 博图v16 plc仿真(s7-... -
java android 读写西门子PLC数据,包含S7协议和Fetch/Write协议,s7支持200smart,300PLC,1200PLC,1500...
2021-03-14 00:33:01本文将使用一个gitHub开源的组件技术来读写西门子plc数据,使用的是基于以太网的TCP/IP实现,不需要额外的组件,读取操作只要放到后台线程就不会卡死线程,本组件支持超级方便的高性能读写操作github地址:... -
.netCore环境下使用ModbusTCP读取PLC数据, 大小端的两种转换方法
2022-03-31 23:51:19} //大小端的方法:西门子等欧系PLC都是大端在前 List<ushort> barr2 = new List(); //第一种方法 private void btn1_Click(object sender, EventArgs e) { byte[] barr = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8 }; ... -
利用java读取OPC里面的数据总结
2019-08-30 15:25:59利用java与OPC通讯读取数据Matrikon_opc模拟器S7-200 PC Access SMART Matrikon_opc模拟器 1、Matrikon-OPC-server模拟器的安装参考链接 软件下载:OPC软件安装包下载 软件安装:安装OPC-server. 2、与matrikon-opc... -
Java如何连接读取西门子200smart?
2022-04-21 14:04:15现在有需求要读取plc程序里的数据,本人不懂plc,请问应该如何读取这里面的数据呢?在此请教各位,希望有个demo能让我学习下,感激不尽! -
java中使用modbusTcp与plc通信
2021-05-07 15:00:04本人只是用此协议写过上位机,所以这里介绍的只是在java中的一些使用 首先引入jar包 <dependency> <groupId>com.intelligt.modbus</groupId> <artifactId>jlibmodbus</artifactId>... -
java程序读取PLC的浮点数,读取到的小数位错误,请问如何解决?
2019-12-10 22:54:551.采用modbus4j实现了modbus通信,但读取PLC的浮点数时,读取到整数位正确,小数位错误,请问如何解决? 2. 读取PLC保持寄存器的方法如下: ``` readHoldingRegistersTest(master,1,1,4); private static ... -
寄存器读取命令响应超时 欧姆龙plc寄存器读取命
2021-04-18 03:28:14欧姆龙plc寄存器读取命令响应超时只看标题不能理解意思,从哪里读取?PLC本身?上位机电脑?还是从其它PLC?最不容易受伤的人,不是最坚强的人,而是最坦诚面对自己的人。小编现在有关于proface 的问题,就是小编...