diff --git a/core/Publisher.cxx b/core/Publisher.cxx index 015eef3..b351071 100644 --- a/core/Publisher.cxx +++ b/core/Publisher.cxx @@ -336,6 +336,7 @@ bool PublisherApp::print_receipt(const std::map& msg) void PublisherApp::run() { uint8_t send_sum = 0; + uint8_t is_print = 0; std::string license_no = ""; float stable_weight = 0; @@ -355,7 +356,7 @@ void PublisherApp::run() if (license_no == "") { - license_no = info.NewTag(); + license_no = info.License(); } } else if (!DdsMsgData::ScaleInfo_queue_.empty()) @@ -383,6 +384,14 @@ void PublisherApp::run() if (info.HasVehicle() == 0) { license_no = ""; + if (is_print == 1) + { + std::this_thread::sleep_for(std::chrono::seconds(5)); + std::map ctrl; + ctrl["FrontBar"] = "down"; + bar_ctrl(ctrl); + is_print = 0; + } } } else if (!DdsMsgData::BarUpdate_queue_.empty()) @@ -451,8 +460,14 @@ void PublisherApp::run() print_msg["OUTCoalYard"] = info.OutCoalYard(); print_msg["BatchNumber"] = info.BatchNumber(); print_msg["Warning"] = info.Warning(); + print_msg["TicketType"] = info.TicketType(); print_receipt(print_msg); + + is_print = 1; + std::map ctrl; + ctrl["FrontBar"] = "up"; + bar_ctrl(ctrl); } } else if (!DdsMsgData::WeightInfoError_queue_.empty()) @@ -461,6 +476,7 @@ void PublisherApp::run() DdsMsgData::WeightInfoError_queue_.pop(); dds_lock.unlock(); + std::this_thread::sleep_for(std::chrono::seconds(3)); send_sum = 0; } else diff --git a/gatectrl/MsgHandler.cxx b/gatectrl/MsgHandler.cxx index 78625a2..bf5786f 100644 --- a/gatectrl/MsgHandler.cxx +++ b/gatectrl/MsgHandler.cxx @@ -26,9 +26,12 @@ MsgHandler::MsgHandler() : fd(-1) this->new_bar_state.FrontResistanceSignal = UNBLOCK; this->new_bar_state.BackResistanceSignal = UNBLOCK; - this->old_bar_state = this->new_bar_state; - this->old_bar_state.FrontResistanceSignal = BLOCK; - this->old_bar_state.BackResistanceSignal = BLOCK; + this->old_bar_state.FrontBarState = 0xFF; + this->old_bar_state.BackBarState = 0xFF; + this->old_bar_state.FrontLEDState = 0xFF; + this->old_bar_state.BackLEDState = 0xFF; + this->old_bar_state.FrontResistanceSignal = 0xFF; + this->old_bar_state.BackResistanceSignal = 0xFF; } void MsgHandler::HandleDdsMsg(const std::map& msg) diff --git a/mqttdds/Publisher.cxx b/mqttdds/Publisher.cxx index 686e9be..a9dcc87 100644 --- a/mqttdds/Publisher.cxx +++ b/mqttdds/Publisher.cxx @@ -335,6 +335,8 @@ bool PublisherApp::print_receipt(const std::map& msg) return true; } +extern std::string mqtt_topic_id; + void PublisherApp::run(std::shared_ptr dev) { while (!is_stopped()) @@ -351,6 +353,19 @@ void PublisherApp::run(std::shared_ptr dev) // DEBUG("车牌: " << info.License()); // DEBUG("类型: " << info.NewTag()); + + if (dev != nullptr) + { + if (dev->is_connected()) + { + std::string payload = "{\"value\": \"" + info.License() + "\"}"; + + auto mqtt_msg = mqtt::make_message("pound/" + std::string(mqtt_topic_id) + "/licensesnap/license", payload); + mqtt_msg->set_qos(0); + mqtt_msg->set_retained(true); + dev->publish(mqtt_msg); + } + } } else if (!DdsMsgData::ScaleInfo_queue_.empty()) { @@ -363,6 +378,25 @@ void PublisherApp::run(std::shared_ptr dev) // DEBUG("设备状态: " << info.State()); // DEBUG("实时重量: " << info.Value()); // DEBUG("稳定重量: " << info.StableValue()); + + if (dev != nullptr) + { + if (dev->is_connected()) + { + std::string payload = "{\"value\": " + std::to_string(info.Value()) + "}"; + auto mqtt_msg = mqtt::make_message("pound/" + std::string(mqtt_topic_id) + "/scale/weight", payload); + mqtt_msg->set_qos(0); + mqtt_msg->set_retained(true); + dev->publish(mqtt_msg); + + std::this_thread::sleep_for(std::chrono::milliseconds(100)); + payload = "{\"value\": " + std::to_string(info.StableValue()) + "}"; + mqtt_msg = mqtt::make_message("pound/" + std::string(mqtt_topic_id) + "/scale/stableweight", payload); + mqtt_msg->set_qos(0); + mqtt_msg->set_retained(true); + dev->publish(mqtt_msg); + } + } } else if (!DdsMsgData::BarUpdate_queue_.empty()) { @@ -370,20 +404,15 @@ void PublisherApp::run(std::shared_ptr dev) DdsMsgData::BarUpdate_queue_.pop(); dds_lock.unlock(); - // DEBUG("前拦车器状态: " << info.FrontBarState()); - // DEBUG("后拦车器状态: " << info.BackBarState()); - if (dev != nullptr) { if (dev->is_connected()) { - json j; - j["bar_state"]["FrontBar"] = info.FrontBarState(); - j["bar_state"]["BackBar"] = info.BackBarState(); + std::string payload = "{\"value\": " + std::to_string(info.FrontBarState()) + "}"; - auto mqtt_msg = mqtt::make_message("response", j.dump()); + auto mqtt_msg = mqtt::make_message("pound/" + std::string(mqtt_topic_id) +"/barrier/frontstatus", payload); mqtt_msg->set_qos(0); - mqtt_msg->set_retained(false); + mqtt_msg->set_retained(true); dev->publish(mqtt_msg); } } @@ -394,20 +423,15 @@ void PublisherApp::run(std::shared_ptr dev) DdsMsgData::LightsUpdate_queue_.pop(); dds_lock.unlock(); - // DEBUG("前红绿灯状态: " << info.FrontLEDState()); - // DEBUG("后红绿灯状态: " << info.BackLEDState()); - if (dev != nullptr) { if (dev->is_connected()) { - json j; - j["light_state"]["FrontLED"] = info.FrontLEDState(); - j["light_state"]["BackLED"] = info.FrontLEDState(); + std::string payload = "{\"value\": " + std::to_string(info.FrontLEDState()) + "}"; - auto mqtt_msg = mqtt::make_message("response", j.dump()); + auto mqtt_msg = mqtt::make_message("pound/" + std::string(mqtt_topic_id) +"/light/frontstatus ", payload); mqtt_msg->set_qos(0); - mqtt_msg->set_retained(false); + mqtt_msg->set_retained(true); dev->publish(mqtt_msg); } } @@ -418,20 +442,15 @@ void PublisherApp::run(std::shared_ptr dev) DdsMsgData::InfraredUpdate_queue_.pop(); dds_lock.unlock(); - // DEBUG("前红外对射状态: " << info.FrontResistanceSignal()); - // DEBUG("后红外对射状态: " << info.BackResistanceSignal()); - if (dev != nullptr) { if (dev->is_connected()) { - json j; - j["infrared_state"]["FrontResistance"] = info.FrontResistanceSignal(); - j["infrared_state"]["BackResistance"] = info.BackResistanceSignal(); + std::string payload = "{\"value\": " + std::to_string(info.FrontResistanceSignal()) + "}"; - auto mqtt_msg = mqtt::make_message("response", j.dump()); + auto mqtt_msg = mqtt::make_message("pound/" + std::string(mqtt_topic_id) +"/infrared/frontvalue", payload); mqtt_msg->set_qos(0); - mqtt_msg->set_retained(false); + mqtt_msg->set_retained(true); dev->publish(mqtt_msg); } } @@ -452,17 +471,43 @@ void PublisherApp::run(std::shared_ptr dev) MqttMsgData::Mqtt_msg_queue_.pop(); mqtt_lock.unlock(); - json cmd = json::parse(msg->to_string()); + std::string topic = msg->get_topic(); + std::string payload = msg->to_string(); - if (cmd.contains("bar_ctrl")) + json cmd = json::parse(payload); + + if (topic.find("barrier/frontup") != std::string::npos) + { + if (cmd["value"] == 1) + { + std::map ctrl; + ctrl["FrontBar"] = "up"; + bar_ctrl(ctrl); + } + } + else if (topic.find("barrier/frontdown") != std::string::npos) { - std::map ctrl = cmd["bar_ctrl"].get>(); - bar_ctrl(ctrl); + if (cmd["value"] == 1) + { + std::map ctrl; + ctrl["FrontBar"] = "down"; + bar_ctrl(ctrl); + } } - else if (cmd.contains("light_ctrl")) + else if (topic.find("light/frontsignal") != std::string::npos) { - std::map ctrl = cmd["light_ctrl"].get>(); - light_ctrl(ctrl); + if (cmd["value"] == 1) + { + std::map ctrl; + ctrl["FrontLED"] = "red"; + light_ctrl(ctrl); + } + else + { + std::map ctrl; + ctrl["FrontLED"] = "green"; + light_ctrl(ctrl); + } } } else diff --git a/mqttdds/main.cxx b/mqttdds/main.cxx index be1cb7d..0ded6f4 100644 --- a/mqttdds/main.cxx +++ b/mqttdds/main.cxx @@ -128,6 +128,8 @@ std::mutex DdsMsgData::queue_cv_mtx_; std::queue MqttMsgData::Mqtt_msg_queue_; std::mutex MqttMsgData::queue_cv_mtx_; +std::string mqtt_topic_id = "0"; + int main(int argc, char** argv) { auto ret = EXIT_SUCCESS; @@ -139,8 +141,8 @@ int main(int argc, char** argv) std::string mqtt_server; std::string mqtt_username = "admin"; std::string mqtt_password = "admin"; - std::string mqtt_id = "core_0"; - const std::vector topic = {"command"}; + std::string mqtt_id = "MqttDds_0"; + std::vector topic; const std::vector qos = {0}; for (int i = 1; i < argc; i++) @@ -148,7 +150,8 @@ int main(int argc, char** argv) if (strcmp(argv[i], "--domain") == 0 && i + 1 < argc) { domain_id = atoi(argv[++i]); - mqtt_id = std::string("core_") + std::string(argv[i]); + mqtt_id = std::string("MqttDds_") + std::string(argv[i]); + mqtt_topic_id = std::string(argv[i]); } else if (strcmp(argv[i], "--addr") == 0 && i + 1 < argc) { @@ -210,6 +213,7 @@ int main(int argc, char** argv) .clean_session(false) .finalize(); + topic.push_back("pound/" + mqtt_topic_id + "/#"); cb = std::make_shared(*dev, topic, qos); dev->set_callback(*cb); diff --git a/print/MsgHandler.cxx b/print/MsgHandler.cxx index 7a46695..362e333 100644 --- a/print/MsgHandler.cxx +++ b/print/MsgHandler.cxx @@ -640,7 +640,6 @@ void MsgHandler::Print1_3(const std::map& msg) m_newObj[1] = ("├"); m_newObj[6] = ("┼"); - m_newObj[17] = ("┬"); m_newObj[23] = ("┤"); blTemp = BuildLine(24,m_newObj); m_PrintData.insert(m_PrintData.end(), blTemp.begin(), blTemp.end()); @@ -666,320 +665,388 @@ void MsgHandler::Print1_3(const std::map& msg) m_newObj[1] = ("├"); m_newObj[6] = ("┼"); + m_newObj[17] = ("┬"); m_newObj[23] = ("┤"); blTemp = BuildLine(24,m_newObj); m_PrintData.insert(m_PrintData.end(), blTemp.begin(), blTemp.end()); m_PrintData.insert(m_PrintData.end(), {0x0A}); - //=========毛重====================== - m_newObj.clear(); - m_newObj[1] = ("│"); - m_newObj[26] = ("毛重"); - m_newObj[120] = ("│"); - - it = msg.find("GrossWeight"); - if(it != msg.end()) + //=========磅单类型====================== + it = msg.find("TicketType"); + if (it->second == "1") { - m_newObj[145] = it->second; - } - - m_newObj[384] = ("│"); - m_newObj[404] = ("吨"); - - m_newObj[528] = ("│"); - blTemp = BuildStringLine(m_newObj); - m_PrintData.insert(m_PrintData.end(), blTemp.begin(), blTemp.end()); - m_PrintData.insert(m_PrintData.end(), {0x0A}); - + //=========毛重====================== - m_newObj.clear(); - m_newObj[1] = ("├"); - m_newObj[6] = ("┼"); - m_newObj[17] = ("┼"); - m_newObj[23] = ("┤"); - blTemp = BuildLine(24,m_newObj); - m_PrintData.insert(m_PrintData.end(), blTemp.begin(), blTemp.end()); - m_PrintData.insert(m_PrintData.end(), {0x0A}); + m_newObj.clear(); + m_newObj[1] = ("│"); + m_newObj[26] = ("一次称重"); + m_newObj[120] = ("│"); - //=========毛重操作员====================== + it = msg.find("GrossWeight"); + if (it != msg.end()) + { + m_newObj[145] = it->second; + } - m_newObj.clear(); - m_newObj[1] = ("│"); - m_newObj[26] = ("操作员"); - m_newObj[120] = ("│"); + m_newObj[384] = ("│"); + m_newObj[404] = ("吨"); - it = msg.find("GrossOperater"); - if(it != msg.end()) - { - m_newObj[145] = it->second; - } + m_newObj[528] = ("│"); + blTemp = BuildStringLine(m_newObj); + m_PrintData.insert(m_PrintData.end(), blTemp.begin(), blTemp.end()); + m_PrintData.insert(m_PrintData.end(), {0x0A}); - m_newObj[384] = ("│"); - m_newObj[404] = ("吨"); + m_newObj.clear(); + m_newObj[1] = ("├"); + m_newObj[6] = ("┼"); + m_newObj[17] = ("┴"); + m_newObj[23] = ("┤"); + blTemp = BuildLine(24, m_newObj); + m_PrintData.insert(m_PrintData.end(), blTemp.begin(), blTemp.end()); + m_PrintData.insert(m_PrintData.end(), {0x0A}); - m_newObj[528] = ("│"); - blTemp = BuildStringLine(m_newObj); - m_PrintData.insert(m_PrintData.end(), blTemp.begin(), blTemp.end()); - m_PrintData.insert(m_PrintData.end(), {0x0A}); + //=========毛重操作员====================== + m_newObj.clear(); + m_newObj[1] = ("│"); + m_newObj[26] = ("操作员"); + m_newObj[120] = ("│"); - m_newObj.clear(); - m_newObj[1] = ("├"); - m_newObj[6] = ("┼"); - m_newObj[17] = ("┼"); - m_newObj[23] = ("┤"); - blTemp = BuildLine(24,m_newObj); - m_PrintData.insert(m_PrintData.end(), blTemp.begin(), blTemp.end()); - m_PrintData.insert(m_PrintData.end(), {0x0A}); - - //=========毛重时间====================== + it = msg.find("GrossOperater"); + if (it != msg.end()) + { + m_newObj[145] = it->second; + } - m_newObj.clear(); - m_newObj[1] = ("│"); - m_newObj[26] = ("毛重时间"); - m_newObj[120] = ("│"); + m_newObj[528] = ("│"); + blTemp = BuildStringLine(m_newObj); + m_PrintData.insert(m_PrintData.end(), blTemp.begin(), blTemp.end()); + m_PrintData.insert(m_PrintData.end(), {0x0A}); - it = msg.find("GrossTime"); - if(it != msg.end()) - { - m_newObj[145] = it->second; - } + m_newObj.clear(); + m_newObj[1] = ("├"); + m_newObj[6] = ("┼"); + m_newObj[23] = ("┤"); + blTemp = BuildLine(24, m_newObj); + m_PrintData.insert(m_PrintData.end(), blTemp.begin(), blTemp.end()); + m_PrintData.insert(m_PrintData.end(), {0x0A}); - m_newObj[384] = ("│"); - m_newObj[404] = ("吨"); + //=========毛重时间====================== - m_newObj[528] = ("│"); - blTemp = BuildStringLine(m_newObj); - m_PrintData.insert(m_PrintData.end(), blTemp.begin(), blTemp.end()); - m_PrintData.insert(m_PrintData.end(), {0x0A}); + m_newObj.clear(); + m_newObj[1] = ("│"); + m_newObj[26] = ("称重时间"); + m_newObj[120] = ("│"); + it = msg.find("GrossTime"); + if (it != msg.end()) + { + m_newObj[145] = it->second; + } - m_newObj.clear(); - m_newObj[1] = ("├"); - m_newObj[6] = ("┼"); - m_newObj[17] = ("┼"); - m_newObj[23] = ("┤"); - blTemp = BuildLine(24,m_newObj); - m_PrintData.insert(m_PrintData.end(), blTemp.begin(), blTemp.end()); - m_PrintData.insert(m_PrintData.end(), {0x0A}); - - //=========皮重====================== - - m_newObj.clear(); - m_newObj[1] = ("│"); - m_newObj[26] = ("皮重"); - m_newObj[120] = ("│"); - - it = msg.find("TareWeight"); - if(it != msg.end()) - { - m_newObj[145] = it->second; + m_newObj[528] = ("│"); + blTemp = BuildStringLine(m_newObj); + m_PrintData.insert(m_PrintData.end(), blTemp.begin(), blTemp.end()); + m_PrintData.insert(m_PrintData.end(), {0x0A}); + + m_newObj.clear(); + m_newObj[1] = ("├"); + m_newObj[6] = ("┼"); + m_newObj[23] = ("┤"); + blTemp = BuildLine(24, m_newObj); + m_PrintData.insert(m_PrintData.end(), blTemp.begin(), blTemp.end()); + m_PrintData.insert(m_PrintData.end(), {0x0A}); } + else + { - m_newObj[384] = ("│"); - m_newObj[404] = ("吨"); + //=========毛重====================== - m_newObj[528] = ("│"); - blTemp = BuildStringLine(m_newObj); - m_PrintData.insert(m_PrintData.end(), blTemp.begin(), blTemp.end()); - m_PrintData.insert(m_PrintData.end(), {0x0A}); + m_newObj.clear(); + m_newObj[1] = ("│"); + m_newObj[26] = ("毛重"); + m_newObj[120] = ("│"); + it = msg.find("GrossWeight"); + if (it != msg.end()) + { + m_newObj[145] = it->second; + } - m_newObj.clear(); - m_newObj[1] = ("├"); - m_newObj[6] = ("┼"); - m_newObj[17] = ("┼"); - m_newObj[23] = ("┤"); - blTemp = BuildLine(24,m_newObj); - m_PrintData.insert(m_PrintData.end(), blTemp.begin(), blTemp.end()); - m_PrintData.insert(m_PrintData.end(), {0x0A}); + m_newObj[384] = ("│"); + m_newObj[404] = ("吨"); - //=========皮重操作员====================== + m_newObj[528] = ("│"); + blTemp = BuildStringLine(m_newObj); + m_PrintData.insert(m_PrintData.end(), blTemp.begin(), blTemp.end()); + m_PrintData.insert(m_PrintData.end(), {0x0A}); - m_newObj.clear(); - m_newObj[1] = ("│"); - m_newObj[26] = ("操作员"); - m_newObj[120] = ("│"); + m_newObj.clear(); + m_newObj[1] = ("├"); + m_newObj[6] = ("┼"); + m_newObj[17] = ("┴"); + m_newObj[23] = ("┤"); + blTemp = BuildLine(24, m_newObj); + m_PrintData.insert(m_PrintData.end(), blTemp.begin(), blTemp.end()); + m_PrintData.insert(m_PrintData.end(), {0x0A}); - it = msg.find("TareOperater"); - if(it != msg.end()) - { - m_newObj[145] = it->second; - } + //=========毛重操作员====================== - m_newObj[384] = ("│"); - m_newObj[404] = ("吨"); + m_newObj.clear(); + m_newObj[1] = ("│"); + m_newObj[26] = ("操作员"); + m_newObj[120] = ("│"); - m_newObj[528] = ("│"); - blTemp = BuildStringLine(m_newObj); - m_PrintData.insert(m_PrintData.end(), blTemp.begin(), blTemp.end()); - m_PrintData.insert(m_PrintData.end(), {0x0A}); + it = msg.find("GrossOperater"); + if (it != msg.end()) + { + m_newObj[145] = it->second; + } + m_newObj[528] = ("│"); + blTemp = BuildStringLine(m_newObj); + m_PrintData.insert(m_PrintData.end(), blTemp.begin(), blTemp.end()); + m_PrintData.insert(m_PrintData.end(), {0x0A}); - m_newObj.clear(); - m_newObj[1] = ("├"); - m_newObj[6] = ("┼"); - m_newObj[17] = ("┼"); - m_newObj[23] = ("┤"); - blTemp = BuildLine(24,m_newObj); - m_PrintData.insert(m_PrintData.end(), blTemp.begin(), blTemp.end()); - m_PrintData.insert(m_PrintData.end(), {0x0A}); + m_newObj.clear(); + m_newObj[1] = ("├"); + m_newObj[6] = ("┼"); + m_newObj[23] = ("┤"); + blTemp = BuildLine(24, m_newObj); + m_PrintData.insert(m_PrintData.end(), blTemp.begin(), blTemp.end()); + m_PrintData.insert(m_PrintData.end(), {0x0A}); - //=========皮重时间====================== + //=========毛重时间====================== - m_newObj.clear(); - m_newObj[1] = ("│"); - m_newObj[26] = ("皮重时间"); - m_newObj[120] = ("│"); + m_newObj.clear(); + m_newObj[1] = ("│"); + m_newObj[26] = ("毛重时间"); + m_newObj[120] = ("│"); - it = msg.find("TareTime"); - if(it != msg.end()) - { - m_newObj[145] = it->second; - } + it = msg.find("GrossTime"); + if (it != msg.end()) + { + m_newObj[145] = it->second; + } - m_newObj[384] = ("│"); - m_newObj[404] = ("吨"); + m_newObj[528] = ("│"); + blTemp = BuildStringLine(m_newObj); + m_PrintData.insert(m_PrintData.end(), blTemp.begin(), blTemp.end()); + m_PrintData.insert(m_PrintData.end(), {0x0A}); + + m_newObj.clear(); + m_newObj[1] = ("├"); + m_newObj[6] = ("┼"); + m_newObj[17] = ("┬"); + m_newObj[23] = ("┤"); + blTemp = BuildLine(24, m_newObj); + m_PrintData.insert(m_PrintData.end(), blTemp.begin(), blTemp.end()); + m_PrintData.insert(m_PrintData.end(), {0x0A}); + + //=========皮重====================== + + m_newObj.clear(); + m_newObj[1] = ("│"); + m_newObj[26] = ("皮重"); + m_newObj[120] = ("│"); + + it = msg.find("TareWeight"); + if (it != msg.end()) + { + m_newObj[145] = it->second; + } - m_newObj[528] = ("│"); - blTemp = BuildStringLine(m_newObj); - m_PrintData.insert(m_PrintData.end(), blTemp.begin(), blTemp.end()); - m_PrintData.insert(m_PrintData.end(), {0x0A}); + m_newObj[384] = ("│"); + m_newObj[404] = ("吨"); + m_newObj[528] = ("│"); + blTemp = BuildStringLine(m_newObj); + m_PrintData.insert(m_PrintData.end(), blTemp.begin(), blTemp.end()); + m_PrintData.insert(m_PrintData.end(), {0x0A}); - m_newObj.clear(); - m_newObj[1] = ("├"); - m_newObj[6] = ("┼"); - m_newObj[17] = ("┼"); - m_newObj[23] = ("┤"); - blTemp = BuildLine(24,m_newObj); - m_PrintData.insert(m_PrintData.end(), blTemp.begin(), blTemp.end()); - m_PrintData.insert(m_PrintData.end(), {0x0A}); + m_newObj.clear(); + m_newObj[1] = ("├"); + m_newObj[6] = ("┼"); + m_newObj[17] = ("┴"); + m_newObj[23] = ("┤"); + blTemp = BuildLine(24, m_newObj); + m_PrintData.insert(m_PrintData.end(), blTemp.begin(), blTemp.end()); + m_PrintData.insert(m_PrintData.end(), {0x0A}); - //=========净重====================== + //=========皮重操作员====================== - m_newObj.clear(); - m_newObj[1] = ("│"); - m_newObj[26] = ("净重"); - m_newObj[120] = ("│"); + m_newObj.clear(); + m_newObj[1] = ("│"); + m_newObj[26] = ("操作员"); + m_newObj[120] = ("│"); - it = msg.find("SuttleWeight"); - if(it != msg.end()) - { - m_newObj[145] = it->second; - } + it = msg.find("TareOperater"); + if (it != msg.end()) + { + m_newObj[145] = it->second; + } - m_newObj[384] = ("│"); - m_newObj[404] = ("吨"); + m_newObj[528] = ("│"); + blTemp = BuildStringLine(m_newObj); + m_PrintData.insert(m_PrintData.end(), blTemp.begin(), blTemp.end()); + m_PrintData.insert(m_PrintData.end(), {0x0A}); - m_newObj[528] = ("│"); - blTemp = BuildStringLine(m_newObj); - m_PrintData.insert(m_PrintData.end(), blTemp.begin(), blTemp.end()); - m_PrintData.insert(m_PrintData.end(), {0x0A}); + m_newObj.clear(); + m_newObj[1] = ("├"); + m_newObj[6] = ("┼"); + m_newObj[23] = ("┤"); + blTemp = BuildLine(24, m_newObj); + m_PrintData.insert(m_PrintData.end(), blTemp.begin(), blTemp.end()); + m_PrintData.insert(m_PrintData.end(), {0x0A}); + //=========皮重时间====================== - m_newObj.clear(); - m_newObj[1] = ("├"); - m_newObj[6] = ("┼"); - m_newObj[17] = ("┴"); - m_newObj[23] = ("┤"); - blTemp = BuildLine(24,m_newObj); - m_PrintData.insert(m_PrintData.end(), blTemp.begin(), blTemp.end()); - m_PrintData.insert(m_PrintData.end(), {0x0A}); + m_newObj.clear(); + m_newObj[1] = ("│"); + m_newObj[26] = ("皮重时间"); + m_newObj[120] = ("│"); - //=========扣矸====================== + it = msg.find("TareTime"); + if (it != msg.end()) + { + m_newObj[145] = it->second; + } - m_newObj.clear(); - m_newObj[1] = ("│"); - m_newObj[26] = ("扣矸"); - m_newObj[120] = ("│"); + m_newObj[528] = ("│"); + blTemp = BuildStringLine(m_newObj); + m_PrintData.insert(m_PrintData.end(), blTemp.begin(), blTemp.end()); + m_PrintData.insert(m_PrintData.end(), {0x0A}); + + m_newObj.clear(); + m_newObj[1] = ("├"); + m_newObj[6] = ("┼"); + m_newObj[17] = ("┬"); + m_newObj[23] = ("┤"); + blTemp = BuildLine(24, m_newObj); + m_PrintData.insert(m_PrintData.end(), blTemp.begin(), blTemp.end()); + m_PrintData.insert(m_PrintData.end(), {0x0A}); + + //=========净重====================== + + m_newObj.clear(); + m_newObj[1] = ("│"); + m_newObj[26] = ("净重"); + m_newObj[120] = ("│"); + + it = msg.find("SuttleWeight"); + if (it != msg.end()) + { + m_newObj[145] = it->second; + } - it = msg.find("duduction1"); - if(it != msg.end()) - { - m_newObj[145] = it->second; - } + m_newObj[384] = ("│"); + m_newObj[404] = ("吨"); - m_newObj[384] = ("│"); - m_newObj[404] = ("吨"); + m_newObj[528] = ("│"); + blTemp = BuildStringLine(m_newObj); + m_PrintData.insert(m_PrintData.end(), blTemp.begin(), blTemp.end()); + m_PrintData.insert(m_PrintData.end(), {0x0A}); - m_newObj[528] = ("│"); - blTemp = BuildStringLine(m_newObj); - m_PrintData.insert(m_PrintData.end(), blTemp.begin(), blTemp.end()); - m_PrintData.insert(m_PrintData.end(), {0x0A}); + m_newObj.clear(); + m_newObj[1] = ("├"); + m_newObj[6] = ("┼"); + m_newObj[17] = ("┼"); + m_newObj[23] = ("┤"); + blTemp = BuildLine(24, m_newObj); + m_PrintData.insert(m_PrintData.end(), blTemp.begin(), blTemp.end()); + m_PrintData.insert(m_PrintData.end(), {0x0A}); + //=========扣矸====================== - m_newObj.clear(); - m_newObj[1] = ("├"); - m_newObj[6] = ("┼"); - m_newObj[17] = ("┴"); - m_newObj[23] = ("┤"); - blTemp = BuildLine(24,m_newObj); - m_PrintData.insert(m_PrintData.end(), blTemp.begin(), blTemp.end()); - m_PrintData.insert(m_PrintData.end(), {0x0A}); + m_newObj.clear(); + m_newObj[1] = ("│"); + m_newObj[26] = ("扣矸"); + m_newObj[120] = ("│"); - //=========扣水====================== + it = msg.find("duduction1"); + if (it != msg.end()) + { + m_newObj[145] = it->second; + } - m_newObj.clear(); - m_newObj[1] = ("│"); - m_newObj[26] = ("扣水"); - m_newObj[120] = ("│"); + m_newObj[384] = ("│"); + m_newObj[404] = ("吨"); - it = msg.find("duduction2"); - if(it != msg.end()) - { - m_newObj[145] = it->second; - } + m_newObj[528] = ("│"); + blTemp = BuildStringLine(m_newObj); + m_PrintData.insert(m_PrintData.end(), blTemp.begin(), blTemp.end()); + m_PrintData.insert(m_PrintData.end(), {0x0A}); - m_newObj[384] = ("│"); - m_newObj[404] = ("吨"); + m_newObj.clear(); + m_newObj[1] = ("├"); + m_newObj[6] = ("┼"); + m_newObj[17] = ("┼"); + m_newObj[23] = ("┤"); + blTemp = BuildLine(24, m_newObj); + m_PrintData.insert(m_PrintData.end(), blTemp.begin(), blTemp.end()); + m_PrintData.insert(m_PrintData.end(), {0x0A}); - m_newObj[528] = ("│"); - blTemp = BuildStringLine(m_newObj); - m_PrintData.insert(m_PrintData.end(), blTemp.begin(), blTemp.end()); - m_PrintData.insert(m_PrintData.end(), {0x0A}); + //=========扣水====================== + m_newObj.clear(); + m_newObj[1] = ("│"); + m_newObj[26] = ("扣水"); + m_newObj[120] = ("│"); - m_newObj.clear(); - m_newObj[1] = ("├"); - m_newObj[6] = ("┼"); - m_newObj[17] = ("┴"); - m_newObj[23] = ("┤"); - blTemp = BuildLine(24,m_newObj); - m_PrintData.insert(m_PrintData.end(), blTemp.begin(), blTemp.end()); - m_PrintData.insert(m_PrintData.end(), {0x0A}); + it = msg.find("duduction2"); + if (it != msg.end()) + { + m_newObj[145] = it->second; + } - //=========扣杂====================== + m_newObj[384] = ("│"); + m_newObj[404] = ("吨"); - m_newObj.clear(); - m_newObj[1] = ("│"); - m_newObj[26] = ("扣杂"); - m_newObj[120] = ("│"); + m_newObj[528] = ("│"); + blTemp = BuildStringLine(m_newObj); + m_PrintData.insert(m_PrintData.end(), blTemp.begin(), blTemp.end()); + m_PrintData.insert(m_PrintData.end(), {0x0A}); - it = msg.find("duduction3"); - if(it != msg.end()) - { - m_newObj[145] = it->second; - } + m_newObj.clear(); + m_newObj[1] = ("├"); + m_newObj[6] = ("┼"); + m_newObj[17] = ("┼"); + m_newObj[23] = ("┤"); + blTemp = BuildLine(24, m_newObj); + m_PrintData.insert(m_PrintData.end(), blTemp.begin(), blTemp.end()); + m_PrintData.insert(m_PrintData.end(), {0x0A}); - m_newObj[384] = ("│"); - m_newObj[404] = ("吨"); + //=========扣杂====================== - m_newObj[528] = ("│"); - blTemp = BuildStringLine(m_newObj); - m_PrintData.insert(m_PrintData.end(), blTemp.begin(), blTemp.end()); - m_PrintData.insert(m_PrintData.end(), {0x0A}); + m_newObj.clear(); + m_newObj[1] = ("│"); + m_newObj[26] = ("扣杂"); + m_newObj[120] = ("│"); + it = msg.find("duduction3"); + if (it != msg.end()) + { + m_newObj[145] = it->second; + } - m_newObj.clear(); - m_newObj[1] = ("├"); - m_newObj[6] = ("┼"); - m_newObj[17] = ("┴"); - m_newObj[23] = ("┤"); - blTemp = BuildLine(24,m_newObj); - m_PrintData.insert(m_PrintData.end(), blTemp.begin(), blTemp.end()); - m_PrintData.insert(m_PrintData.end(), {0x0A}); + m_newObj[384] = ("│"); + m_newObj[404] = ("吨"); + + m_newObj[528] = ("│"); + blTemp = BuildStringLine(m_newObj); + m_PrintData.insert(m_PrintData.end(), blTemp.begin(), blTemp.end()); + m_PrintData.insert(m_PrintData.end(), {0x0A}); + + m_newObj.clear(); + m_newObj[1] = ("├"); + m_newObj[6] = ("┼"); + m_newObj[17] = ("┴"); + m_newObj[23] = ("┤"); + blTemp = BuildLine(24, m_newObj); + m_PrintData.insert(m_PrintData.end(), blTemp.begin(), blTemp.end()); + m_PrintData.insert(m_PrintData.end(), {0x0A}); + } //====磅称名称===================== @@ -1001,7 +1068,6 @@ void MsgHandler::Print1_3(const std::map& msg) m_newObj[1] = ("├"); m_newObj[6] = ("┼"); - m_newObj[17] = ("┬"); m_newObj[23] = ("┤"); blTemp = BuildLine(24,m_newObj); m_PrintData.insert(m_PrintData.end(), blTemp.begin(), blTemp.end()); @@ -1027,7 +1093,6 @@ void MsgHandler::Print1_3(const std::map& msg) m_newObj[1] = ("├"); m_newObj[6] = ("┼"); - m_newObj[17] = ("┬"); m_newObj[23] = ("┤"); blTemp = BuildLine(24,m_newObj); m_PrintData.insert(m_PrintData.end(), blTemp.begin(), blTemp.end()); @@ -1038,8 +1103,13 @@ void MsgHandler::Print1_3(const std::map& msg) m_newObj.clear(); m_newObj[1] = ("│"); - m_newObj[26] = ("备注"); + m_newObj[26] = ("提示"); m_newObj[120] = ("│"); + it = msg.find("Warning"); + if(it != msg.end()) + { + m_newObj[145] = it->second; + } m_newObj[528] = ("│"); blTemp = BuildStringLine(m_newObj); m_PrintData.insert(m_PrintData.end(), blTemp.begin(), blTemp.end()); diff --git a/weigh/MsgHandler.cxx b/weigh/MsgHandler.cxx index 90c0d3f..99cf63b 100644 --- a/weigh/MsgHandler.cxx +++ b/weigh/MsgHandler.cxx @@ -60,13 +60,13 @@ int MsgHandler::RecvDeviceMsg(std::vector& data, int timeoutMs) if (bytesRead > 0) { - std::cout << "read from " << this->device << std::endl; - for (int num : data) - { - std::cout << std::hex << std::setw(2) << std::setfill('0') - << num << " "; - } - std::cout << std::endl; + // std::cout << "read from " << this->device << std::endl; + // for (int num : data) + // { + // std::cout << std::hex << std::setw(2) << std::setfill('0') + // << num << " "; + // } + // std::cout << std::endl; } return bytesRead; diff --git a/weigh/Publisher.cxx b/weigh/Publisher.cxx index c835bcf..cc498f7 100644 --- a/weigh/Publisher.cxx +++ b/weigh/Publisher.cxx @@ -147,6 +147,8 @@ void PublisherApp::on_publication_matched( } } +uint8_t send_time = 0; + void PublisherApp::run(std::shared_ptr handler) { // 配置检测器 - 使用更合理的参数 @@ -160,7 +162,7 @@ void PublisherApp::run(std::shared_ptr handler) config.timeout_extra = 3; // 超时额外次数 config.window_size = 8; // 窗口大小8 config.max_std_dev = 30.0f; // 最大标准差30kg - config.enable_debug_log = true; + config.enable_debug_log = false; config.reset_window_on_vehicle_on = true; config.leave_reset_delay_ms = 500; // 0.5秒后重置 @@ -178,6 +180,7 @@ void PublisherApp::run(std::shared_ptr handler) "VEHICLE_LEAVING" }; + send_time = 50; std::cout << "\n=== STATE CHANGE: " << state_names[static_cast(state)] << ", Weight: " << weight << " kg ===" << std::endl; }); @@ -185,7 +188,7 @@ void PublisherApp::run(std::shared_ptr handler) // 设置重量回调 detector.setWeightCallback([](float weight, bool is_stable, [[maybe_unused]] void* user_data) { if (is_stable) { - std::cout << "Weight stabilized: " << weight << " kg" << std::endl; + // std::cout << "Weight stabilized: " << weight << " kg" << std::endl; } }); @@ -221,20 +224,20 @@ void PublisherApp::run(std::shared_ptr handler) auto stats = detector.getStatistics(); auto state = detector.getState(); - const char *state_names[] = { - "NO_VEHICLE", "VEHICLE_ON", "VEHICLE_STABLE", "VEHICLE_LEAVING"}; + // const char *state_names[] = { + // "NO_VEHICLE", "VEHICLE_ON", "VEHICLE_STABLE", "VEHICLE_LEAVING"}; - std::cout << "State: " << state_names[static_cast(state)] - << ", Stable: " << (detector.isStable() ? "Yes" : "No") - << ", HasVehicle: " << (detector.hasVehicle() ? "Yes" : "No") << std::endl; + // std::cout << "State: " << state_names[static_cast(state)] + // << ", Stable: " << (detector.isStable() ? "Yes" : "No") + // << ", HasVehicle: " << (detector.hasVehicle() ? "Yes" : "No") << std::endl; - if (stats.sample_count > 0) - { - std::cout << "Stats: Mean=" << std::setprecision(2) << stats.mean - << "kg, StdDev=" << stats.std_dev - << "kg, Range=" << (stats.max - stats.min) - << "kg, Samples=" << stats.sample_count << std::endl; - } + // if (stats.sample_count > 0) + // { + // std::cout << "Stats: Mean=" << std::setprecision(2) << stats.mean + // << "kg, StdDev=" << stats.std_dev + // << "kg, Range=" << (stats.max - stats.min) + // << "kg, Samples=" << stats.sample_count << std::endl; + // } // 如果稳定,显示稳定重量 WeighingSystem::ScaleInfo info; @@ -252,7 +255,6 @@ void PublisherApp::run(std::shared_ptr handler) info.WeightOK() = 1; info.Value() = weight/1000; info.StableValue() = weight/1000; - DEBUG("STABLE WEIGHT: " << detector.getStableWeight() << " kg"); } else { @@ -261,10 +263,19 @@ void PublisherApp::run(std::shared_ptr handler) info.StableValue() = 0; } - writer_->write(&info); + if (send_time >= 50) + { + writer_->write(&info); + send_time = 0; + } } } + if (send_time++ > 50) + { + send_time = 50; + } + // Wait for period or stop event std::unique_lock period_lock(mutex_); cv_.wait_for(period_lock, std::chrono::milliseconds(period_ms_), [this]()