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