Java与欧姆龙PLC连接并进行读写值操作

        最近新做的项目中需要用到与PLC的读写值操作,查阅半天没有找到一篇能完整实现这一整套流程的文章,基本找到的都是C#的,东拼西凑终于也算能实现了,下面来给大家分享一下。

1.首先我们需要引入与PLC建立连接所需要的类库,好多种类的的PLC都能在这个类库找到

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

2.依赖引入完成后,实例化一个我们需要建立连接的类,本次用到的是finsUdp协议。

OmronFinsUdp omronFinsUdp=new OmronFinsUdp("192.168.3.71",9600);

如果想用到其他协议的连接,可以手动输入Omron前缀在联想提示中自己查找。

3.实例化完对象以后,我们就可以进行读写操作了

 读操作:Short result=omronFinsUdp.ReadInt16(address).Content

 address就是你要读取PLC的地址值,例如D100.

 写操作:omronFinsUdp.Write(address, num)

 address还是要写入职的PLC地址,num是short类型的数。

4.验证之前可以先使用测试工具对PLC的值进行验证(测试工具上传到本人主页下载了,可免费下载https://download.csdn.net/download/JiaEason/88362875?spm=1001.2014.3001.5501

    填好ip和端口点击创建对象即可。

    

填入地址,点击short读取即可读取到地址的值。

现在D101的值是20,下面验证我们读取一下D100的值,把D101的值写入15,代码如下:

Short result = PlcOmlConfig.omlRead("D100");
System.out.println("读到的欧姆龙PLC的值:"+result);
String returnResult = PlcOmlConfig.omlWrite("D101", (short) 15);
System.out.println("写入的欧姆龙PLC结果:"+returnResult);

方法我做了封装,大家用我上面写的那个即可。执行代码,验证下效果。

代码中提示成功,实际再验证一下。

D101的值已经修改。

至此,java与欧姆龙PLC的读写操作就完成了!

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是一个简单的Java程序,它使用三菱MC协议从PLC中读取数据: ```java import java.net.Socket; import java.io.InputStream; import java.io.OutputStream; public class PLCDataCollector { public static void main(String[] args) throws Exception { // 设置PLC地址和端口号 String ip = "192.168.1.10"; int port = 5000; // 设置要读取的寄存器地址和数量 int startAddress = 0; int numRegisters = 10; // 创建Socket连接 Socket socket = new Socket(ip, port); // 创建输入输出流 InputStream in = socket.getInputStream(); OutputStream out = socket.getOutputStream(); // 发送读取寄存器的命令 byte[] command = new byte[] { 0x50, 0x00, 0x00, 0x00, 0x0C, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0A }; out.write(command); // 读取返回数据 byte[] buffer = new byte[1024]; int len = in.read(buffer); // 解析返回数据 int[] data = new int[numRegisters]; for (int i = 0; i < numRegisters; i++) { int highByte = buffer[9 + i * 2] & 0xFF; int lowByte = buffer[10 + i * 2] & 0xFF; data[i] = (highByte << 8) | lowByte; } // 输出读取的数据 for (int i = 0; i < numRegisters; i++) { System.out.println("Register " + (startAddress + i) + ": " + data[i]); } // 关闭连接 socket.close(); } } ``` 这个程序使用了Socket连接PLC,并且发送了一个读取寄存器的命令(0x500000000C0104000000001400010000000A),然后等待返回数据。返回数据的格式为: ``` Byte 1-2: 固定为 0x5000 Byte 3-4: 返回数据的长度,不包括前两个字节 Byte 5-6: 固定为 0x0000 Byte 7-8: 固定为 0x0401 Byte 9-10: 返回的寄存器数量,即 numRegisters Byte 11-12: 返回的数据类型,固定为 0x0000 Byte 13-N: 返回的数据,每个寄存器占两个字节,高字节在前,低字节在后 ``` 所以我们需要解析返回的数据,把每个寄存器的转换成整型。在上面的程序中,我们把每个寄存器的存储在一个 int 数组中,然后输出到控制台。你可以根据实际情况修改程序中的IP地址、端口号、寄存器地址和数量等参数。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值