1. 优化逻辑。

main
baocm 8 months ago
parent df26465672
commit 1a25135f79

@ -336,6 +336,7 @@ bool PublisherApp::print_receipt(const std::map<std::string, std::string>& msg)
void PublisherApp::run() void PublisherApp::run()
{ {
uint8_t send_sum = 0; uint8_t send_sum = 0;
uint8_t is_print = 0;
std::string license_no = ""; std::string license_no = "";
float stable_weight = 0; float stable_weight = 0;
@ -355,7 +356,7 @@ void PublisherApp::run()
if (license_no == "") if (license_no == "")
{ {
license_no = info.NewTag(); license_no = info.License();
} }
} }
else if (!DdsMsgData::ScaleInfo_queue_.empty()) else if (!DdsMsgData::ScaleInfo_queue_.empty())
@ -383,6 +384,14 @@ void PublisherApp::run()
if (info.HasVehicle() == 0) if (info.HasVehicle() == 0)
{ {
license_no = ""; license_no = "";
if (is_print == 1)
{
std::this_thread::sleep_for(std::chrono::seconds(5));
std::map<std::string, std::string> ctrl;
ctrl["FrontBar"] = "down";
bar_ctrl(ctrl);
is_print = 0;
}
} }
} }
else if (!DdsMsgData::BarUpdate_queue_.empty()) else if (!DdsMsgData::BarUpdate_queue_.empty())
@ -451,8 +460,14 @@ void PublisherApp::run()
print_msg["OUTCoalYard"] = info.OutCoalYard(); print_msg["OUTCoalYard"] = info.OutCoalYard();
print_msg["BatchNumber"] = info.BatchNumber(); print_msg["BatchNumber"] = info.BatchNumber();
print_msg["Warning"] = info.Warning(); print_msg["Warning"] = info.Warning();
print_msg["TicketType"] = info.TicketType();
print_receipt(print_msg); print_receipt(print_msg);
is_print = 1;
std::map<std::string, std::string> ctrl;
ctrl["FrontBar"] = "up";
bar_ctrl(ctrl);
} }
} }
else if (!DdsMsgData::WeightInfoError_queue_.empty()) else if (!DdsMsgData::WeightInfoError_queue_.empty())
@ -461,6 +476,7 @@ void PublisherApp::run()
DdsMsgData::WeightInfoError_queue_.pop(); DdsMsgData::WeightInfoError_queue_.pop();
dds_lock.unlock(); dds_lock.unlock();
std::this_thread::sleep_for(std::chrono::seconds(3));
send_sum = 0; send_sum = 0;
} }
else else

@ -26,9 +26,12 @@ MsgHandler::MsgHandler() : fd(-1)
this->new_bar_state.FrontResistanceSignal = UNBLOCK; this->new_bar_state.FrontResistanceSignal = UNBLOCK;
this->new_bar_state.BackResistanceSignal = UNBLOCK; this->new_bar_state.BackResistanceSignal = UNBLOCK;
this->old_bar_state = this->new_bar_state; this->old_bar_state.FrontBarState = 0xFF;
this->old_bar_state.FrontResistanceSignal = BLOCK; this->old_bar_state.BackBarState = 0xFF;
this->old_bar_state.BackResistanceSignal = BLOCK; 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<std::string, std::string>& msg) void MsgHandler::HandleDdsMsg(const std::map<std::string, std::string>& msg)

@ -335,6 +335,8 @@ bool PublisherApp::print_receipt(const std::map<std::string, std::string>& msg)
return true; return true;
} }
extern std::string mqtt_topic_id;
void PublisherApp::run(std::shared_ptr<mqtt::async_client> dev) void PublisherApp::run(std::shared_ptr<mqtt::async_client> dev)
{ {
while (!is_stopped()) while (!is_stopped())
@ -351,6 +353,19 @@ void PublisherApp::run(std::shared_ptr<mqtt::async_client> dev)
// DEBUG("车牌: " << info.License()); // DEBUG("车牌: " << info.License());
// DEBUG("类型: " << info.NewTag()); // 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()) else if (!DdsMsgData::ScaleInfo_queue_.empty())
{ {
@ -363,6 +378,25 @@ void PublisherApp::run(std::shared_ptr<mqtt::async_client> dev)
// DEBUG("设备状态: " << info.State()); // DEBUG("设备状态: " << info.State());
// DEBUG("实时重量: " << info.Value()); // DEBUG("实时重量: " << info.Value());
// DEBUG("稳定重量: " << info.StableValue()); // 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()) else if (!DdsMsgData::BarUpdate_queue_.empty())
{ {
@ -370,20 +404,15 @@ void PublisherApp::run(std::shared_ptr<mqtt::async_client> dev)
DdsMsgData::BarUpdate_queue_.pop(); DdsMsgData::BarUpdate_queue_.pop();
dds_lock.unlock(); dds_lock.unlock();
// DEBUG("前拦车器状态: " << info.FrontBarState());
// DEBUG("后拦车器状态: " << info.BackBarState());
if (dev != nullptr) if (dev != nullptr)
{ {
if (dev->is_connected()) if (dev->is_connected())
{ {
json j; std::string payload = "{\"value\": " + std::to_string(info.FrontBarState()) + "}";
j["bar_state"]["FrontBar"] = info.FrontBarState();
j["bar_state"]["BackBar"] = info.BackBarState();
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_qos(0);
mqtt_msg->set_retained(false); mqtt_msg->set_retained(true);
dev->publish(mqtt_msg); dev->publish(mqtt_msg);
} }
} }
@ -394,20 +423,15 @@ void PublisherApp::run(std::shared_ptr<mqtt::async_client> dev)
DdsMsgData::LightsUpdate_queue_.pop(); DdsMsgData::LightsUpdate_queue_.pop();
dds_lock.unlock(); dds_lock.unlock();
// DEBUG("前红绿灯状态: " << info.FrontLEDState());
// DEBUG("后红绿灯状态: " << info.BackLEDState());
if (dev != nullptr) if (dev != nullptr)
{ {
if (dev->is_connected()) if (dev->is_connected())
{ {
json j; std::string payload = "{\"value\": " + std::to_string(info.FrontLEDState()) + "}";
j["light_state"]["FrontLED"] = info.FrontLEDState();
j["light_state"]["BackLED"] = 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_qos(0);
mqtt_msg->set_retained(false); mqtt_msg->set_retained(true);
dev->publish(mqtt_msg); dev->publish(mqtt_msg);
} }
} }
@ -418,20 +442,15 @@ void PublisherApp::run(std::shared_ptr<mqtt::async_client> dev)
DdsMsgData::InfraredUpdate_queue_.pop(); DdsMsgData::InfraredUpdate_queue_.pop();
dds_lock.unlock(); dds_lock.unlock();
// DEBUG("前红外对射状态: " << info.FrontResistanceSignal());
// DEBUG("后红外对射状态: " << info.BackResistanceSignal());
if (dev != nullptr) if (dev != nullptr)
{ {
if (dev->is_connected()) if (dev->is_connected())
{ {
json j; std::string payload = "{\"value\": " + std::to_string(info.FrontResistanceSignal()) + "}";
j["infrared_state"]["FrontResistance"] = info.FrontResistanceSignal();
j["infrared_state"]["BackResistance"] = info.BackResistanceSignal();
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_qos(0);
mqtt_msg->set_retained(false); mqtt_msg->set_retained(true);
dev->publish(mqtt_msg); dev->publish(mqtt_msg);
} }
} }
@ -452,17 +471,43 @@ void PublisherApp::run(std::shared_ptr<mqtt::async_client> dev)
MqttMsgData::Mqtt_msg_queue_.pop(); MqttMsgData::Mqtt_msg_queue_.pop();
mqtt_lock.unlock(); 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<std::string, std::string> ctrl;
ctrl["FrontBar"] = "up";
bar_ctrl(ctrl);
}
}
else if (topic.find("barrier/frontdown") != std::string::npos)
{ {
std::map<std::string, std::string> ctrl = cmd["bar_ctrl"].get<std::map<std::string, std::string>>(); if (cmd["value"] == 1)
bar_ctrl(ctrl); {
std::map<std::string, std::string> ctrl;
ctrl["FrontBar"] = "down";
bar_ctrl(ctrl);
}
} }
else if (cmd.contains("light_ctrl")) else if (topic.find("light/frontsignal") != std::string::npos)
{ {
std::map<std::string, std::string> ctrl = cmd["light_ctrl"].get<std::map<std::string, std::string>>(); if (cmd["value"] == 1)
light_ctrl(ctrl); {
std::map<std::string, std::string> ctrl;
ctrl["FrontLED"] = "red";
light_ctrl(ctrl);
}
else
{
std::map<std::string, std::string> ctrl;
ctrl["FrontLED"] = "green";
light_ctrl(ctrl);
}
} }
} }
else else

@ -128,6 +128,8 @@ std::mutex DdsMsgData::queue_cv_mtx_;
std::queue<mqtt::const_message_ptr> MqttMsgData::Mqtt_msg_queue_; std::queue<mqtt::const_message_ptr> MqttMsgData::Mqtt_msg_queue_;
std::mutex MqttMsgData::queue_cv_mtx_; std::mutex MqttMsgData::queue_cv_mtx_;
std::string mqtt_topic_id = "0";
int main(int argc, char** argv) int main(int argc, char** argv)
{ {
auto ret = EXIT_SUCCESS; auto ret = EXIT_SUCCESS;
@ -139,8 +141,8 @@ int main(int argc, char** argv)
std::string mqtt_server; std::string mqtt_server;
std::string mqtt_username = "admin"; std::string mqtt_username = "admin";
std::string mqtt_password = "admin"; std::string mqtt_password = "admin";
std::string mqtt_id = "core_0"; std::string mqtt_id = "MqttDds_0";
const std::vector<std::string> topic = {"command"}; std::vector<std::string> topic;
const std::vector<int> qos = {0}; const std::vector<int> qos = {0};
for (int i = 1; i < argc; i++) 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) if (strcmp(argv[i], "--domain") == 0 && i + 1 < argc)
{ {
domain_id = atoi(argv[++i]); 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) else if (strcmp(argv[i], "--addr") == 0 && i + 1 < argc)
{ {
@ -210,6 +213,7 @@ int main(int argc, char** argv)
.clean_session(false) .clean_session(false)
.finalize(); .finalize();
topic.push_back("pound/" + mqtt_topic_id + "/#");
cb = std::make_shared<mqtt_callback>(*dev, topic, qos); cb = std::make_shared<mqtt_callback>(*dev, topic, qos);
dev->set_callback(*cb); dev->set_callback(*cb);

@ -640,7 +640,6 @@ void MsgHandler::Print1_3(const std::map<std::string, std::string>& msg)
m_newObj[1] = (""); m_newObj[1] = ("");
m_newObj[6] = (""); m_newObj[6] = ("");
m_newObj[17] = ("");
m_newObj[23] = (""); m_newObj[23] = ("");
blTemp = BuildLine(24,m_newObj); blTemp = BuildLine(24,m_newObj);
m_PrintData.insert(m_PrintData.end(), blTemp.begin(), blTemp.end()); m_PrintData.insert(m_PrintData.end(), blTemp.begin(), blTemp.end());
@ -666,320 +665,388 @@ void MsgHandler::Print1_3(const std::map<std::string, std::string>& msg)
m_newObj[1] = (""); m_newObj[1] = ("");
m_newObj[6] = (""); m_newObj[6] = ("");
m_newObj[17] = ("");
m_newObj[23] = (""); m_newObj[23] = ("");
blTemp = BuildLine(24,m_newObj); blTemp = BuildLine(24,m_newObj);
m_PrintData.insert(m_PrintData.end(), blTemp.begin(), blTemp.end()); m_PrintData.insert(m_PrintData.end(), blTemp.begin(), blTemp.end());
m_PrintData.insert(m_PrintData.end(), {0x0A}); m_PrintData.insert(m_PrintData.end(), {0x0A});
//=========毛重======================
m_newObj.clear(); //=========磅单类型======================
m_newObj[1] = (""); it = msg.find("TicketType");
m_newObj[26] = ("毛重"); if (it->second == "1")
m_newObj[120] = ("");
it = msg.find("GrossWeight");
if(it != msg.end())
{ {
m_newObj[145] = it->second; //=========毛重======================
}
m_newObj[384] = (""); m_newObj.clear();
m_newObj[404] = (""); m_newObj[1] = ("");
m_newObj[26] = ("一次称重");
m_newObj[120] = ("");
m_newObj[528] = (""); it = msg.find("GrossWeight");
blTemp = BuildStringLine(m_newObj); if (it != msg.end())
m_PrintData.insert(m_PrintData.end(), blTemp.begin(), blTemp.end()); {
m_PrintData.insert(m_PrintData.end(), {0x0A}); m_newObj[145] = it->second;
}
m_newObj[384] = ("");
m_newObj[404] = ("");
m_newObj.clear(); m_newObj[528] = ("");
m_newObj[1] = (""); blTemp = BuildStringLine(m_newObj);
m_newObj[6] = (""); m_PrintData.insert(m_PrintData.end(), blTemp.begin(), blTemp.end());
m_newObj[17] = (""); m_PrintData.insert(m_PrintData.end(), {0x0A});
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("GrossOperater"); m_newObj.clear();
if(it != msg.end()) m_newObj[1] = ("");
{ m_newObj[26] = ("操作员");
m_newObj[145] = it->second; m_newObj[120] = ("");
}
m_newObj[384] = (""); it = msg.find("GrossOperater");
m_newObj[404] = (""); if (it != msg.end())
{
m_newObj[145] = it->second;
}
m_newObj[528] = (""); m_newObj[528] = ("");
blTemp = BuildStringLine(m_newObj); blTemp = BuildStringLine(m_newObj);
m_PrintData.insert(m_PrintData.end(), blTemp.begin(), blTemp.end()); m_PrintData.insert(m_PrintData.end(), blTemp.begin(), blTemp.end());
m_PrintData.insert(m_PrintData.end(), {0x0A}); 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] = ("");
m_newObj.clear(); it = msg.find("GrossTime");
m_newObj[1] = (""); if (it != msg.end())
m_newObj[26] = ("毛重时间"); {
m_newObj[120] = (""); m_newObj[145] = it->second;
}
it = msg.find("GrossTime"); m_newObj[528] = ("");
if(it != msg.end()) blTemp = BuildStringLine(m_newObj);
{ m_PrintData.insert(m_PrintData.end(), blTemp.begin(), blTemp.end());
m_newObj[145] = it->second; 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[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[384] = (""); //=========毛重======================
m_newObj[404] = ("");
m_newObj[528] = (""); m_newObj.clear();
blTemp = BuildStringLine(m_newObj); m_newObj[1] = ("");
m_PrintData.insert(m_PrintData.end(), blTemp.begin(), blTemp.end()); m_newObj[26] = ("毛重");
m_PrintData.insert(m_PrintData.end(), {0x0A}); m_newObj[120] = ("");
it = msg.find("GrossWeight");
if (it != msg.end())
{
m_newObj[145] = it->second;
}
m_newObj.clear(); m_newObj[384] = ("");
m_newObj[1] = (""); m_newObj[404] = ("");
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.clear();
m_newObj[1] = (""); m_newObj[1] = ("");
m_newObj[26] = ("操作员"); m_newObj[6] = ("");
m_newObj[120] = (""); 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.clear();
m_newObj[404] = (""); m_newObj[1] = ("");
m_newObj[26] = ("操作员");
m_newObj[120] = ("");
m_newObj[528] = (""); it = msg.find("GrossOperater");
blTemp = BuildStringLine(m_newObj); if (it != msg.end())
m_PrintData.insert(m_PrintData.end(), blTemp.begin(), blTemp.end()); {
m_PrintData.insert(m_PrintData.end(), {0x0A}); 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.clear();
m_newObj[1] = (""); m_newObj[1] = ("");
m_newObj[6] = (""); m_newObj[6] = ("");
m_newObj[17] = (""); m_newObj[23] = ("");
m_newObj[23] = (""); blTemp = BuildLine(24, m_newObj);
blTemp = BuildLine(24,m_newObj); m_PrintData.insert(m_PrintData.end(), blTemp.begin(), blTemp.end());
m_PrintData.insert(m_PrintData.end(), blTemp.begin(), blTemp.end()); m_PrintData.insert(m_PrintData.end(), {0x0A});
m_PrintData.insert(m_PrintData.end(), {0x0A});
//=========皮重时间====================== //=========毛重时间======================
m_newObj.clear(); m_newObj.clear();
m_newObj[1] = (""); m_newObj[1] = ("");
m_newObj[26] = ("重时间"); m_newObj[26] = ("重时间");
m_newObj[120] = (""); m_newObj[120] = ("");
it = msg.find("TareTime"); it = msg.find("GrossTime");
if(it != msg.end()) if (it != msg.end())
{ {
m_newObj[145] = it->second; m_newObj[145] = it->second;
} }
m_newObj[384] = (""); m_newObj[528] = ("");
m_newObj[404] = (""); 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] = (""); m_newObj[384] = ("");
blTemp = BuildStringLine(m_newObj); m_newObj[404] = ("");
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.clear();
m_newObj[1] = (""); m_newObj[1] = ("");
m_newObj[6] = (""); m_newObj[6] = ("");
m_newObj[17] = (""); m_newObj[17] = ("");
m_newObj[23] = (""); m_newObj[23] = ("");
blTemp = BuildLine(24,m_newObj); blTemp = BuildLine(24, m_newObj);
m_PrintData.insert(m_PrintData.end(), blTemp.begin(), blTemp.end()); m_PrintData.insert(m_PrintData.end(), blTemp.begin(), blTemp.end());
m_PrintData.insert(m_PrintData.end(), {0x0A}); m_PrintData.insert(m_PrintData.end(), {0x0A});
//=========净重====================== //=========皮重操作员======================
m_newObj.clear(); m_newObj.clear();
m_newObj[1] = (""); m_newObj[1] = ("");
m_newObj[26] = ("净重"); m_newObj[26] = ("操作员");
m_newObj[120] = (""); m_newObj[120] = ("");
it = msg.find("SuttleWeight"); it = msg.find("TareOperater");
if(it != msg.end()) if (it != msg.end())
{ {
m_newObj[145] = it->second; m_newObj[145] = it->second;
} }
m_newObj[384] = (""); m_newObj[528] = ("");
m_newObj[404] = (""); blTemp = BuildStringLine(m_newObj);
m_PrintData.insert(m_PrintData.end(), blTemp.begin(), blTemp.end());
m_PrintData.insert(m_PrintData.end(), {0x0A});
m_newObj[528] = (""); m_newObj.clear();
blTemp = BuildStringLine(m_newObj); m_newObj[1] = ("");
m_PrintData.insert(m_PrintData.end(), blTemp.begin(), blTemp.end()); m_newObj[6] = ("");
m_PrintData.insert(m_PrintData.end(), {0x0A}); 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.clear();
m_newObj[1] = (""); m_newObj[1] = ("");
m_newObj[6] = (""); m_newObj[26] = ("皮重时间");
m_newObj[17] = (""); m_newObj[120] = ("");
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("TareTime");
if (it != msg.end())
{
m_newObj[145] = it->second;
}
m_newObj.clear(); m_newObj[528] = ("");
m_newObj[1] = (""); blTemp = BuildStringLine(m_newObj);
m_newObj[26] = ("扣矸"); m_PrintData.insert(m_PrintData.end(), blTemp.begin(), blTemp.end());
m_newObj[120] = (""); 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"); m_newObj[384] = ("");
if(it != msg.end()) m_newObj[404] = ("");
{
m_newObj[145] = it->second;
}
m_newObj[384] = (""); m_newObj[528] = ("");
m_newObj[404] = (""); blTemp = BuildStringLine(m_newObj);
m_PrintData.insert(m_PrintData.end(), blTemp.begin(), blTemp.end());
m_PrintData.insert(m_PrintData.end(), {0x0A});
m_newObj[528] = (""); m_newObj.clear();
blTemp = BuildStringLine(m_newObj); m_newObj[1] = ("");
m_PrintData.insert(m_PrintData.end(), blTemp.begin(), blTemp.end()); m_newObj[6] = ("");
m_PrintData.insert(m_PrintData.end(), {0x0A}); 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.clear();
m_newObj[1] = (""); m_newObj[1] = ("");
m_newObj[6] = (""); m_newObj[26] = ("扣矸");
m_newObj[17] = (""); m_newObj[120] = ("");
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("duduction1");
if (it != msg.end())
{
m_newObj[145] = it->second;
}
m_newObj.clear(); m_newObj[384] = ("");
m_newObj[1] = (""); m_newObj[404] = ("");
m_newObj[26] = ("扣水");
m_newObj[120] = ("");
it = msg.find("duduction2"); m_newObj[528] = ("");
if(it != msg.end()) blTemp = BuildStringLine(m_newObj);
{ m_PrintData.insert(m_PrintData.end(), blTemp.begin(), blTemp.end());
m_newObj[145] = it->second; m_PrintData.insert(m_PrintData.end(), {0x0A});
}
m_newObj[384] = (""); m_newObj.clear();
m_newObj[404] = (""); 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(); it = msg.find("duduction2");
m_newObj[1] = (""); if (it != msg.end())
m_newObj[6] = (""); {
m_newObj[17] = (""); m_newObj[145] = it->second;
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.clear(); m_newObj[528] = ("");
m_newObj[1] = (""); blTemp = BuildStringLine(m_newObj);
m_newObj[26] = ("扣杂"); m_PrintData.insert(m_PrintData.end(), blTemp.begin(), blTemp.end());
m_newObj[120] = (""); m_PrintData.insert(m_PrintData.end(), {0x0A});
it = msg.find("duduction3"); m_newObj.clear();
if(it != msg.end()) m_newObj[1] = ("");
{ m_newObj[6] = ("");
m_newObj[145] = it->second; 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] = (""); m_newObj.clear();
blTemp = BuildStringLine(m_newObj); m_newObj[1] = ("");
m_PrintData.insert(m_PrintData.end(), blTemp.begin(), blTemp.end()); m_newObj[26] = ("扣杂");
m_PrintData.insert(m_PrintData.end(), {0x0A}); m_newObj[120] = ("");
it = msg.find("duduction3");
if (it != msg.end())
{
m_newObj[145] = it->second;
}
m_newObj.clear(); m_newObj[384] = ("");
m_newObj[1] = (""); m_newObj[404] = ("");
m_newObj[6] = ("");
m_newObj[17] = (""); m_newObj[528] = ("");
m_newObj[23] = (""); blTemp = BuildStringLine(m_newObj);
blTemp = BuildLine(24,m_newObj); m_PrintData.insert(m_PrintData.end(), blTemp.begin(), blTemp.end());
m_PrintData.insert(m_PrintData.end(), blTemp.begin(), blTemp.end()); m_PrintData.insert(m_PrintData.end(), {0x0A});
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<std::string, std::string>& msg)
m_newObj[1] = (""); m_newObj[1] = ("");
m_newObj[6] = (""); m_newObj[6] = ("");
m_newObj[17] = ("");
m_newObj[23] = (""); m_newObj[23] = ("");
blTemp = BuildLine(24,m_newObj); blTemp = BuildLine(24,m_newObj);
m_PrintData.insert(m_PrintData.end(), blTemp.begin(), blTemp.end()); m_PrintData.insert(m_PrintData.end(), blTemp.begin(), blTemp.end());
@ -1027,7 +1093,6 @@ void MsgHandler::Print1_3(const std::map<std::string, std::string>& msg)
m_newObj[1] = (""); m_newObj[1] = ("");
m_newObj[6] = (""); m_newObj[6] = ("");
m_newObj[17] = ("");
m_newObj[23] = (""); m_newObj[23] = ("");
blTemp = BuildLine(24,m_newObj); blTemp = BuildLine(24,m_newObj);
m_PrintData.insert(m_PrintData.end(), blTemp.begin(), blTemp.end()); m_PrintData.insert(m_PrintData.end(), blTemp.begin(), blTemp.end());
@ -1038,8 +1103,13 @@ void MsgHandler::Print1_3(const std::map<std::string, std::string>& msg)
m_newObj.clear(); m_newObj.clear();
m_newObj[1] = (""); m_newObj[1] = ("");
m_newObj[26] = ("备注"); m_newObj[26] = ("提示");
m_newObj[120] = (""); m_newObj[120] = ("");
it = msg.find("Warning");
if(it != msg.end())
{
m_newObj[145] = it->second;
}
m_newObj[528] = (""); m_newObj[528] = ("");
blTemp = BuildStringLine(m_newObj); blTemp = BuildStringLine(m_newObj);
m_PrintData.insert(m_PrintData.end(), blTemp.begin(), blTemp.end()); m_PrintData.insert(m_PrintData.end(), blTemp.begin(), blTemp.end());

@ -60,13 +60,13 @@ int MsgHandler::RecvDeviceMsg(std::vector<uint8_t>& data, int timeoutMs)
if (bytesRead > 0) if (bytesRead > 0)
{ {
std::cout << "read from " << this->device << std::endl; // std::cout << "read from " << this->device << std::endl;
for (int num : data) // for (int num : data)
{ // {
std::cout << std::hex << std::setw(2) << std::setfill('0') // std::cout << std::hex << std::setw(2) << std::setfill('0')
<< num << " "; // << num << " ";
} // }
std::cout << std::endl; // std::cout << std::endl;
} }
return bytesRead; return bytesRead;

@ -147,6 +147,8 @@ void PublisherApp::on_publication_matched(
} }
} }
uint8_t send_time = 0;
void PublisherApp::run(std::shared_ptr<MsgHandler> handler) void PublisherApp::run(std::shared_ptr<MsgHandler> handler)
{ {
// 配置检测器 - 使用更合理的参数 // 配置检测器 - 使用更合理的参数
@ -160,7 +162,7 @@ void PublisherApp::run(std::shared_ptr<MsgHandler> handler)
config.timeout_extra = 3; // 超时额外次数 config.timeout_extra = 3; // 超时额外次数
config.window_size = 8; // 窗口大小8 config.window_size = 8; // 窗口大小8
config.max_std_dev = 30.0f; // 最大标准差30kg 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.reset_window_on_vehicle_on = true;
config.leave_reset_delay_ms = 500; // 0.5秒后重置 config.leave_reset_delay_ms = 500; // 0.5秒后重置
@ -178,6 +180,7 @@ void PublisherApp::run(std::shared_ptr<MsgHandler> handler)
"VEHICLE_LEAVING" "VEHICLE_LEAVING"
}; };
send_time = 50;
std::cout << "\n=== STATE CHANGE: " << state_names[static_cast<int>(state)] std::cout << "\n=== STATE CHANGE: " << state_names[static_cast<int>(state)]
<< ", Weight: " << weight << " kg ===" << std::endl; << ", Weight: " << weight << " kg ===" << std::endl;
}); });
@ -185,7 +188,7 @@ void PublisherApp::run(std::shared_ptr<MsgHandler> handler)
// 设置重量回调 // 设置重量回调
detector.setWeightCallback([](float weight, bool is_stable, [[maybe_unused]] void* user_data) { detector.setWeightCallback([](float weight, bool is_stable, [[maybe_unused]] void* user_data) {
if (is_stable) { 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<MsgHandler> handler)
auto stats = detector.getStatistics(); auto stats = detector.getStatistics();
auto state = detector.getState(); auto state = detector.getState();
const char *state_names[] = { // const char *state_names[] = {
"NO_VEHICLE", "VEHICLE_ON", "VEHICLE_STABLE", "VEHICLE_LEAVING"}; // "NO_VEHICLE", "VEHICLE_ON", "VEHICLE_STABLE", "VEHICLE_LEAVING"};
std::cout << "State: " << state_names[static_cast<int>(state)] // std::cout << "State: " << state_names[static_cast<int>(state)]
<< ", Stable: " << (detector.isStable() ? "Yes" : "No") // << ", Stable: " << (detector.isStable() ? "Yes" : "No")
<< ", HasVehicle: " << (detector.hasVehicle() ? "Yes" : "No") << std::endl; // << ", HasVehicle: " << (detector.hasVehicle() ? "Yes" : "No") << std::endl;
if (stats.sample_count > 0) // if (stats.sample_count > 0)
{ // {
std::cout << "Stats: Mean=" << std::setprecision(2) << stats.mean // std::cout << "Stats: Mean=" << std::setprecision(2) << stats.mean
<< "kg, StdDev=" << stats.std_dev // << "kg, StdDev=" << stats.std_dev
<< "kg, Range=" << (stats.max - stats.min) // << "kg, Range=" << (stats.max - stats.min)
<< "kg, Samples=" << stats.sample_count << std::endl; // << "kg, Samples=" << stats.sample_count << std::endl;
} // }
// 如果稳定,显示稳定重量 // 如果稳定,显示稳定重量
WeighingSystem::ScaleInfo info; WeighingSystem::ScaleInfo info;
@ -252,7 +255,6 @@ void PublisherApp::run(std::shared_ptr<MsgHandler> handler)
info.WeightOK() = 1; info.WeightOK() = 1;
info.Value() = weight/1000; info.Value() = weight/1000;
info.StableValue() = weight/1000; info.StableValue() = weight/1000;
DEBUG("STABLE WEIGHT: " << detector.getStableWeight() << " kg");
} }
else else
{ {
@ -261,10 +263,19 @@ void PublisherApp::run(std::shared_ptr<MsgHandler> handler)
info.StableValue() = 0; 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 // Wait for period or stop event
std::unique_lock<std::mutex> period_lock(mutex_); std::unique_lock<std::mutex> period_lock(mutex_);
cv_.wait_for(period_lock, std::chrono::milliseconds(period_ms_), [this]() cv_.wait_for(period_lock, std::chrono::milliseconds(period_ms_), [this]()

Loading…
Cancel
Save