iec104协议导包错误优化

This commit is contained in:
weitang 2025-05-27 16:25:26 +08:00
parent f3015b6a6f
commit 1bf9a2d40a
15 changed files with 78 additions and 81 deletions

View File

@ -10,6 +10,7 @@ import com.yfd.platform.component.iec104.message.MessageDetail;
import com.yfd.platform.component.iec104.message.MessageInfo; import com.yfd.platform.component.iec104.message.MessageInfo;
import com.yfd.platform.component.iec104.server.master.BootNettyClientChannel; import com.yfd.platform.component.iec104.server.master.BootNettyClientChannel;
import com.yfd.platform.component.iec104.server.master.BootNettyClientChannelCache; import com.yfd.platform.component.iec104.server.master.BootNettyClientChannelCache;
import com.yfd.platform.component.iec104.util.Iec104Util;
import com.yfd.platform.modules.auxcontrol.domain.DeviceSignal; import com.yfd.platform.modules.auxcontrol.domain.DeviceSignal;
import com.yfd.platform.modules.auxcontrol.domain.GatewayDevice; import com.yfd.platform.modules.auxcontrol.domain.GatewayDevice;
import com.yfd.platform.modules.auxcontrol.domain.MeterDevice; import com.yfd.platform.modules.auxcontrol.domain.MeterDevice;
@ -101,7 +102,7 @@ public class IIEC104Service {
// 发送序号 // 发送序号
short send = 0; short send = 0;
//控制欲 //控制欲
byte[] control = com.ydl.iec.util.Iec104Util.getIcontrol(accept, send); byte[] control = Iec104Util.getIcontrol(accept, send);
//类型标识 2D //类型标识 2D
TypeIdentifierEnum typeIdentifierEnum = null; TypeIdentifierEnum typeIdentifierEnum = null;
// 消息地址 总召唤地址为0 // 消息地址 总召唤地址为0

View File

@ -1,13 +1,13 @@
package com.yfd.platform.component.iec104.client; package com.yfd.platform.component.iec104.client;
import cn.hutool.core.util.ObjUtil; import cn.hutool.core.util.ObjUtil;
import com.ydl.iec.util.ByteUtil;
import com.yfd.platform.component.iec104.message.MessageDetail; import com.yfd.platform.component.iec104.message.MessageDetail;
import com.yfd.platform.component.iec104.message.MessageInfo; import com.yfd.platform.component.iec104.message.MessageInfo;
import com.yfd.platform.component.iec104.server.handler.ChannelHandler; import com.yfd.platform.component.iec104.server.handler.ChannelHandler;
import com.yfd.platform.component.iec104.server.handler.DataHandler; import com.yfd.platform.component.iec104.server.handler.DataHandler;
import com.yfd.platform.component.iec104.server.master.BootNettyClientChannel; import com.yfd.platform.component.iec104.server.master.BootNettyClientChannel;
import com.yfd.platform.component.iec104.server.master.BootNettyClientChannelCache; import com.yfd.platform.component.iec104.server.master.BootNettyClientChannelCache;
import com.yfd.platform.component.iec104.util.ByteUtil;
import com.yfd.platform.modules.auxcontrol.service.IDeviceSignalService; import com.yfd.platform.modules.auxcontrol.service.IDeviceSignalService;
import com.yfd.platform.modules.auxcontrol.service.IDeviceWorkDataService; import com.yfd.platform.modules.auxcontrol.service.IDeviceWorkDataService;
import com.yfd.platform.modules.auxcontrol.service.IGatewayDeviceService; import com.yfd.platform.modules.auxcontrol.service.IGatewayDeviceService;

View File

@ -7,8 +7,8 @@ import com.yfd.platform.component.iec104.message.MessageInfo;
import com.yfd.platform.component.iec104.enums.QualifiersEnum; import com.yfd.platform.component.iec104.enums.QualifiersEnum;
import com.yfd.platform.component.iec104.enums.TypeIdentifierEnum; import com.yfd.platform.component.iec104.enums.TypeIdentifierEnum;
import com.yfd.platform.component.iec104.enums.UControlEnum; import com.yfd.platform.component.iec104.enums.UControlEnum;
import com.ydl.iec.util.ByteUtil; import com.yfd.platform.component.iec104.util.ByteUtil;
import com.ydl.iec.util.Iec104Util; import com.yfd.platform.component.iec104.util.Iec104Util;
import java.io.IOException; import java.io.IOException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;

View File

@ -2,7 +2,7 @@ package com.yfd.platform.component.iec104.core;
import com.yfd.platform.component.iec104.common.Iec104Constant; import com.yfd.platform.component.iec104.common.Iec104Constant;
import com.yfd.platform.component.iec104.message.MessageDetail; import com.yfd.platform.component.iec104.message.MessageDetail;
import com.ydl.iec.util.Iec104Util; import com.yfd.platform.component.iec104.util.Iec104Util;
import com.yfd.platform.component.utils.OptimizedThreadPool; import com.yfd.platform.component.utils.OptimizedThreadPool;
import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelHandlerContext;
import org.slf4j.Logger; import org.slf4j.Logger;

View File

@ -1,11 +1,11 @@
package com.yfd.platform.component.iec104.core; package com.yfd.platform.component.iec104.core;
import com.ydl.iec.util.Iec104Util;
import com.yfd.platform.component.iec104.message.MessageDetail; import com.yfd.platform.component.iec104.message.MessageDetail;
import com.yfd.platform.component.iec104.message.MessageInfo; import com.yfd.platform.component.iec104.message.MessageInfo;
import com.yfd.platform.component.iec104.enums.QualifiersEnum; import com.yfd.platform.component.iec104.enums.QualifiersEnum;
import com.yfd.platform.component.iec104.enums.TypeIdentifierEnum; import com.yfd.platform.component.iec104.enums.TypeIdentifierEnum;
import com.ydl.iec.util.ByteUtil; import com.yfd.platform.component.iec104.util.ByteUtil;
import com.yfd.platform.component.iec104.util.Iec104Util;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.ArrayList; import java.util.ArrayList;

View File

@ -4,8 +4,8 @@ import com.yfd.platform.component.iec104.enums.QualifiersEnum;
import com.yfd.platform.component.iec104.enums.TypeIdentifierEnum; import com.yfd.platform.component.iec104.enums.TypeIdentifierEnum;
import com.yfd.platform.component.iec104.message.MessageDetail; import com.yfd.platform.component.iec104.message.MessageDetail;
import com.yfd.platform.component.iec104.message.MessageInfo; import com.yfd.platform.component.iec104.message.MessageInfo;
import com.ydl.iec.util.ByteUtil; import com.yfd.platform.component.iec104.util.ByteUtil;
import com.ydl.iec.util.Iec104Util; import com.yfd.platform.component.iec104.util.Iec104Util;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
import java.io.IOException; import java.io.IOException;

View File

@ -1,8 +1,7 @@
package com.yfd.platform.component.iec104.message; package com.yfd.platform.component.iec104.message;
import com.ydl.iec.util.Iec104Util;
import com.yfd.platform.component.iec104.enums.QualifiersEnum; import com.yfd.platform.component.iec104.enums.QualifiersEnum;
import com.yfd.platform.component.iec104.enums.TypeIdentifierEnum; import com.yfd.platform.component.iec104.enums.TypeIdentifierEnum;
import com.yfd.platform.component.iec104.util.Iec104Util;
import lombok.Data; import lombok.Data;
import java.util.ArrayList; import java.util.ArrayList;

View File

@ -3,9 +3,8 @@ package com.yfd.platform.component.iec104.server.handler;
import com.yfd.platform.component.iec104.common.Iec104Constant; import com.yfd.platform.component.iec104.common.Iec104Constant;
import com.yfd.platform.component.iec104.server.master.BootNettyClientChannel; import com.yfd.platform.component.iec104.server.master.BootNettyClientChannel;
import com.yfd.platform.component.iec104.server.master.BootNettyClientChannelCache; import com.yfd.platform.component.iec104.server.master.BootNettyClientChannelCache;
import com.ydl.iec.util.ByteUtil; import com.yfd.platform.component.iec104.util.ByteUtil;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInboundHandlerAdapter; import io.netty.channel.ChannelInboundHandlerAdapter;
import io.netty.util.ReferenceCountUtil; import io.netty.util.ReferenceCountUtil;
@ -39,7 +38,7 @@ public class Check104Handler extends ChannelInboundHandlerAdapter {
result.readBytes(bytes); result.readBytes(bytes);
BootNettyClientChannel Channel= BootNettyClientChannelCache.get(ctx.channel().id().asShortText()); BootNettyClientChannel Channel= BootNettyClientChannelCache.get(ctx.channel().id().asShortText());
String slave_ip= Channel.getCode(); String slave_ip= Channel.getCode();
LOGGER.info( String.format("接收到从站[%s]发送的报文: %s", slave_ip,ByteUtil.byteArrayToHexString(bytes) )); LOGGER.info( String.format("接收到从站[%s]发送的报文: %s", slave_ip, ByteUtil.byteArrayToHexString(bytes) ));
if (bytes.length < Iec104Constant.APCI_LENGTH || bytes[0] != Iec104Constant.HEAD_DATA) { if (bytes.length < Iec104Constant.APCI_LENGTH || bytes[0] != Iec104Constant.HEAD_DATA) {
LOGGER.error("报文无效"); LOGGER.error("报文无效");
ReferenceCountUtil.release(result); ReferenceCountUtil.release(result);

View File

@ -1,16 +1,14 @@
package com.yfd.platform.component.iec104.server.handler; package com.yfd.platform.component.iec104.server.handler;
import com.yfd.platform.component.iec104.core.Iec104ThreadLocal;
import com.ydl.iec.util.Iec104Util;
import com.yfd.platform.component.iec104.core.Decoder104; import com.yfd.platform.component.iec104.core.Decoder104;
import com.yfd.platform.component.iec104.core.Iec104ThreadLocal;
import com.yfd.platform.component.iec104.message.MessageDetail; import com.yfd.platform.component.iec104.message.MessageDetail;
import com.ydl.iec.util.ByteUtil; import com.yfd.platform.component.iec104.util.ByteUtil;
import com.yfd.platform.component.iec104.util.Iec104Util;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInboundHandlerAdapter;
import io.netty.handler.codec.ByteToMessageDecoder; import io.netty.handler.codec.ByteToMessageDecoder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.List; import java.util.List;

View File

@ -2,10 +2,10 @@ package com.yfd.platform.component.iec104.server.handler;
import com.yfd.platform.component.iec104.core.Iec104ThreadLocal; import com.yfd.platform.component.iec104.core.Iec104ThreadLocal;
import com.ydl.iec.util.Iec104Util;
import com.yfd.platform.component.iec104.core.Encoder104; import com.yfd.platform.component.iec104.core.Encoder104;
import com.yfd.platform.component.iec104.message.MessageDetail; import com.yfd.platform.component.iec104.message.MessageDetail;
import com.ydl.iec.util.ByteUtil; import com.yfd.platform.component.iec104.util.ByteUtil;
import com.yfd.platform.component.iec104.util.Iec104Util;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.MessageToByteEncoder; import io.netty.handler.codec.MessageToByteEncoder;
@ -35,7 +35,7 @@ public class DataEncoder extends MessageToByteEncoder<MessageDetail> {
} }
bytes[10] = terminalAddressBytes[0]; bytes[10] = terminalAddressBytes[0];
bytes[11] = terminalAddressBytes[1]; bytes[11] = terminalAddressBytes[1];
String hexString=ByteUtil.byteArrayToHexString(bytes); String hexString= ByteUtil.byteArrayToHexString(bytes);
log.info(hexString); log.info(hexString);
out.writeBytes(bytes); out.writeBytes(bytes);

View File

@ -1,8 +1,8 @@
package com.yfd.platform.component.iec104.server.handler; package com.yfd.platform.component.iec104.server.handler;
import com.yfd.platform.component.iec104.common.Iec104Constant; import com.yfd.platform.component.iec104.common.Iec104Constant;
import com.ydl.iec.util.Iec104Util; import com.yfd.platform.component.iec104.util.ByteUtil;
import com.ydl.iec.util.ByteUtil; import com.yfd.platform.component.iec104.util.Iec104Util;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInboundHandlerAdapter; import io.netty.channel.ChannelInboundHandlerAdapter;

View File

@ -4,8 +4,8 @@ import com.yfd.platform.component.iec104.core.Iec104ThreadLocal;
import com.yfd.platform.component.iec104.enums.UControlEnum; import com.yfd.platform.component.iec104.enums.UControlEnum;
import com.yfd.platform.component.iec104.server.master.BootNettyClientChannel; import com.yfd.platform.component.iec104.server.master.BootNettyClientChannel;
import com.yfd.platform.component.iec104.server.master.BootNettyClientChannelCache; import com.yfd.platform.component.iec104.server.master.BootNettyClientChannelCache;
import com.ydl.iec.util.ByteUtil; import com.yfd.platform.component.iec104.util.ByteUtil;
import com.ydl.iec.util.Iec104Util; import com.yfd.platform.component.iec104.util.Iec104Util;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInboundHandlerAdapter; import io.netty.channel.ChannelInboundHandlerAdapter;

View File

@ -1,9 +1,9 @@
package com.yfd.platform.component.iec104.server.slave.handler; package com.yfd.platform.component.iec104.server.slave.handler;
import com.yfd.platform.component.iec104.common.BasicInstruction104; import com.yfd.platform.component.iec104.common.BasicInstruction104;
import com.ydl.iec.util.Iec104Util;
import com.yfd.platform.component.iec104.enums.UControlEnum; import com.yfd.platform.component.iec104.enums.UControlEnum;
import com.ydl.iec.util.ByteUtil; import com.yfd.platform.component.iec104.util.ByteUtil;
import com.yfd.platform.component.iec104.util.Iec104Util;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInboundHandlerAdapter; import io.netty.channel.ChannelInboundHandlerAdapter;

View File

@ -1,25 +1,25 @@
package com.ydl.iec.util; package com.yfd.platform.component.iec104.util;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
import java.util.Calendar; import java.util.Calendar;
import java.util.Date; import java.util.Date;
/** /**
* *
* @ClassName: ByteUtil * @ClassName: ByteUtil
* @Description: byte 工具类 * @Description: byte 工具类
* @author YDL * @author YDL
* @date 2020年5月13日 * @date 2020年5月13日
*/ */
public class ByteUtil { public class ByteUtil {
/** /**
* *
* @Title: intToByteArray * @Title: intToByteArray
* @Description: int 转换成 byte数组 * @Description: int 转换成 byte数组
* @param @param i * @param @param i
* @param @return * @param @return
* @return byte[] * @return byte[]
* @throws * @throws
*/ */
public static byte[] intToByteArray(int i) { public static byte[] intToByteArray(int i) {
@ -30,13 +30,13 @@ public class ByteUtil {
result[3] = (byte) (i & 0xFF); result[3] = (byte) (i & 0xFF);
return result; return result;
} }
/** /**
* @Title: shortToByteArray * @Title: shortToByteArray
* @Description: short 转换成 byte[] * @Description: short 转换成 byte[]
* @param @param val * @param @param val
* @param @return * @param @return
* @return byte[] * @return byte[]
* @throws * @throws
*/ */
public static byte[] shortToByteArray(short val) { public static byte[] shortToByteArray(short val) {
@ -45,14 +45,14 @@ public class ByteUtil {
b[1] = (byte) (val & 0xff); b[1] = (byte) (val & 0xff);
return b; return b;
} }
/** /**
* *
* @Title: byteArrayToInt * @Title: byteArrayToInt
* @Description: byte[] 转换成 int * @Description: byte[] 转换成 int
* @param @param bytes * @param @param bytes
* @param @return * @param @return
* @return int * @return int
* @throws * @throws
*/ */
public static int byteArrayToInt(byte[] bytes) { public static int byteArrayToInt(byte[] bytes) {
@ -63,14 +63,14 @@ public class ByteUtil {
} }
return value; return value;
} }
/** /**
* *
* @Title: byteArrayToShort * @Title: byteArrayToShort
* @Description: byte[] 转换成short * @Description: byte[] 转换成short
* @param @param bytes * @param @param bytes
* @param @return * @param @return
* @return short * @return short
* @throws * @throws
*/ */
public static short byteArrayToShort(byte[] bytes) { public static short byteArrayToShort(byte[] bytes) {
@ -81,15 +81,15 @@ public class ByteUtil {
} }
return value; return value;
} }
// /** // /**
// * // *
// * @Title: listToBytes // * @Title: listToBytes
// * @Description: TODO // * @Description: TODO
// * @param @param byteList // * @param @param byteList
// * @param @return // * @param @return
// * @return byte[] // * @return byte[]
// * @throws // * @throws
// */ // */
// public static byte[] listToBytes(List<Byte> byteList) { // public static byte[] listToBytes(List<Byte> byteList) {
@ -100,40 +100,40 @@ public class ByteUtil {
// } // }
// return bytes; // return bytes;
// } // }
/** /**
* *
* @Title: date2HByte * @Title: date2HByte
* @Description: 日期转换成 CP56Time2a * @Description: 日期转换成 CP56Time2a
* @param @param date * @param @param date
* @param @return * @param @return
* @return byte[] * @return byte[]
* @throws * @throws
*/ */
public static byte[] date2Hbyte(Date date) { public static byte[] date2Hbyte(Date date) {
ByteArrayOutputStream bOutput = new ByteArrayOutputStream(); ByteArrayOutputStream bOutput = new ByteArrayOutputStream();
Calendar calendar = Calendar.getInstance(); Calendar calendar = Calendar.getInstance();
calendar.setTime(date); calendar.setTime(date);
// 毫秒需要转换成两个字节其中 低位在前高位在后 // 毫秒需要转换成两个字节其中 低位在前高位在后
// 先转换成short // 先转换成short
int millisecond = calendar.get(Calendar.SECOND) * 1000 + calendar.get(Calendar.MILLISECOND); int millisecond = calendar.get(Calendar.SECOND) * 1000 + calendar.get(Calendar.MILLISECOND);
// 默认的高位在前 // 默认的高位在前
byte[] millisecondByte = intToByteArray(millisecond); byte[] millisecondByte = intToByteArray(millisecond);
bOutput.write((byte) millisecondByte[3]); bOutput.write((byte) millisecondByte[3]);
bOutput.write((byte) millisecondByte[2]); bOutput.write((byte) millisecondByte[2]);
// 分钟 只占6个比特位 需要把前两位置为零 // 分钟 只占6个比特位 需要把前两位置为零
bOutput.write((byte) calendar.get(Calendar.MINUTE)); bOutput.write((byte) calendar.get(Calendar.MINUTE));
// 小时需要把前三位置零 // 小时需要把前三位置零
bOutput.write((byte) calendar.get(Calendar.HOUR_OF_DAY)); bOutput.write((byte) calendar.get(Calendar.HOUR_OF_DAY));
// 星期日的时候 week 是0 // 星期日的时候 week 是0
int week = calendar.get(Calendar.DAY_OF_WEEK); int week = calendar.get(Calendar.DAY_OF_WEEK);
if (week == Calendar.SUNDAY) { if (week == Calendar.SUNDAY) {
week = 7; week = 7;
} else { } else {
week--; week--;
} }
// 前三个字节是 星期 因此需要将星期向左移5位 后五个字节是日期 需要将两个数字相加 相加之前需要先将前三位置零 // 前三个字节是 星期 因此需要将星期向左移5位 后五个字节是日期 需要将两个数字相加 相加之前需要先将前三位置零
bOutput.write((byte) (week << 5) + (calendar.get(Calendar.DAY_OF_MONTH))); bOutput.write((byte) (week << 5) + (calendar.get(Calendar.DAY_OF_MONTH)));
// 前四字节置零 // 前四字节置零
@ -141,15 +141,15 @@ public class ByteUtil {
bOutput.write((byte) (calendar.get(Calendar.YEAR) - 2000)); bOutput.write((byte) (calendar.get(Calendar.YEAR) - 2000));
return bOutput.toByteArray(); return bOutput.toByteArray();
} }
/** /**
* *
* @Title: date2HByte * @Title: date2HByte
* @Description:CP56Time2a转换成 时间 * @Description:CP56Time2a转换成 时间
* @param @param date * @param @param date
* @param @return * @param @return
* @return byte[] * @return byte[]
* @throws * @throws
*/ */
public static Date byte2Hdate(byte[] dataByte) { public static Date byte2Hdate(byte[] dataByte) {

View File

@ -1,4 +1,4 @@
package com.ydl.iec.util; package com.yfd.platform.component.iec104.util;
import com.yfd.platform.component.iec104.message.MessageDetail; import com.yfd.platform.component.iec104.message.MessageDetail;
import com.yfd.platform.component.iec104.enums.TypeIdentifierEnum; import com.yfd.platform.component.iec104.enums.TypeIdentifierEnum;