From 847102ee66d8a3f1c7bfa3ef51946bdcec4c8c74 Mon Sep 17 00:00:00 2001 From: Vadim Sychev Date: Fri, 26 Aug 2022 16:36:06 +0300 Subject: [PATCH] =?UTF-8?q?dev(UML-981):=20=D0=9E=D1=82=D0=BB=D0=B0=D0=B6?= =?UTF-8?q?=D0=B5=D0=BD=20=D0=BE=D0=B1=D0=BC=D0=B5=D0=BD=20=D0=B1=D0=B8?= =?UTF-8?q?=D1=82=D0=B0=D0=BC=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- profinet_test/sample_app_echo/main.cpp | 59 ++++++++++++++++++++------ src/configuration/program_config.cpp | 6 +-- src/user_data/user_data.cpp | 7 +-- 3 files changed, 52 insertions(+), 20 deletions(-) diff --git a/profinet_test/sample_app_echo/main.cpp b/profinet_test/sample_app_echo/main.cpp index f5bffa2..a090eb5 100644 --- a/profinet_test/sample_app_echo/main.cpp +++ b/profinet_test/sample_app_echo/main.cpp @@ -368,24 +368,55 @@ int main(int argc, char * argv[]) { case BIT_SUBMOD_ID: { - uint8_t bits = 0; + static uint8_t value_bits[8]; + uint8_t bits[8]; + //std::cout << "Bits: " << jx.dump() << std::endl; - /*in = jx["data"]["bytes"].get>(); - if (in.size() == 1) - { - std::copy(in.begin(), in.end(), &bits); - } + bits[0] = jx.at("data").at("I808OutBits").at("out_bit_0").get(); + bits[1] = jx.at("data").at("I808OutBits").at("out_bit_1").get(); + bits[2] = jx.at("data").at("I808OutBits").at("out_bit_2").get(); + bits[3] = jx.at("data").at("I808OutBits").at("out_bit_3").get(); + bits[4] = jx.at("data").at("I808OutBits").at("out_bit_4").get(); + bits[5] = jx.at("data").at("I808OutBits").at("out_bit_5").get(); + bits[6] = jx.at("data").at("I808OutBits").at("out_bit_6").get(); + bits[7] = jx.at("data").at("I808OutBits").at("out_bit_7").get(); - if (bits != value_bit) - { - value_bit = bits; + bool newdata = false; - std::cout << "New bit data from PLC: " << value_bit << std::endl; - } + for (int i = 0; i < 8; ++i) + { + if (bits[i]!= value_bits[i]) + { + newdata = true; + } + } - bits = ~bits; - putCyclicData(j_set_echo_data, module_id, submodule_id, &bits, 1);*/ + if (newdata) + { + std::cout << "New bit data from PLC: " << std::endl; + std::cout << "I808OutBits:" << std::endl; + + for (int i = 0; i < 8; ++i) + { + value_bits[i] = bits[i]; + std::cout << "out_bit_" << i << ":" << std::to_string(bits[i]) << std::endl; + } + } + + json j_set_data; + j_set_data["module_id"] = module_id; + j_set_data["submodule_id"] = submodule_id; + + auto& data = j_set_data["data"]["I808InpBits"]; + + for (int i = 0; i < 8; ++i) + { + bits[i] = (~bits[i]) & 0x01; + std::string bit_name = "in_bit_" + std::to_string(i); + data[bit_name] = bits[i]; + } + j_set_echo_data["params"].push_back(j_set_data); } break; default: @@ -407,7 +438,7 @@ int main(int argc, char * argv[]) } ///Записываем данные *p_output_stream_ << j_set_echo_data.dump() << std::endl; - std::cout << "OUT: " << j_set_echo_data.dump() << std::endl; + //std::cout << "OUT: " << j_set_echo_data.dump() << std::endl; j_set_echo_data["params"].array().clear(); answer_str.clear(); ///Ждем ответ diff --git a/src/configuration/program_config.cpp b/src/configuration/program_config.cpp index e25a08e..4b05dff 100644 --- a/src/configuration/program_config.cpp +++ b/src/configuration/program_config.cpp @@ -266,13 +266,13 @@ static bool programconf_getCyclicDataSettings(const json& j_cyc_data, std::map(); - auto Type = j_bit.at("BitOffset").get(); + auto Pos = j_bit.at("BitOffset").get(); - usr_data.putBit(name, Type); + usr_data.putBit(name, Pos); } } } diff --git a/src/user_data/user_data.cpp b/src/user_data/user_data.cpp index c6eb244..f5b2578 100644 --- a/src/user_data/user_data.cpp +++ b/src/user_data/user_data.cpp @@ -1,6 +1,7 @@ #include "user_data.hpp" #include #include "../endian/endian.hpp" +#include using json = nlohmann::json; @@ -34,7 +35,7 @@ const std::map UserData::data_corr { bool UserData::putBit(std::string& bit_name, uint32_t bit_pos) { - if (bits_.size() >= size) + if (bits_.size() >= size * 8) return false; /// Все биты уже заняты bits_.push_back(UserDataBit{bit_name, bit_pos}); @@ -112,9 +113,9 @@ bool UserData::toRpcJson(nlohmann::json& j) return false; json& j_bit = j[name]; - for (auto bit : bits_) + for (auto& bit : bits_) { - j_bit[bit.Name] = static_cast(data_.uint64 & (1 << bit.Pos)); + j_bit[bit.Name] = ( data_.uint64 & (1 << bit.Pos) ) ? (1) : (0); } }