You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
64 lines
2.5 KiB
64 lines
2.5 KiB
package com.mh.common.utils; |
|
|
|
import com.mh.common.core.domain.entity.CollectionParamsManage; |
|
import io.netty.buffer.ByteBuf; |
|
import io.netty.channel.ChannelHandlerContext; |
|
import lombok.extern.slf4j.Slf4j; |
|
|
|
/** |
|
* @author ljf |
|
* @title : |
|
* @description : 发送指令工具类 |
|
* @updateTime 2021-01-26 |
|
* @throws : |
|
*/ |
|
@Slf4j |
|
public class SendOrderUtils { |
|
|
|
// 发送所有类型采集报文 |
|
public static void sendAllOrder(CollectionParamsManage paramsManage, ChannelHandlerContext ctx, int num, int size) { |
|
// 开始创建指令 |
|
String mtCode = paramsManage.getMtCode(); // 采集编号 |
|
String funCode = paramsManage.getFuncCode(); // 功能码 |
|
String registerAddr = paramsManage.getRegisterAddr(); // 寄存器地址 |
|
String registerNum = String.valueOf(paramsManage.getRegisterSize()); // 寄存器数量 |
|
// 拼接指令 |
|
String sendOrderStr = ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.decToHex(mtCode), 2) |
|
+ ExchangeStringUtil.addZeroForNum(funCode, 2) |
|
+ ExchangeStringUtil.addZeroForNum(registerAddr, 4) |
|
+ ExchangeStringUtil.addZeroForNum(registerNum, 4); |
|
byte[] strOrder = ExchangeStringUtil.hexStrToBinaryStr(sendOrderStr); |
|
int checkNum = CRC16.CRC16_MODBUS(strOrder); |
|
String checkWord = ExchangeStringUtil.decToHex(String.valueOf(checkNum)); |
|
checkWord = checkWord.substring(2, 4) + checkWord.substring(0, 2); |
|
sendOrderStr = sendOrderStr + checkWord; |
|
ByteBuf buffer = getByteBuf(ctx, sendOrderStr); |
|
// 发送数据 |
|
ctx.channel().writeAndFlush(buffer); |
|
log.info("sends :" + sendOrderStr + ",num:" + num + ",records:" + size); |
|
try { |
|
Thread.sleep(500); |
|
} catch (InterruptedException e) { |
|
log.error("线程休眠异常", e); |
|
} |
|
} |
|
|
|
private static ByteBuf getByteBuf(ChannelHandlerContext ctx, String sendStr) { |
|
// 申请一个数据结构存储信息 |
|
ByteBuf buffer = ctx.alloc().buffer(); |
|
// 将信息放入数据结构中 |
|
buffer.writeBytes(ExchangeStringUtil.hexStrToBinaryStr(sendStr));//对接需要16进制 |
|
return buffer; |
|
} |
|
|
|
public static void sendOrderToDTU(ChannelHandlerContext ctx, String sendStr) { |
|
ByteBuf buffer = getByteBuf(ctx, sendStr); |
|
// 发送数据 |
|
ctx.channel().writeAndFlush(buffer); |
|
try { |
|
Thread.sleep(500); |
|
} catch (InterruptedException e) { |
|
log.error("线程休眠异常", e); |
|
} |
|
} |
|
}
|
|
|