diff --git a/app_protocols/apperrorcode/apperrorcode.hpp b/app_protocols/apperrorcode/apperrorcode.hpp index 0f5609a..2897883 100644 --- a/app_protocols/apperrorcode/apperrorcode.hpp +++ b/app_protocols/apperrorcode/apperrorcode.hpp @@ -17,19 +17,20 @@ namespace err { typedef enum { ksucc = 0, - kappe_begin = 10000, - kappe_code_error = 10001, // 代码错误 - kappe_cmd_not_support = 10003, // 命令不支持 - kappe_parse_json_err = 10004, // 解析json错误 - kappe_std_exception = 10005, // 标准库异常 - kappe_db_operate_error = 10006, // 数据库操作错误 - kappe_missing_param = 10007, // 缺少参数 - kappe_param_num_err = 10008, // 参数个数错误 - kappe_param_value_err = 10009, // 参数值错误 + kappe_begin = 10000, + kappe_code_error = 10001, // 代码错误 + kappe_cmd_not_support = 10003, // 命令不支持 + kappe_parse_json_err = 10004, // 解析json错误 + kappe_std_exception = 10005, // 标准库异常 + kappe_db_operate_error = 10006, // 数据库操作错误 + kappe_missing_param = 10007, // 缺少参数 + kappe_param_num_err = 10008, // 参数个数错误 + kappe_param_value_err = 10009, // 参数值错误 + kappe_device_type_not_init = 10010, // deviceTypeNot kappe_user_not_exist = 10101, // 用户不存在 kappe_passwd_error = 10102, // 密码错误 - kappe_user_exist = 10103, // 用户已存在 + kappe_user_exist = 10103, // 用户已存在 kappe_disinfectant_insufficient = 10201, // 消毒液不足 kappe_the_bottom_of_the_device_has_water = 10202, // 设备底部有水 diff --git a/appsrc/appcomponents/canchannel/com/zscanprotocol_com.cpp b/appsrc/appcomponents/canchannel/com/zscanprotocol_com.cpp index 9b3aac2..a694d31 100644 --- a/appsrc/appcomponents/canchannel/com/zscanprotocol_com.cpp +++ b/appsrc/appcomponents/canchannel/com/zscanprotocol_com.cpp @@ -128,7 +128,7 @@ shared_ptr ZSCanProtocolCom::callcmd(int32_t to, int32_t cmdid, uint8_t } logger->warn("systemctl restart iflytoptdcan.service"); system("systemctl restart iflytoptdcan.service"); - usleep(300 * 1000); + usleep(1000 * 1000); continue; } else if (e.ecode == kerr_subdevice_overtime) { if (i != 0) { diff --git a/appsrc/appconfig/basic/zappversion.hpp b/appsrc/appconfig/basic/zappversion.hpp index a29c454..d08d8ec 100644 --- a/appsrc/appconfig/basic/zappversion.hpp +++ b/appsrc/appconfig/basic/zappversion.hpp @@ -1,3 +1,3 @@ #pragma once -#define VERSION "2.2.6" +#define VERSION "2.2.7" #define PROJECT_NAME "TRANSMIT_DM" \ No newline at end of file diff --git a/appsrc/service/app_core.cpp b/appsrc/service/app_core.cpp index 64054a2..ad6753f 100644 --- a/appsrc/service/app_core.cpp +++ b/appsrc/service/app_core.cpp @@ -110,6 +110,7 @@ static void installEcodeInfo() { AppEcodeInfoMgr::ins().regEcodeInfo(kappe_disinfection_state_is_wrong, "消毒状态错误"); AppEcodeInfoMgr::ins().regEcodeInfo(kappe_liquid_ctrl_reboot, "液路板复位"); AppEcodeInfoMgr::ins().regEcodeInfo(kappe_power_control_reboot, "功率板复位"); + AppEcodeInfoMgr::ins().regEcodeInfo(kappe_device_type_not_init, "设备未初始化"); } void AppCore::initialize() { diff --git a/appsrc/service/hardware/device_io_ctrl_service.cpp b/appsrc/service/hardware/device_io_ctrl_service.cpp index 3f07e89..155e1fb 100644 --- a/appsrc/service/hardware/device_io_ctrl_service.cpp +++ b/appsrc/service/hardware/device_io_ctrl_service.cpp @@ -33,7 +33,12 @@ static bool isInTestMode() { #define CAN_MASTER TransmitDisinfectionCanMaster::ins() #define GET_BOARDID() (ProjectPort::ins().getId(COMPONENT).boardId) #define GET_SUBID() (ProjectPort::ins().getId(COMPONENT).subId) -#define VIRTUAL_DEVICE() (isInTestMode() || !ProjectPort::ins().isDeviceTypeInited()) +#define VIRTUAL_DEVICE() (isInTestMode()) + +#define CHECK_IS_DEVICETYPE_INITED() \ + if (!ProjectPort::ins().isDeviceTypeInited()) { \ + throw appexception(err::kappe_device_type_not_init, "DEVICE TYPE NOT INITED"); \ + } void DeviceIoControlService::initialize() { REG_FN_VOID(AddLiquidPump_addLiquid, void(void)); @@ -227,6 +232,7 @@ int DeviceIoControlService::processReportMsg(uint8_t from, uint8_t *hex, uint32_ // 加液泵控制 #define COMPONENT HardwareComponent::AddLiquidPump int DeviceIoControlService::AddLiquidPump_addLiquid() { + CHECK_IS_DEVICETYPE_INITED(); int pumpspeed = GET_SETTING(int, SettingId::drainage_pump_speed); logger->info(" AddLiquidPump_addLiquid, pumpspeed={}", pumpspeed); @@ -234,19 +240,24 @@ int DeviceIoControlService::AddLiquidPump_addLiquid() { return 0; } int DeviceIoControlService::AddLiquidPump_drainLiquid() { + CHECK_IS_DEVICETYPE_INITED(); + int pumpspeed = GET_SETTING(int, SettingId::drainage_pump_speed); logger->info(" AddLiquidPump_drainLiquid, pumpspeed={}", -pumpspeed); - if (!VIRTUAL_DEVICE()) CAN_MASTER->pumpRotate(GET_BOARDID(), GET_SUBID(), -pumpspeed); return 0; } int DeviceIoControlService::AddLiquidPump_run(int rpm) { + CHECK_IS_DEVICETYPE_INITED(); + logger->info(" AddLiquidPump_run, rpm={}", rpm); if (!VIRTUAL_DEVICE()) CAN_MASTER->pumpRotate(GET_BOARDID(), GET_SUBID(), rpm); return 0; } int DeviceIoControlService::AddLiquidPump_stop() { + CHECK_IS_DEVICETYPE_INITED(); + logger->info(" AddLiquidPump_stop"); if (!VIRTUAL_DEVICE()) CAN_MASTER->pumpStop(GET_BOARDID(), GET_SUBID()); return 0; @@ -256,17 +267,23 @@ int DeviceIoControlService::AddLiquidPump_stop() { // 喷雾泵控制 #define COMPONENT HardwareComponent::SprayPump int DeviceIoControlService::SprayPump_start(int32_t gpm) { + CHECK_IS_DEVICETYPE_INITED(); + int pumpspeed_rpm = ProjectPort::ins().gpm2speed(gpm); logger->info(" SprayPump_start, gpm={}, rpm={}", gpm, pumpspeed_rpm); if (!VIRTUAL_DEVICE()) CAN_MASTER->pumpRotate(GET_BOARDID(), GET_SUBID(), pumpspeed_rpm); return 0; } int DeviceIoControlService::SprayPump_stop() { + CHECK_IS_DEVICETYPE_INITED(); + logger->info(" SprayPump_stop"); if (!VIRTUAL_DEVICE()) CAN_MASTER->pumpStop(GET_BOARDID(), GET_SUBID()); return 0; } int DeviceIoControlService::SprayPump_startInRPM(int32_t rpm) { + CHECK_IS_DEVICETYPE_INITED(); + logger->info(" SprayPump_startInRPM, rpm={}", rpm); if (!VIRTUAL_DEVICE()) CAN_MASTER->pumpRotate(GET_BOARDID(), GET_SUBID(), rpm); return 0; @@ -276,12 +293,16 @@ int DeviceIoControlService::SprayPump_startInRPM(int32_t rpm) { // 鼓风机控制 #define COMPONENT HardwareComponent::Blower int DeviceIoControlService::Blower_ctrl(int power) { + CHECK_IS_DEVICETYPE_INITED(); + logger->info(" Blower_ctrl, power={}", power); if (!VIRTUAL_DEVICE()) CAN_MASTER->blowerCtrl(GET_BOARDID(), power); usleep(1000 * 1000); return 0; } int DeviceIoControlService::Blower_close() { + CHECK_IS_DEVICETYPE_INITED(); + logger->info(" Blower_close"); if (!VIRTUAL_DEVICE()) CAN_MASTER->blowerCtrl(GET_BOARDID(), 0); return 0; @@ -296,23 +317,31 @@ float DeviceIoControlService::Blower_readEI() { // 空压机控制 #define COMPONENT HardwareComponent::AirCompressor int DeviceIoControlService::AC_ctrl(int power) { + CHECK_IS_DEVICETYPE_INITED(); + logger->info(" AC_ctrl, power={}", power); if (!VIRTUAL_DEVICE()) CAN_MASTER->airCompressorCtrl(GET_BOARDID(), power); usleep(1000 * 1000); return 0; } int DeviceIoControlService::AC_ctrlNoDelay(int power) { + CHECK_IS_DEVICETYPE_INITED(); + logger->info(" AC_ctrl, power={}", power); if (!VIRTUAL_DEVICE()) CAN_MASTER->airCompressorCtrl(GET_BOARDID(), power); return 0; } int DeviceIoControlService::AC_close() { + CHECK_IS_DEVICETYPE_INITED(); + logger->info(" AC_close"); if (!VIRTUAL_DEVICE()) CAN_MASTER->airCompressorCtrl(GET_BOARDID(), 0); return 0; } float DeviceIoControlService::AC_readEI() { + CHECK_IS_DEVICETYPE_INITED(); + // logger->info(" AC_readEI"); if (!VIRTUAL_DEVICE()) return CAN_MASTER->airCompressorReadEI(GET_BOARDID()) / 1000.0; return 0; @@ -322,22 +351,30 @@ float DeviceIoControlService::AC_readEI() { // 加热器控制 #define COMPONENT HardwareComponent::Heater int DeviceIoControlService::Heater_ctrl(int power) { + CHECK_IS_DEVICETYPE_INITED(); + logger->info(" Heater_ctrl, power={}", power); if (!VIRTUAL_DEVICE()) CAN_MASTER->heaterCtrl(GET_BOARDID(), power); usleep(1000 * 1000); return 0; } int DeviceIoControlService::Heater_close() { + CHECK_IS_DEVICETYPE_INITED(); + logger->info(" Heater_close"); if (!VIRTUAL_DEVICE()) CAN_MASTER->heaterCtrl(GET_BOARDID(), 0); return 0; } float DeviceIoControlService::Heater_readEI() { + CHECK_IS_DEVICETYPE_INITED(); + // logger->info(" Heater_readEI"); if (!VIRTUAL_DEVICE()) return CAN_MASTER->heaterReadEI(GET_BOARDID()) / 1000.0; return 0; } float DeviceIoControlService::Heater_readTemperature() { + CHECK_IS_DEVICETYPE_INITED(); + // logger->info(" Heater_readTemperature"); if (!VIRTUAL_DEVICE()) return CAN_MASTER->heaterReadTemperature(GET_BOARDID()) / 10.0; return 0; @@ -346,7 +383,9 @@ float DeviceIoControlService::Heater_readTemperature() { // 三色指示灯控制 #define COMPONENT HardwareComponent::WarningLight -int DeviceIoControlService::WarningLight_setState(int r, int g, int b, int warning) { // +int DeviceIoControlService::WarningLight_setState(int r, int g, int b, int warning) { + CHECK_IS_DEVICETYPE_INITED(); + // logger->debug(" WarningLight_setState, r={}, g={}, b={}, warning={}", r, g, b, warning); if (!VIRTUAL_DEVICE()) CAN_MASTER->warningLightSetState(GET_BOARDID(), r, g, b, warning); return 0; @@ -359,13 +398,17 @@ int DeviceIoControlService::WarningLight_setState(int r, int g, int b, int warni // 气密性测试空压机控制 #define COMPONENT HardwareComponent::PositivePressureProportional -int DeviceIoControlService::PosiPressureProp_setValve(int valveValue) { // +int DeviceIoControlService::PosiPressureProp_setValve(int valveValue) { + CHECK_IS_DEVICETYPE_INITED(); + // valveValue = valveValue / 100.0 * 255; logger->info(" PosiPressureProp_setValve, valveValue={}", valveValue); if (!VIRTUAL_DEVICE()) CAN_MASTER->proportionalSetValve(GET_BOARDID(), GET_SUBID(), valveValue); return 0; } int DeviceIoControlService::PosiPressureProp_readPos() { + CHECK_IS_DEVICETYPE_INITED(); + if (!VIRTUAL_DEVICE()) { int pos = CAN_MASTER->proportionalReadPos(GET_BOARDID(), GET_SUBID()); pos = pos / 255.0 * 100; @@ -374,6 +417,8 @@ int DeviceIoControlService::PosiPressureProp_readPos() { return 0; } bool DeviceIoControlService::PosiPressureProp_isBusy() { + CHECK_IS_DEVICETYPE_INITED(); + if (!VIRTUAL_DEVICE()) return CAN_MASTER->proportionalIsBusy(GET_BOARDID(), GET_SUBID()); return false; } @@ -381,12 +426,16 @@ bool DeviceIoControlService::PosiPressureProp_isBusy() { #define COMPONENT HardwareComponent::NegativePressureProportional int DeviceIoControlService::NegaPressureProp_setValve(int valveValue) { + CHECK_IS_DEVICETYPE_INITED(); + valveValue = valveValue / 100.0 * 255; logger->info(" NegaPressureProp_setValve, valveValue={}", valveValue); if (!VIRTUAL_DEVICE()) CAN_MASTER->proportionalSetValve(GET_BOARDID(), GET_SUBID(), valveValue); return 0; } int DeviceIoControlService::NegaPressureProp_readPos() { + CHECK_IS_DEVICETYPE_INITED(); + if (!VIRTUAL_DEVICE()) { int pos = CAN_MASTER->proportionalReadPos(GET_BOARDID(), GET_SUBID()); pos = pos / 255.0 * 100; @@ -395,6 +444,8 @@ int DeviceIoControlService::NegaPressureProp_readPos() { return 0; } bool DeviceIoControlService::NegaPressureProp_isBusy() { + CHECK_IS_DEVICETYPE_INITED(); + if (!VIRTUAL_DEVICE()) return CAN_MASTER->proportionalIsBusy(GET_BOARDID(), GET_SUBID()); return false; } @@ -403,11 +454,15 @@ bool DeviceIoControlService::NegaPressureProp_isBusy() { #define COMPONENT HardwareComponent::AirLeakDetectTestModeCtrl int DeviceIoControlService::AirLeakDetectTestModeCtrl_setMode(AirLeakTestMode mode) { + CHECK_IS_DEVICETYPE_INITED(); + logger->info(" AirLeakDetectTestModeCtrl_setMode, mode={}", mode); if (!VIRTUAL_DEVICE()) CAN_MASTER->airLeakDetectTestSetMode(GET_BOARDID(), mode.getId()); return 0; } AirLeakTestMode DeviceIoControlService::AirLeakDetectTestModeCtrl_getMode() { + CHECK_IS_DEVICETYPE_INITED(); + if (!VIRTUAL_DEVICE()) { int val = CAN_MASTER->airLeakDetectTestGetMode(GET_BOARDID()); return AirLeakTestMode(val); @@ -420,12 +475,16 @@ AirLeakTestMode DeviceIoControlService::AirLeakDetectTestModeCtrl_getMode() { // ExtChSelector #define COMPONENT HardwareComponent::ExtChSelector int DeviceIoControlService::ExtChSelector_selectCh(int ch) { + CHECK_IS_DEVICETYPE_INITED(); + logger->info(" ExtChSelector_selectCh, ch={}", ch); if (!VIRTUAL_DEVICE()) CAN_MASTER->extChSelectorSetCh(GET_BOARDID(), ch); return 0; } bool DeviceIoControlService::ExtChSelector_isOnline() { + CHECK_IS_DEVICETYPE_INITED(); + if (!VIRTUAL_DEVICE()) { try { CAN_MASTER->extChSelectorGetCh(GET_BOARDID()); @@ -437,6 +496,8 @@ bool DeviceIoControlService::ExtChSelector_isOnline() { return false; } int DeviceIoControlService::ExtChSelector_trySelectCh(int ch) { + CHECK_IS_DEVICETYPE_INITED(); + logger->info(" ExtChSelector_trySelectCh, ch={}", ch); if (!VIRTUAL_DEVICE()) { try { @@ -454,6 +515,8 @@ int DeviceIoControlService::ExtChSelector_trySelectCh(int ch) { // 蒸发仓水浸 #define COMPONENT HardwareComponent::EvaporationBinWS bool DeviceIoControlService::WaterSensor_readEvaporationBin() { + CHECK_IS_DEVICETYPE_INITED(); + if (!VIRTUAL_DEVICE()) return CAN_MASTER->evaporationTankWSReadState(GET_BOARDID()); return false; } @@ -461,13 +524,17 @@ bool DeviceIoControlService::WaterSensor_readEvaporationBin() { #define COMPONENT HardwareComponent::DeviceBottomWS bool DeviceIoControlService::WaterSensor_readDeviceBottom() { + CHECK_IS_DEVICETYPE_INITED(); + if (!VIRTUAL_DEVICE()) return CAN_MASTER->bottomWSReadState(GET_BOARDID()); return false; } // 设备底部水浸 #undef COMPONENT #define COMPONENT HardwareComponent::ACPostPS -int DeviceIoControlService::ACPostPS_readPa() { // +int DeviceIoControlService::ACPostPS_readPa() { + CHECK_IS_DEVICETYPE_INITED(); + // if (!VIRTUAL_DEVICE()) { int32_t val = CAN_MASTER->psBusReadData(GET_BOARDID(), GET_SUBID()); return ProjectPort::ins().ACPostPS_To_Pa(val); @@ -477,7 +544,9 @@ int DeviceIoControlService::ACPostPS_readPa() { // #undef COMPONENT #define COMPONENT HardwareComponent::AirLeakDetectPS -int DeviceIoControlService::AirLeakDetectPS_readPa() { // +int DeviceIoControlService::AirLeakDetectPS_readPa() { + CHECK_IS_DEVICETYPE_INITED(); + // if (!VIRTUAL_DEVICE()) { int32_t val = CAN_MASTER->psBusReadData(GET_BOARDID(), GET_SUBID()); return ProjectPort::ins().AirLeakDetectPS_To_Pa(val); @@ -487,7 +556,9 @@ int DeviceIoControlService::AirLeakDetectPS_readPa() { // #undef COMPONENT #define COMPONENT HardwareComponent::LiquidWeightPS -int DeviceIoControlService::LiquidWeightPS_readPa() { // +int DeviceIoControlService::LiquidWeightPS_readPa() { + CHECK_IS_DEVICETYPE_INITED(); + // if (!VIRTUAL_DEVICE()) { int32_t val = CAN_MASTER->psBusReadData(GET_BOARDID(), GET_SUBID()); return ProjectPort::ins().LiquidWeightPS_To_Pa(val);