Java连接Plc实现数据传输/读取(最新教程) 提示:本次交流就到这里啦!本人亲测三菱PLC传输正常,无非就是给软原件地址写值/传值。

Java连接Plc实现数据传输/读取



提示:以下是本篇文章正文内容,下面案例可供参考

一、引入HslCommunication依赖


 
 com.github.dathlin
 HslCommunication
 3.4.0
 

注意:该依赖由胡工科技支持 点击跳转

二、创建Plc工具类

public class HslCommunicationWrite{
 // PLC IP 端口
 private static final String PLC_CLIENT_IP = "127.0.0.1";
 private static final String PLC_CLIENT_PORT = "6666";
 private MelsecMcNet melsec_net_shunt =createConnection(); // 打开连接
 // 读数据
 public synchronized int ReadPlcInt(String address){
 return clientReadInt(address);// PLC操作
 }
 // 写数据
 public boolean SendPlcMsg(String address,int i){
 return clientSendInt(address,i);// PLC操作
 }
 // 获取PLC连接对象,并设置长连接
 private MelsecMcNet createConnection() {
 lock.lock();
 // 根据你使用的PLC型号选择适当的PLC类型
 melsec_net_shunt = new MelsecMcNet(PLC_CLIENT_IP, Integer.parseInt(PLC_CLIENT_PORT));
 melsec_net_shunt.SetPersistentConnection(); // 设置为长连接模式
 return melsec_net_shunt;
 }
 // 关闭长连接
 private void closeConnection() {
 melsec_net_shunt.ConnectClose();
 }
 /**
 * 写入一个 int 类型的
 * @param melsec_net_shunt PLC 连接对象
 * @param address PLC 地址
 * @param i 写入值
 * @return 成功 true 失败 false
 */
 private boolean clientSendInt(String address,int i){
 try{
 try {
 TimeUnit.MILLISECONDS.sleep(TIME_SLEEP);
 } catch (InterruptedException e) {
 throw new RuntimeException(e);
 }
 // 写入一个整数值
 OperateResult writeResult = melsec_net_shunt.Write(address,i);
 if (writeResult.IsSuccess) { // 写入成功
 return true;
 } else {
 // 写入失败
 // 添加PLC连接失败日志
 log.error(writeResult.Message);
 OperateResult connect = melsec_net_shunt.ConnectServer( );
 if (!connect.IsSuccess)
 {//连接失败
 closeConnection(); //关闭连接
 createConnection();//打开连接
 }
 return false;
 }
 }catch (Exception e){
 throw new RuntimeException(e);
 }
 }
 /**
 * 读取PLC的某个地址
 * @param melsec_net_shunt PLC 连接对象
 * @param address PLC 地址
 * @return 成功 true 失败 false
 */
 private int clientReadInt(String address){
 try {
 try {
 TimeUnit.MILLISECONDS.sleep(TIME_SLEEP);
 } catch (InterruptedException e) {
 throw new RuntimeException(e);
 }
 // 读取某个地址的信息
 OperateResult readResult = melsec_net_shunt.ReadInt16(address);
 if (readResult.IsSuccess) { //是否成功
 return (int) melsec_net_shunt.ReadInt16(address).Content;
 } else {
 // 添加PLC连接失败日志
 log.error(readResult.Message);
 OperateResult connect = melsec_net_shunt.ConnectServer( );
 if (!connect.IsSuccess)
 {//连接失败
 closeConnection(); //关闭连接
 createConnection();//打开连接
 }
 }
 }catch (Exception e){
 throw new RuntimeException(e);
 }
 return 5;
 }
}

二、调用工具类读/写数据

//给PLC地址D3201写入1
hslCommunicationWrite.SendPlcMsg("D3201",1);
//给PLC地址D3201.5写入1
hslCommunicationWrite.SendPlcMsg("D3201",(1 

*原创不易,各位看官老爷点个赞在走 *

总结

提示:本次交流就到这里啦!本人亲测三菱PLC传输正常,无非就是给软原件地址写值/传值。

作者:不喝过期茅台原文地址:https://blog.csdn.net/m0_49009178/article/details/135241419

%s 个评论

要回复文章请先登录注册