|
|
@ -27,24 +27,27 @@ public class ModbusConverter { |
|
|
|
short register = (short) ccModBusEntity.getRegisterStartAddr(); |
|
|
|
|
|
|
|
byte oper = (byte) (ccModBusEntity.getOper() & 0xFF); |
|
|
|
MessageConstant.Register type = MessageConstant.Register.valueOf(data[0], data[1] ); |
|
|
|
if (type == null) { |
|
|
|
message = new InMessage(); |
|
|
|
message.setData(JacksonUtil.beanToJson(new ModBusMessage(register,oper,ccModBusEntity.getModbusData()))); |
|
|
|
message.setToDomain(MessageConstant.DomainType.Server); |
|
|
|
return message; |
|
|
|
} |
|
|
|
switch (type) { |
|
|
|
case Ping: { |
|
|
|
message = toHeartMessage(register,oper,ccModBusEntity.getValue()); |
|
|
|
// MessageConstant.Register type = MessageConstant.Register.valueOf(data[0], data[1] );
|
|
|
|
// if (type == null) {
|
|
|
|
// message = new InMessage();
|
|
|
|
// message.setData(JacksonUtil.beanToJson(new ModBusMessage(register,oper,ccModBusEntity.getModbusData())));
|
|
|
|
// message.setToDomain(MessageConstant.DomainType.Server);
|
|
|
|
// return message;
|
|
|
|
// }
|
|
|
|
switch (oper) { |
|
|
|
case CCModBusEntity.Oper.PING: { |
|
|
|
message = toHeartMessage(); |
|
|
|
break; |
|
|
|
} |
|
|
|
case Auth:{ |
|
|
|
message = toAuthMessage(register,oper,ccModBusEntity.getValue()); |
|
|
|
case CCModBusEntity.Oper.AUTH:{ |
|
|
|
message = toAuthMessage(register,ccModBusEntity.getValue()); |
|
|
|
break; |
|
|
|
} |
|
|
|
default:{ |
|
|
|
message = null; |
|
|
|
// 读写操作
|
|
|
|
message = new InMessage(); |
|
|
|
message.setData(JacksonUtil.beanToJson(new ModBusMessage(ccModBusEntity.getAddr(), register,oper,ccModBusEntity.getModbusData()))); |
|
|
|
message.setToDomain(MessageConstant.DomainType.Server); |
|
|
|
} |
|
|
|
} |
|
|
|
return message; |
|
|
@ -70,11 +73,10 @@ public class ModbusConverter { |
|
|
|
// }
|
|
|
|
|
|
|
|
/** |
|
|
|
* OriginaData ==> 0x00 |
|
|
|
* @param oper |
|
|
|
* 心跳 |
|
|
|
* @return |
|
|
|
*/ |
|
|
|
private static InMessage toHeartMessage(short addr, int oper, byte[] originData) throws JsonProcessingException { |
|
|
|
private static InMessage toHeartMessage() throws JsonProcessingException { |
|
|
|
InMessage message = new InMessage(); |
|
|
|
PingMessage serverMessage = new PingMessage(); |
|
|
|
message.setData(JacksonUtil.beanToJson(serverMessage)); |
|
|
@ -88,20 +90,25 @@ public class ModbusConverter { |
|
|
|
|
|
|
|
/** |
|
|
|
* OriginaData ==> 0x00 0x00 0x00 0x64 |
|
|
|
* @param oper |
|
|
|
* 授权 |
|
|
|
* @param register 业务类型 |
|
|
|
* @param values 授权数据 主版本 次版本 授权ID |
|
|
|
* @return |
|
|
|
*/ |
|
|
|
private static InMessage toAuthMessage(short register, int oper, byte[] values) throws JsonProcessingException { |
|
|
|
private static InMessage toAuthMessage(short register, byte[] values) throws JsonProcessingException { |
|
|
|
|
|
|
|
if (values == null || values.length < 3) { |
|
|
|
return null; |
|
|
|
} |
|
|
|
byte major = values[CCModBusEntity.SIZE_MAJOR]; |
|
|
|
byte minor = values[CCModBusEntity.SIZE_MINOR]; |
|
|
|
long userId = 0; |
|
|
|
for(int i=0;i<CCModBusEntity.SIZE_DATA_SINGLE;i++){ |
|
|
|
for(int i=CCModBusEntity.SIZE_MAJOR+CCModBusEntity.SIZE_MINOR;i<values.length;i++){ |
|
|
|
userId <<= 8; |
|
|
|
userId |= values[i] & 0xFF; |
|
|
|
} |
|
|
|
// TODO 此处如何传参? 参数仅为authid
|
|
|
|
AuthMessage message = new AuthMessage(userId); |
|
|
|
|
|
|
|
message.setMessage("{\""+register+"\":" + userId + "}"); |
|
|
|
AuthMessage message = new AuthMessage(userId, major, minor); |
|
|
|
InMessage inMessage = new InMessage(); |
|
|
|
inMessage.setData(JacksonUtil.beanToJson(message)); |
|
|
|
inMessage.setToDomain(MessageConstant.DomainType.Server); |
|
|
@ -130,6 +137,11 @@ public class ModbusConverter { |
|
|
|
ccModBusEntity = fromAuthMessage(); |
|
|
|
break; |
|
|
|
} |
|
|
|
// 没有权限(未认证)
|
|
|
|
case UnAuth:{ |
|
|
|
ccModBusEntity = fromUnAuthMessage(); |
|
|
|
break; |
|
|
|
} |
|
|
|
case Ack:{ |
|
|
|
|
|
|
|
ccModBusEntity = fromModBusMessage(JacksonUtil.jsonToBean(outMessage.getData(), ModBusAckMessage.class)); |
|
|
@ -179,21 +191,31 @@ public class ModbusConverter { |
|
|
|
return ccModBusEntity; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 返回客户端的授权信息转成CCModBus协议 |
|
|
|
* @return CCModBusEntity |
|
|
|
*/ |
|
|
|
private static CCModBusEntity fromAuthMessage() { |
|
|
|
byte []originData = new byte[CCModBusEntity.SIZE_REGISTER_START + CCModBusEntity.SIZE_REGISTER_NUM]; |
|
|
|
// 寄存器起始地址
|
|
|
|
originData[0] = MessageConstant.Register.Auth.first; |
|
|
|
originData[1] = MessageConstant.Register.Auth.second; |
|
|
|
// 寄存器数量
|
|
|
|
originData[2] = 0x00; |
|
|
|
originData[3] = 0x01; |
|
|
|
byte []originData = {}; |
|
|
|
|
|
|
|
byte addr = CCModBusEntity.ADDRESS; |
|
|
|
byte oper = CCModBusEntity.Oper.WRITE_MORE; |
|
|
|
byte oper = CCModBusEntity.Oper.AUTH; |
|
|
|
CCModBusEntity ccModBusEntity = new CCModBusEntity(addr,oper,originData); |
|
|
|
return ccModBusEntity; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 返回客户端的授权信息转成CCModBus协议 |
|
|
|
* @return CCModBusEntity |
|
|
|
*/ |
|
|
|
private static CCModBusEntity fromUnAuthMessage() { |
|
|
|
byte []originData = {}; |
|
|
|
|
|
|
|
byte addr = CCModBusEntity.ADDRESS; |
|
|
|
byte oper = CCModBusEntity.Oper.UN_AUTH; |
|
|
|
CCModBusEntity ccModBusEntity = new CCModBusEntity(addr,oper,originData); |
|
|
|
return ccModBusEntity; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* OriginalData: 0x00 |
|
|
@ -201,16 +223,10 @@ public class ModbusConverter { |
|
|
|
* @return |
|
|
|
*/ |
|
|
|
private static CCModBusEntity fromHeartMessage(PongMessage message){ |
|
|
|
byte []originData = new byte[CCModBusEntity.SIZE_REGISTER_START + CCModBusEntity.SIZE_REGISTER_NUM]; |
|
|
|
// 寄存器起始地址
|
|
|
|
originData[0] = MessageConstant.Register.Ping.first; |
|
|
|
originData[1] = MessageConstant.Register.Ping.second; |
|
|
|
// 寄存器数量
|
|
|
|
originData[2] = 0x00; |
|
|
|
originData[3] = 0x01; |
|
|
|
byte []originData = {}; |
|
|
|
|
|
|
|
byte addr = CCModBusEntity.ADDRESS; |
|
|
|
byte oper = CCModBusEntity.Oper.WRITE_MORE; |
|
|
|
byte oper = CCModBusEntity.Oper.PONG; |
|
|
|
CCModBusEntity ccModBusEntity = new CCModBusEntity(addr,oper,originData); |
|
|
|
return ccModBusEntity; |
|
|
|
} |
|
|
|