浏览代码

add prototxt reader function and a plc prototxt file.

youchen 5 年之前
父节点
当前提交
c1b7b7cb5b
共有 4 个文件被更改,包括 56 次插入24 次删除
  1. 39 17
      plc/plc_communicator.cpp
  2. 8 2
      plc/plc_communicator.h
  3. 3 0
      test/plc.prototxt
  4. 6 5
      test/plc_test.cpp

+ 39 - 17
plc/plc_communicator.cpp

@@ -1,29 +1,51 @@
 #include "plc_communicator.h"
 
+#include "string.h"
+#include <iostream>
+#include <stdint.h>
+
+Error_manager Plc_Communicator::ReadProtoParam(std::string path)
+{
+    int fd = open(path.c_str(), O_RDONLY);
+    if (fd == -1) Error_manager(Error_code::PARAMETER_ERROR);
+    FileInputStream* input = new FileInputStream(fd);
+    bool success = google::protobuf::TextFormat::Parse(input, &m_connection_params);
+    // std::cout<<m_global_param.data_path()<<std::endl;
+    delete input;
+    close(fd);
+    if(success){
+        return Error_manager(Error_code::SUCCESS);
+    }else{
+        return Error_manager(Error_code::PARAMETER_ERROR);
+    }
+}
+
 // ××××××××××× 构造与析构 ×××××××××××
-Plc_Communicator::Plc_Communicator(plc_module::plc_connection_params connection_params) : mb_plc_initialized(false),
+Plc_Communicator::Plc_Communicator(std::string plc_config_path) : mb_plc_initialized(false),
                                                                              mb_plc_is_connected(false),
                                                                              mb_plc_is_updating(false),
                                                                              mp_plc_owner(0),
                                                                              m_plc_thread(0)
 {
-    m_plc_ip_str = connection_params.ip();
-    m_plc_port = connection_params.port();
-    m_plc_slave_id = connection_params.slave_id();
-    m_plc_current_error = Error_manager(Error_code::SUCCESS, Error_level::NORMAL, "初始状态正常");
-    m_plc_status_update_timeout = 10000;
-    for (size_t i = 0; i < PLC_REGION_NUM; i++)
-    {
-        m_plc_region_status[i].last_time_point = std::chrono::steady_clock::now();
-        m_plc_region_status[i].current_status = 255;
-        m_plc_region_status[i].cmd = 0;
-    }
+    if(ReadProtoParam(plc_config_path).is_equal_error_manager(Error_manager(Error_code::SUCCESS))){
+        m_plc_ip_str = m_connection_params.ip();
+        m_plc_port = m_connection_params.port();
+        m_plc_slave_id = m_connection_params.slave_id();
+        m_plc_current_error = Error_manager(Error_code::SUCCESS, Error_level::NORMAL, "初始状态正常");
+        m_plc_status_update_timeout = 10000;
+        for (size_t i = 0; i < PLC_REGION_NUM; i++)
+        {
+            m_plc_region_status[i].last_time_point = std::chrono::steady_clock::now();
+            m_plc_region_status[i].current_status = 255;
+            m_plc_region_status[i].cmd = 0;
+        }
 
-    m_plc_data.resize(PLC_REGION_NUM * PLC_SIGNAL_NUM_PER_REGION);
-    m_plc_current_error = connect();
-    m_plc_cond_exit.Notify(false);
-    m_plc_thread = new std::thread(plc_update_thread, this);
-    mb_plc_initialized = true;
+        m_plc_data.resize(PLC_REGION_NUM * PLC_SIGNAL_NUM_PER_REGION);
+        m_plc_current_error = connect();
+        m_plc_cond_exit.Notify(false);
+        m_plc_thread = new std::thread(plc_update_thread, this);
+        mb_plc_initialized = true;
+    }
 }
 
 Plc_Communicator::~Plc_Communicator()

+ 8 - 2
plc/plc_communicator.h

@@ -9,6 +9,11 @@
 #include <unistd.h>
 #include <chrono>
 #include <cmath>
+#include <fstream>
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
 
 // #include "../error.h"
 #include "../task/task_command_manager.h"
@@ -63,7 +68,7 @@ class Plc_Communicator
 {
     
 public:
-    Plc_Communicator(plc_module::plc_connection_params connection_params);
+    Plc_Communicator(std::string plc_config_path);
     ~Plc_Communicator();
 
     // get set 方法
@@ -88,6 +93,7 @@ public:
 
 private:
     // 读写线程函数
+    Error_manager ReadProtoParam(std::string path);
     static void plc_update_thread(Plc_Communicator* plc_communicator);
     Error_manager write_result_to_plc(struct measure_result result);
     // 连接函数
@@ -117,7 +123,7 @@ private:
     // 之后根据外部传入的task,决定写入3或4,默认3保留3秒,4持续保留直到新指令
     plc_region_status   m_plc_region_status[PLC_REGION_NUM];   
 
-    
+    plc_module::plc_connection_params m_connection_params; // 连接参数
 };
 
 #endif // !PLC_COMMUNICATOR_HH

+ 3 - 0
test/plc.prototxt

@@ -0,0 +1,3 @@
+ip:"192.168.2.131"
+port:502
+slave_id:1

+ 6 - 5
test/plc_test.cpp

@@ -74,11 +74,12 @@ private:
 
 int main(int argc,char* argv[])
 {
-    plc_module::plc_connection_params params;
-    params.set_ip("192.168.2.131");
-    params.set_port(502);
-    params.set_slave_id(1);
-    Plc_Communicator pc(params);
+    // plc_module::plc_connection_params params;
+    // params = google::protobuf
+    // params.set_ip("192.168.2.131");
+    // params.set_port(502);
+    // params.set_slave_id(1);
+    Plc_Communicator pc("../test/plc.prototxt");
     Test test(&pc);
     Error_manager ec = pc.set_plc_callback(test.callback, &test);
     std::cout<<"set callback "<<ec.to_string()<<std::endl;