package com.dy.pipirrComCreator.p206V1; import com.dy.common.mw.protocol.p206V1.parse.global.GlCreate; import com.dy.common.util.ByteUtil; import com.dy.common.util.ByteUtilUnsigned; import com.dy.common.util.IPUtils; import com.dy.common.util.NumUtil; /** * @Author: liurunyu * @Date: 2025/5/7 11:25 * @Description */ public class P206V1Cd21 extends P206V1Cd { public static final String ComCode = "21" ; public String checkParams(String ...params){ if(params.length != 2){ return "只有IP和端口两个参数" ; } if(!IPUtils.ipValid(params[0])){ return "IP地址不正确" ; } if(IPUtils.internalIp(params[0])){ return "IP地址必须是外网IP" ; } if(!NumUtil.isPlusIntNumber(params[1])){ return "端口号必须是正整数" ; } int port = Integer.parseInt(params[1]) ; if(port < 1 || port > 65535){ return "端口号必须在1-65535之间" ; } return null ; } public String helpInfo() { return ComCode + " *...* *...*[Enter](设置服务端IP和端口)" ; } /** * 构造命令数据(十六进制) * @return 字符串 * @throws Exception 异常 */ public String hex(String rtuAddr, String ...params) throws Exception { byte[] bytes = bs(rtuAddr, params) ; return ByteUtil.bytes2Hex(bytes, false) ; } /** * 构造命令数据(字节数组) * @return 字节数组 * @throws Exception 异常 */ public byte[] bs(String rtuAddr, String ...params) throws Exception { byte[] bytes = createHead(rtuAddr, ComCode, P206V1Cd.CTRL); byte n = 0 ; byte[] bs = new byte[14] ; String[] ip = params[0].split("\\.") ; ByteUtilUnsigned.byte2Byte(bs, Byte.parseByte(ip[0]), n++); ByteUtilUnsigned.byte2Byte(bs, Byte.parseByte(ip[1]), n++); ByteUtilUnsigned.byte2Byte(bs, Byte.parseByte(ip[2]), n++); ByteUtilUnsigned.byte2Byte(bs, Byte.parseByte(ip[3]), n++); ByteUtilUnsigned.short2Bytes_LE(bs, Short.parseShort(params[1]), n); n += 2 ; GlCreate.createPw(bs, n); n += 2 ; GlCreate.createTp(bs, n); bytes = ByteUtil.bytesMerge(bytes, bs); GlCreate.createLen(bytes);//长度放字节数组中 byte[] bsTail = GlCreate.createCrcTail4P206(bytes) ;//CRC和尾叠加字节数组中 bytes = ByteUtil.bytesMerge(bytes, bsTail) ; return bytes ; } public static void main(String[] args) throws Exception { String[] ps = new String[]{"1.2.3.4", "123"} ; new P206V1Cd21().hex("530115059980", ps) ; } }