Преглед на файлове

解决plc断线不能重连的问题

zx преди 5 години
родител
ревизия
c15fb9a020
променени са 2 файла, в които са добавени 9 реда и са изтрити 11 реда
  1. 0 2
      plc/LibmodbusWrapper.cpp
  2. 9 9
      plc/plc_communicator.cpp

+ 0 - 2
plc/LibmodbusWrapper.cpp

@@ -78,8 +78,6 @@ namespace modbus
         {
             fprintf(stderr, "CLibmodbusWrapper: Read registers failed: %s\n", modbus_strerror(errno));
             // printf("%s---%s, %d\n", modbus_strerror(errno), "Broken pipe", strcmp(modbus_strerror(errno), "Broken pipe")==0?1:0);
-            if(strcmp(modbus_strerror(errno), "Broken pipe")==0)
-                return -2;
             return -1;
         }
         return 0;

+ 9 - 9
plc/plc_communicator.cpp

@@ -247,17 +247,16 @@ void Plc_Communicator::plc_update_thread(Plc_Communicator *plc_communicator)
     while (!plc_communicator->m_plc_cond_exit.WaitFor(100))
     {
         // std::cout<<" thread 000 "<<std::endl;
-        plc_communicator->m_plc_mutex.lock();
-        plc_communicator->mb_plc_is_connected = plc_communicator->m_plc_wrapper.is_connected();
-        plc_communicator->m_plc_mutex.unlock();
-        // 判断是否初始化完成
-        if (!plc_communicator->mb_plc_initialized)
-            continue;
+
         // 断线重连
         if (!plc_communicator->mb_plc_is_connected)
         {
-            plc_communicator->connect();
-            usleep(1000 * PLC_SLEEP_IN_MILLISECONDS * 10);
+            Error_manager code=plc_communicator->connect();
+            if(code!=SUCCESS)
+            {
+                LOG(ERROR)<<code.to_string();
+            }
+            usleep(1000 * 200);
         }
         else
         {
@@ -266,7 +265,8 @@ void Plc_Communicator::plc_update_thread(Plc_Communicator *plc_communicator)
             int plc_length_temp = PLC_REGION_NUM * PLC_SIGNAL_NUM_PER_REGION;
             uint16_t plc_data_temp[plc_length_temp];
             int rc = plc_communicator->m_plc_wrapper.read_registers(PLC_SIGNAL_BEGIN_OFFSET, plc_length_temp, plc_data_temp);
-            if(rc == -2){
+            if(rc <0)
+            {
                 std::cout<<"find plc disconnected while read. try to reconnect."<<std::endl;
                 plc_communicator->mb_plc_is_connected = false;
                 continue;