|
@@ -1,19 +1,30 @@
|
|
|
package wei.yigulu.modbus.netty;
|
|
|
|
|
|
|
|
|
+import com.alibaba.fastjson.JSON;
|
|
|
import io.netty.buffer.ByteBuf;
|
|
|
import io.netty.buffer.Unpooled;
|
|
|
import io.netty.channel.ChannelHandlerContext;
|
|
|
import io.netty.channel.SimpleChannelInboundHandler;
|
|
|
import lombok.NoArgsConstructor;
|
|
|
import org.slf4j.Logger;
|
|
|
+import wei.yigulu.modbus.domain.command.AbstractModbusCommand;
|
|
|
+import wei.yigulu.modbus.domain.command.RtuModbusCommand;
|
|
|
+import wei.yigulu.modbus.domain.command.TcpModbusCommand;
|
|
|
+import wei.yigulu.modbus.domain.confirm.TcpModbusConfirm;
|
|
|
+import wei.yigulu.modbus.domain.datatype.RegisterValue;
|
|
|
+import wei.yigulu.modbus.domain.datatype.UnknownTypeRegisterValue;
|
|
|
+import wei.yigulu.modbus.domain.request.AbstractModbusRequest;
|
|
|
import wei.yigulu.modbus.domain.request.TcpModbusRequest;
|
|
|
+import wei.yigulu.modbus.domain.response.RtuModbusResponse;
|
|
|
import wei.yigulu.modbus.domain.response.TcpModbusResponse;
|
|
|
import wei.yigulu.modbus.exceptiom.ModbusException;
|
|
|
import wei.yigulu.modbus.utils.ModbusResponseDataUtils;
|
|
|
import wei.yigulu.utils.DataConvertor;
|
|
|
|
|
|
import java.net.InetSocketAddress;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.List;
|
|
|
|
|
|
/**
|
|
|
* 消息处理类
|
|
@@ -43,15 +54,28 @@ public class ModbusTcpSlaverHandle extends SimpleChannelInboundHandler<ByteBuf>
|
|
|
public void channelRead0(ChannelHandlerContext ctx, ByteBuf byteBuf) throws Exception {
|
|
|
//收数据
|
|
|
log.debug("re <=" + DataConvertor.ByteBuf2String(byteBuf));
|
|
|
- TcpModbusRequest request = new TcpModbusRequest().decode(byteBuf.nioBuffer());
|
|
|
- TcpModbusResponse response = new TcpModbusResponse();
|
|
|
- response.setTcpExtraCode(request.getTcpExtraCode());
|
|
|
- try {
|
|
|
- byte[] bbs = ModbusResponseDataUtils.buildResponse(this.slaverBuilder.getModbusSlaveDataContainer(), request, response);
|
|
|
+ byte[] bbs = new byte[0];
|
|
|
+ if (AbstractModbusRequest.FUNCTION_CODES.contains(byteBuf.getByte(7))) {
|
|
|
+ TcpModbusRequest request = new TcpModbusRequest().decode(byteBuf.nioBuffer());
|
|
|
+ TcpModbusResponse response = new TcpModbusResponse();
|
|
|
+ response.setTcpExtraCode(request.getTcpExtraCode());
|
|
|
+ try {
|
|
|
+ bbs = ModbusResponseDataUtils.buildResponse(this.slaverBuilder.getModbusSlaveDataContainer(), request, response);
|
|
|
+ } catch (ModbusException e) {
|
|
|
+ log.error(e.getMsg());
|
|
|
+ }
|
|
|
+ }else if (AbstractModbusCommand.FUNCTION_CODES.contains(byteBuf.getByte(7))) {
|
|
|
+ TcpModbusCommand command = new TcpModbusCommand().decode(byteBuf.nioBuffer());
|
|
|
+ TcpModbusConfirm confirm = new TcpModbusConfirm().setTransactionIdentifier(command.getTcpExtraCode().getTransactionIdentifier());
|
|
|
+ try {
|
|
|
+ bbs=slaverBuilder.receiveCommandAndAnswer(command,confirm);
|
|
|
+ } catch (ModbusException e) {
|
|
|
+ log.error(e.getMsg());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (bbs.length>0) {
|
|
|
ctx.writeAndFlush(Unpooled.copiedBuffer(bbs));
|
|
|
log.debug("se =>" + DataConvertor.Byte2String(bbs));
|
|
|
- } catch (ModbusException e) {
|
|
|
- log.error(e.getMsg());
|
|
|
}
|
|
|
}
|
|
|
|