找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 2143|回復(fù): 13
打印 上一主題 下一主題
收起左側(cè)

51單片機(jī)多機(jī)通信,主機(jī)如何統(tǒng)計(jì)出從機(jī)的數(shù)量?

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:207051 發(fā)表于 2021-10-1 21:29 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
我想做一個(gè)多機(jī)通信,一主機(jī),1-225個(gè)從機(jī),主機(jī)向從機(jī)發(fā)送地址碼,從機(jī)收到,并回傳給主機(jī),主機(jī)收到如何統(tǒng)計(jì)出來(lái)有多少個(gè)從機(jī)在線?
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:88256 發(fā)表于 2021-10-1 22:37 | 只看該作者
從機(jī)一開(kāi)機(jī)就一直向主機(jī)發(fā)送請(qǐng)求,主機(jī)響應(yīng)后按順序分配從機(jī)地址(可參考I2C總線的仲裁機(jī)制);從機(jī)離線之前必須向主機(jī)發(fā)送離線信號(hào),以便回收地址繼續(xù)利用;如果擔(dān)心從機(jī)突然斷電浪費(fèi)地址,主機(jī)可在比較空閑時(shí)或者定時(shí)發(fā)送特殊的響應(yīng)信號(hào),對(duì)于3次沒(méi)有從機(jī)響應(yīng)的地址加入待分配地址參與分配。
回復(fù)

使用道具 舉報(bào)

板凳
ID:624769 發(fā)表于 2021-10-1 23:08 | 只看該作者
做一個(gè)變量,有回復(fù)就是在線 +1 沒(méi)回復(fù)就是不在線 不加,最后看變量變成幾。
回復(fù)

使用道具 舉報(bào)

地板
ID:420836 發(fā)表于 2021-10-3 08:57 | 只看該作者
根據(jù)從設(shè)備的通信確認(rèn),主設(shè)備可以將連接的設(shè)備總數(shù)加1。
回復(fù)

使用道具 舉報(bào)

5#
ID:637144 發(fā)表于 2021-10-4 15:53 來(lái)自手機(jī) | 只看該作者
一般上線都會(huì)給主機(jī)發(fā)個(gè)信號(hào)
回復(fù)

使用道具 舉報(bào)

6#
ID:883242 發(fā)表于 2021-10-4 16:02 | 只看該作者
發(fā)心跳,沒(méi)回復(fù)就算掉線。問(wèn)題是你不知道n號(hào)站對(duì)應(yīng)哪個(gè)從機(jī)真的能用嗎?
回復(fù)

使用道具 舉報(bào)

7#
ID:819053 發(fā)表于 2022-4-1 15:33 | 只看該作者
188610329 發(fā)表于 2021-10-1 23:08
做一個(gè)變量,有回復(fù)就是在線 +1 沒(méi)回復(fù)就是不在線 不加,最后看變量變成幾。

就是這樣做的,說(shuō)時(shí)統(tǒng)計(jì)不準(zhǔn),時(shí)多時(shí)少
回復(fù)

使用道具 舉報(bào)

8#
ID:819053 發(fā)表于 2022-4-1 15:37 | 只看該作者
Hephaestus 發(fā)表于 2021-10-4 16:02
發(fā)心跳,沒(méi)回復(fù)就算掉線。問(wèn)題是你不知道n號(hào)站對(duì)應(yīng)哪個(gè)從機(jī)真的能用嗎?

我從機(jī)有編號(hào),從機(jī)收到就返回一個(gè)數(shù),主機(jī)變量+1,一個(gè)周期變量清0
回復(fù)

使用道具 舉報(bào)

9#
ID:883242 發(fā)表于 2022-4-1 17:56 | 只看該作者
lisanfang 發(fā)表于 2022-4-1 15:37
我從機(jī)有編號(hào),從機(jī)收到就返回一個(gè)數(shù),主機(jī)變量+1,一個(gè)周期變量清0

那么是問(wèn)題已經(jīng)解決了,還是你還有什么別的問(wèn)題?
回復(fù)

使用道具 舉報(bào)

10#
ID:264021 發(fā)表于 2022-4-1 18:49 | 只看該作者
把每個(gè)從機(jī)設(shè)置一個(gè)名字,每次和主機(jī)交換數(shù)據(jù)時(shí)先發(fā)送名字,后發(fā)送數(shù)據(jù),從機(jī)收到自己的名字時(shí)就收主機(jī)的數(shù)據(jù)進(jìn)行交換
回復(fù)

使用道具 舉報(bào)

11#
ID:207051 發(fā)表于 2022-4-22 22:22 | 只看該作者
188610329 發(fā)表于 2021-10-1 23:08
做一個(gè)變量,有回復(fù)就是在線 +1 沒(méi)回復(fù)就是不在線 不加,最后看變量變成幾。

我就是這種方法,統(tǒng)計(jì)不準(zhǔn),明明有時(shí)12個(gè)在線,顯示11個(gè)   
回復(fù)

使用道具 舉報(bào)

12#
ID:207051 發(fā)表于 2022-4-22 22:26 | 只看該作者
Hephaestus 發(fā)表于 2022-4-1 17:56
那么是問(wèn)題已經(jīng)解決了,還是你還有什么別的問(wèn)題?

至今還在摸索,有時(shí)計(jì)不準(zhǔn)不知道是什么原因,串口有時(shí)也死機(jī)了   
回復(fù)

使用道具 舉報(bào)

13#
ID:207051 發(fā)表于 2022-4-22 22:46 | 只看該作者

void ZOHJI_NUM()   //============================發(fā)從機(jī)代碼=0-255==========
{       
        static uchar  TX_ZHONGJI_COUT=0;//發(fā)送從機(jī)的編碼
               uchar  SLAVE_COUT=0;//從機(jī)從計(jì)數(shù)//

                 //===接收到的數(shù)據(jù)等于發(fā)射的數(shù)據(jù)
             if(ZHONGJI_Dat==TX_ZHONGJI_COUT)
                   {
           ERR_SALVE_TIM=0;                //沒(méi)收到開(kāi)始計(jì)時(shí)          
           TX_ZHONGJI_COUT++;        //發(fā)送從機(jī)號(hào),0-255XTD!
           SLAVE_COUT++;                //從機(jī)返回來(lái)編號(hào)0-255XDNX!收到也開(kāi)始計(jì)數(shù)
                   Slave_PCS++;    //開(kāi)始統(tǒng)計(jì)從機(jī)數(shù)量
                   }
                  
                 if(ZHONGJI_Dat!=TX_ZHONGJI_COUT)
                  
                    {
                  
                      TX_ZHONGJI_COUT;         //發(fā)從機(jī)號(hào)出去,從機(jī)沒(méi)有收到,重發(fā)不變的代碼TX_ZHONGJI_COUT
                      SLAVE_COUT;            //從機(jī)沒(méi)有收到,重發(fā)不計(jì)數(shù)
                               
                      ERR_SALVE_TIM++;  //從機(jī)未收到超時(shí)計(jì)時(shí)
                  
                    }

                         if(ERR_SALVE_TIM==4)
                             {                                         
                              TX_ZHONGJI_COUT++;         //發(fā)從機(jī)號(hào)出去,3次從機(jī)沒(méi)有到,發(fā)下一個(gè)從機(jī)代碼
                                  SLAVE_COUT++;         //統(tǒng)計(jì)從機(jī)數(shù)量加一次。保持跟發(fā)送的代碼同步
                             }
                                                  
                                 if(ERR_SALVE_TIM==7)   //如果3次從機(jī)也沒(méi)有收到就結(jié)束
                             {
                              ERR_SALVE_TIM=0;                                         
                              TX_ZHONGJI_COUT=1;         //如果還沒(méi)有從機(jī)返回來(lái)重新開(kāi)始,表一輪結(jié)束//從1開(kāi)始發(fā)
                                 
                                   SLAVE_COUT=0; //從機(jī)計(jì)數(shù)清0
                  ZHONGJI_PCS_A=Slave_PCS;//把計(jì)數(shù)發(fā)送到遙控器上顯示
                  Slave_PCS=0;        //從機(jī)總計(jì)數(shù)清0                       
                         
                             }
                  
          TX_ZHONGJI_NUM[0]=TX_ZHONGJI_COUT/100+0x30;
      TX_ZHONGJI_NUM[1]=TX_ZHONGJI_COUT%100/10+0x30;
          TX_ZHONGJI_NUM[2]=TX_ZHONGJI_COUT%100%10+0x30;
          TX_ZHONGJI_NUM[3]='X';
      TX_ZHONGJI_NUM[4]='T';
          TX_ZHONGJI_NUM[5]='D';
          TX_ZHONGJI_NUM[6]='!';                 
                                 
        SendString(TX_ZHONGJI_NUM);//發(fā)代碼1-255個(gè)數(shù)          
                                 
  memset(S_tab,0,sizeof(S_tab));        
                  
}       
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表