Bladeren bron

解决开关检测板和控制板冲突。

liyi 2 jaren geleden
bovenliggende
commit
0842d7bf3f
2 gewijzigde bestanden met toevoegingen van 28 en 23 verwijderingen
  1. 22 0
      pro/src/app.c
  2. 6 23
      pro/src/breaker_detection.c

+ 22 - 0
pro/src/app.c

@@ -87,6 +87,8 @@ void* power_thread(void* arg)
         }
         //usleep(300000);
     }
+
+
     
     //采集线程
     while (h->quit==0)
@@ -1754,6 +1756,26 @@ int _global_device_manage_init(GlobalDeviceManager* _globalDeviceManager)
         return -1 ;
     }
     log_i("Relay modbus init ok.\n");
+
+
+
+    //first scannner breaker borad;
+    unsigned short value;
+    breaker_scanner_t* breaker= get_breaker_scanner();
+    memset(breaker,0,sizeof(breaker_scanner_t));
+    for(int i = 0; i < BREAKER_BOARD_MAX; i++)
+    {
+        ret = breaker_485_get_chn_status((void*)&_globalDeviceManager->_globalRelaySampManger,
+                BREADER_485_ADDR+i,BREADER_485_ADDR_CHN_REG,&value);
+        log_d("ret:%d breaker id:%d .\n",ret,BREADER_485_ADDR+i);
+        if(ret == 0)
+        {
+            breaker->breaker_flag[i] = 1;
+        }else
+        {
+            breaker->breaker_flag[i] = 0;
+        }
+    }
     //搜索子地址
     chn = 1 ;
     nTac_chn=3;

+ 6 - 23
pro/src/breaker_detection.c

@@ -169,29 +169,13 @@ void* breaker_scanner_thread(void* argv)
     //GlobalDeviceManager* gm= (GlobalDeviceManager*)(argv);
     thread_handle_t *h=(thread_handle_t*)(argv);
     GlobalDeviceManager* gm= (GlobalDeviceManager*)(h->arg);
-    memset(&breaker_scanner,0,sizeof(breaker_scanner));
+   // memset(&breaker_scanner,0,sizeof(breaker_scanner));
     int ret = 0;
     uint16_t value =0;
     uint16_t status[BREAKER_485_CHN_MAX] = {0};
     //scanner all boadr
-    for(int i = 0; i < BREAKER_BOARD_MAX; i++)
-    {
-        ret = breaker_485_get_chn_status((void*)&gm->_globalRelaySampManger,
-                BREADER_485_ADDR+i,BREADER_485_ADDR_CHN_REG,&value);
-        if(ret < 0)
-        {
-            ret = breaker_485_get_chn_status((void*)&gm->_globalRelaySampManger,
-                BREADER_485_ADDR+i,BREADER_485_ADDR_CHN_REG,&value);
-        }
-        if(ret == 0)
-        {
-            breaker_scanner.breaker_flag[i] = 1;
-        }else
-        {
-            breaker_scanner.breaker_flag[i] = 0;
-        }
-    }
-    int count = 0;
+    //int count = 0;
+    breaker_scanner_t * breaker=get_breaker_scanner();
 
     while(h->quit==0)
     {
@@ -214,12 +198,12 @@ void* breaker_scanner_thread(void* argv)
 
         for(int i = 0; i < BREAKER_BOARD_MAX; i++)
         {
-            if(breaker_scanner.breaker_flag[i])
+            if(breaker->breaker_flag[i])
             {
 
                     breaker_485_get_all_chn_status((void*)&gm->_globalRelaySampManger,BREADER_485_ADDR+i,status);
                     pthread_mutex_lock(&gm->_breaker_mutex);
-                    memcpy(breaker_scanner.board[i].ch_status,status,sizeof(status));
+                    memcpy(breaker->board[i].ch_status,status,sizeof(status));
                     pthread_mutex_unlock(&gm->_breaker_mutex);
                 // ret = breaker_485_get_chn_status((void*)&gm->_globalRelaySampManger,
                 //     BREADER_485_ADDR+i,BREADER_485_ADDR_CHN_REG,&value);
@@ -241,11 +225,10 @@ void* breaker_scanner_thread(void* argv)
             {
                 memset(status,0,sizeof(status));
                 pthread_mutex_lock(&gm->_breaker_mutex);
-                memcpy(breaker_scanner.board[i].ch_status,status,sizeof(status));
+                memcpy(breaker->board[i].ch_status,status,sizeof(status));
                 pthread_mutex_unlock(&gm->_breaker_mutex);
             }
         }
-        count ++;
         sleep(1);
     }