package com.sandu.ximon.admin.manager.iot.frame.inner.report; 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 ZZQ * @date 2022/3/14 16:36 * C3充电桩操作指令响应帧 */ @Data @ToString(callSuper = true) public class A5C3OperationReportInnerFrame extends BaseResponseInnerFrame { //MAC地址 private String mac; //响应状态 // 故障码类型表: // 1.通信流程超时 // 2.无电压 // 3.无电流 // 4.无功率 // 5.充电功率过小 // 6.漏电 // 7.设备温度过高 // 8.设备温度过低 // 9.充电超时(充电功率过小导至充电时间超长) // 10.无网络 // 11.连接主机超时 // 12.连接服务器超时 // 13.触摸屏无响应 // 14.更新写入Flash失败 // 15.写入EEProm失败 // 16.市电电压过高警告 // 17.市电电压过底警告 // 18.地锁故障(当前为解锁状态,不能锁上) // 19.地锁故障(当前为锁上状态,不能解锁) // 20.充电口1故障(不能使用) // 21.充电口2故障(不能使用)(暂不用) // 22. 充电口1无法与车机通讯 // 23. 充电口2无法与车机通讯(暂不用) private String state; @Override public A5C3OperationReportInnerFrame transformFrame(String hex) { // 长度不一致时,返回null 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)); //MAC地址 setMac(hex.substring(8, 16)); //硬件交互响应结果 setState(returnState(hex.substring(16, 18))); setCrc32(hex.substring(hex.length() - 8)); // 校验CRC32 String frame = hex.substring(2, hex.length() - 8); this.setValidate(CRC32Utils.validateFrame(frame, getCrc32())); return this; } public String returnState(String stateCode) { String State = ""; switch (stateCode) { case "00": State = "操作成功"; break; case "01": State = "通信流程超时"; break; case "02": State = "无电压"; break; case "03": State = "无电流"; break; case "04": State = "无功率"; break; case "05": State = "充电功率过小"; break; case "06": State = "漏电"; break; case "07": State = "设备温度过高"; break; case "08": State = "设备温度过低"; break; case "09": State = "充电超时(充电功率过小导至充电时间超长)"; break; case "10": State = "无网络"; break; case "11": State = "连接主机超时"; break; case "12": State = "连接服务器超时"; break; case "13": State = "触摸屏无响应"; break; case "14": State = "更新写入Flash失败"; break; case "15": State = "写入EEProm失败"; break; case "16": State = "市电电压过高警告"; break; case "17": State = "市电电压过底警告"; break; case "18": State = "地锁故障(当前为解锁状态,不能锁上)"; break; case "19": State = "地锁故障(当前为锁上状态,不能解锁)"; break; case "20": State = "充电口1故障(不能使用)"; break; case "21": State = "充电口2故障(不能使用)(暂不用)"; break; case "22": State = "充电口1无法与车机通讯"; break; case "23": State = "充电口2无法与车机通讯(暂不用)"; default: } return State; } }