package com.sandu.ximon.admin.manager.iot.frame.inner.response; import cn.hutool.core.util.HexUtil; import cn.hutool.core.util.StrUtil; import com.sandu.ximon.admin.manager.iot.frame.inner.BaseResponseInnerFrame; import com.sandu.ximon.admin.manager.iot.rrpc.util.CRC32Utils; import lombok.Data; import lombok.ToString; /** * @author van * A7-81-01PLC控制 应答 */ @Data @ToString(callSuper = true) public class A7PlcQueryVersionRespInnerFrame extends BaseResponseInnerFrame { /** * 目标地址 2 */ private String destinationAddress; // 硬件版本 private String hardwareVersion; private Double hardwareVersionDouble; // 软件版本 private String softwareVersion; private Double softwareVersionDouble; @Override public A7PlcQueryVersionRespInnerFrame transformFrame(String hex) { if (StrUtil.isBlank(hex)) { return null; } // MQTT通信方式(1) setConnectType(hex.substring(0, 2)); // 功能码(1) setFunctionCode(hex.substring(2, 4)); // 负荷长度(2) setPayloadLength(hex.substring(4, 8)); setDestinationAddress(hex.substring(8, 12)); this.hardwareVersion = hex.substring(12, 16); this.hardwareVersionDouble = Double.parseDouble( HexUtil.hexToInt(this.hardwareVersion.substring(0, 2)) + "." + HexUtil.hexToInt(this.hardwareVersion.substring(2, 4)) ); this.softwareVersion = hex.substring(16,20); this.softwareVersionDouble = Double.parseDouble( HexUtil.hexToInt(this.softwareVersion.substring(0, 2)) + "." + HexUtil.hexToInt(this.softwareVersion.substring(2, 4)) ); setCrc32(hex.substring(20, 28)); // 校验CRC32 String frame = getFunctionCode() + getPayloadLength() + getDestinationAddress() + getHardwareVersion() + getSoftwareVersion(); this.setValidate(CRC32Utils.validateFrame(frame, getCrc32())); return this; } }