国产蝌蚪视频在线观看_亚洲亚色_日批网站免费_亚拍一区_69网站_九热精品_最新中文在线视频_欧美视频日韩视频_国内精品二区_天堂资源站_av综合一区_国产精品久免费的黄网站_四虎免费在线观看_少妇做爰奶水狂喷视频_野花视频韩国免费观看3_久久国产精品亚洲人一区二区三区_国产日产精品_国产精品毛片_亚洲精品久久草草起碰_国产偷国产偷亚洲综合av_两个人日本WWW免费版_91麻豆视频_亚欧在线观看视频_久久久99免费_久久精品视频12_麻豆视频播放_日本高清WWW午色夜COM_公和我做好爽添厨房_成人午夜剧场在线观看_gay无套ⅹxxoo_在线观看成人福利

  • 華南貓
    PLC無(wú)線通訊遠(yuǎn)程控制巨控黃工:18922726899
    級(jí)別: 探索解密
    精華主題: 0
    發(fā)帖數(shù)量: 0 個(gè)
    工控威望: 178 點(diǎn)
    下載積分: 860 分
    在線時(shí)間: 43(小時(shí))
    注冊(cè)時(shí)間: 2017-02-21
    最后登錄: 2025-08-22
    查看華南貓的 主題 / 回貼
    樓主  發(fā)表于: 2019-01-17 14:20
    1. 基本的通訊方式
    基本的通訊方式有并行通訊和串行通訊兩種。

    并行通信:是指數(shù)據(jù)的各位同時(shí)進(jìn)行傳送的通信方式。

    串行通信:是指數(shù)據(jù)一位一位順序傳送的通信方式。

    2. 串行通訊的兩種方式
    串行通信的兩種基本形式:同步通信和異步通信。

    異步通信所傳輸?shù)臄?shù)據(jù)幀格式是由1個(gè)起始位、1~9個(gè)數(shù)據(jù)位、1~2個(gè)停止位組成,依靠起始位和停止位保持同步;

    同步通信所傳輸數(shù)據(jù)幀格式是由多個(gè)字節(jié)組成的一個(gè)幀,每個(gè)幀都有兩個(gè)(或一個(gè))同步字符作為起始位以觸發(fā)同步時(shí)鐘開(kāi)始發(fā)送或接收數(shù)據(jù)。


    3. 根據(jù)傳送方向分類(lèi)
      根據(jù)信息的傳送方向,串行通訊可以進(jìn)一步分為單工、半雙工和全雙工三種。
      如果在通信過(guò)程的任意時(shí)刻,信息只能由一方A傳到另一方B,則稱為單工!         
      如果在任意時(shí)刻,信息既可由A傳到B,又能由B傳A,但只能由一個(gè)方向上的傳輸存在,稱為半雙工傳輸! 
      如果在任意時(shí)刻,線路上存在A到B和B到A的雙向信號(hào)傳輸,則稱為全雙工。



    4. 串行通訊接口
    串行通訊物理接口按電氣標(biāo)準(zhǔn)及協(xié)議來(lái)分包括RS-232、RS-422、RS485等,這里主要講一些最常用的RS485接口。

    5. RS485接口電路


    作為一個(gè)經(jīng)常被應(yīng)用到的SP485R芯片的示范電路,可以被直接嵌入實(shí)際的RS-485

    應(yīng)用電路中。微處理器的標(biāo)準(zhǔn)串行口通過(guò)RXD 直接連接SP485R 芯片的RO 引腳,通過(guò)TXD直接連接SP485R 芯片的DI 引腳。

    由微處理器輸出的R/D 信號(hào)直接控制SP485R 芯片的發(fā)送器/接收器使能:R/D 信號(hào)為“1”,則SP485R 芯片的發(fā)送器有效,接收器禁止,此時(shí)微處理器可以向RS-485 總線發(fā)送數(shù)據(jù)字節(jié);R/D 信號(hào)為“0”,則SP485R 芯片的發(fā)送器禁止,接收器有效,此時(shí)微處理器可以接收來(lái)自RS-485 總線的數(shù)據(jù)字節(jié)。此電路中,任一時(shí)刻SP485R 芯片中的“接收器”和“發(fā)送器”只能夠有1 個(gè)處于工作狀態(tài)。

    連接至A 引腳的上拉電阻R7、連接至B 引腳的下拉電阻R8 用于保證無(wú)連接的SP485R芯片處于空閑狀態(tài),提供網(wǎng)絡(luò)失效保護(hù),以提高RS-485 節(jié)點(diǎn)與網(wǎng)絡(luò)的可靠性。

    如果將SP485R 連接至微處理器80C51 芯片的UART 串口,則SP485R 芯片的RO 引腳不需要上拉;否則,需要根據(jù)實(shí)際情況考慮是否在RO 引腳增加1 個(gè)大約10K 的上拉電阻。


    6. 串口MODBUS通訊
          Modbus作為工業(yè)通信回路中數(shù)據(jù)交換的規(guī)則已經(jīng)被廣泛地應(yīng)用在各個(gè)領(lǐng)域,使得具有Modbus 通信協(xié)議的設(shè)備方便通信,例如PLC、變頻器、流量計(jì)、溫濕度、上位機(jī)組態(tài)軟件、各種傳感器儀表等。

          Modbus通信協(xié)議分為兩種串行通信模式,ASCII 和RTU 通信模式。在使用時(shí),需要先設(shè)定通信模式以及串行口RS232、RS485的通信參數(shù)(波特率,奇偶校驗(yàn),從機(jī)地址,數(shù)據(jù)位,停止位,字節(jié)順序),在Modbus 總線上的所有設(shè)備應(yīng)具有相同的通信模式和串行通信參數(shù)

    modbus信息幀結(jié)構(gòu)組成



    7. MODBUS命令報(bào)文
    讀數(shù)據(jù)    


    8. MODBUS關(guān)鍵概念
        

    (1)上位機(jī)讀取數(shù)據(jù)每次間隔時(shí)間一般不小于100ms

    (2)設(shè)備地址:MODBUS從機(jī)通訊地址,在一個(gè)網(wǎng)絡(luò)中不能有兩個(gè)相同的地址。(3)功能碼:MODBUS 協(xié)議規(guī)定的功能碼

    (4)寄存器地址和寄存器數(shù)

    主站命令中的參數(shù)是從寄存器地址開(kāi)始的寄存,讀寄存器長(zhǎng)度的N個(gè)寄存器。(5)從站響應(yīng)數(shù)據(jù)

    從站響應(yīng)數(shù)據(jù)是:字節(jié)數(shù)和N個(gè)數(shù)字節(jié)數(shù)據(jù)。





    9. MODBUS主站常用操作
        


    1)讀優(yōu)化:對(duì)于不連續(xù)地址的數(shù)據(jù)讀取,是否采取打包讀,則系統(tǒng)使用打包讀命令,一次性完成多個(gè)地址的讀取。

    2)讀優(yōu)化間隔:讀優(yōu)化時(shí),若地址之間小于此間隔,則會(huì)打包到一起,使用多讀命令一次讀取。

    3)最大包長(zhǎng):一次通訊允許的最大數(shù)據(jù)長(zhǎng)度。

    4)字節(jié)順序:調(diào)整32位雙字的解碼順序。

    以32位整數(shù)為例,說(shuō)明字節(jié)順序的含義:

    1234:表示雙字元件不做處理直接解碼,。

    例如:從串口讀到的數(shù)據(jù)為0000 00 01 表示 1。

    2143:表示雙字元件高低字不顛倒,但字內(nèi)高低字節(jié)顛倒。

    例如:從串口讀到的數(shù)據(jù)為0000 00 01 表示 0x00000100 (即256)。

    3412:表示雙字元件高低字顛倒,但字內(nèi)高低字節(jié)不顛倒。

    例如:從串口讀到的數(shù)據(jù)為0000 00 01 表示 0x00010000 (即65536)。

    4321:表示雙字元件內(nèi)4個(gè)字節(jié)全部顛倒。

    例如:從串口讀到的數(shù)據(jù)為00 00 00 01 表示 0x0100 0000 (即1677 721





    10. C語(yǔ)言MODBUS程序
        

    (1).CRC16算法:

    INT16U CRC16(INT8U *puchMsg, INT16U usDataLen)

    {

       INT8U uchCRCHi = 0xFF;               /* 高CRC字節(jié)初始化 */

       INT8U uchCRCLo = 0xFF;               /* 低CRC 字節(jié)初始化 */

       INT8U uIndex;                        /* CRC循環(huán)中的索引 */

       while (usDataLen--)                  /* 傳輸消息緩沖區(qū) */

       {

          uIndex = uchCRCHi ^*puchMsg++;   /* 計(jì)算CRC */

          uchCRCHi = uchCRCLo ^auchCRCHi[uIndex];

          uchCRCLo = auchCRCLo[uIndex];

       }

       return (uchCRCHi << 8 |uchCRCLo);

    }



    (2)發(fā)送命令程序

    本例程以Mag64為核心CPU

    void Read_InPut(INT8U Addr,INT16UStart,INT16U Len)

    {

       INT16U CRC;

       SendBuffer_485[0]=Addr;                  //設(shè)備地址

       SendBuffer_485[1]=0x04;                  //modbus功能碼

       SendBuffer_485[2]=Start/256;             //Start為寄存器地址

       SendBuffer_485[3]=Start%256;

       SendBuffer_485[4]=Len/256;               //Len為讀取寄存器長(zhǎng)度

       SendBuffer_485[5]=Len%256;

       CRC=CRC16(SendBuffer_485,6);

       SendBuffer_485[6]=CRC/256;               //CRC校驗(yàn)高位

       SendBuffer_485[7]=CRC%256;               //CRC校驗(yàn)低位

       R485_OUT;                                //使能RS485發(fā)送

       SendLen_485=8;

       SendNum_485=0;

       CloseINT0();                            //關(guān)閉串口接受中斷

       UCSR0B |= BIT(UDRIE0);                  //打開(kāi)串口發(fā)送中斷

    }



    (3)返回?cái)?shù)據(jù)解析

    數(shù)據(jù)接收使用串口中斷,ReceivedBuffer_485為接收數(shù)據(jù)組,ReceivedNum_485為接收到數(shù)據(jù)長(zhǎng)度,ReceivedFlag_485接收到數(shù)據(jù)標(biāo)志。函數(shù)float Datasum(INT8UBYTE1, INT8U BYTE2, INT8U BYTE3, INT8U BYTE4)把浮點(diǎn)數(shù)的4個(gè)字節(jié)轉(zhuǎn)換為1個(gè)浮點(diǎn)數(shù)。

    float Datasum(INT8U FloatByte1, INT8U FloatByte2,INT8U FloatByte3, INT8U FloatByte4)

    {  

    float aa;

    union IntTOFP

       {      

          FP32       F32;

          INT8U      T8[4];

       };

       union IntTOFPaa;

      aa.T8[0] = FloatByte1;                    

    aa.T8[1] = FloatByte2;

    aa.T8[2] = FloatByte3;

    aa.T8[3] = FloatByte4;

    return aa;

    }

    void Read_Lmag(INT8U Ad)

    {

       INT8U  i,j;

       INT8U  Num1[10],BIT;

       INT16UCRC1,CRC2;

       FP32  Flow;                                 //aaa為瞬時(shí)流量數(shù)值

      ReceivedFlag_485=1;

      Open_Time1_Ms5(20);

      Read_InPut(Ad,0x1010,2);                   //發(fā)送設(shè)備地址、寄存器地址、寄存器長(zhǎng)度

      while(ReceivedFlag_485);                   //等待接收結(jié)束

      if((ReceivedNum_485==9)&&(ReceivedBuffer_485[0]==Ad))    // 判斷數(shù)據(jù)是否正確

       {

          CRC1=CRC16(ReceivedBuffer_485,7);                

         CRC2=ReceivedBuffer_485[7]*256+ReceivedBuffer_485[8];

          if(CRC1==CRC2)

          {// 轉(zhuǎn)換數(shù)據(jù)為浮點(diǎn)數(shù)

    Flow= Datasum(ReceivedBuffer_485[6], ReceivedBuffer_485[5], ReceivedBuffer_485[4] ,ReceivedBuffer_485[3]);

           }

    }

    }



    11. MODBUS調(diào)試軟件MODBUS PULL
        

    以從站地址為1,波特率9600,讀取所有實(shí)時(shí)數(shù)據(jù)為例設(shè)置方法如下:

    按照表2所示:起始寄存器地址4113  寄存器個(gè)數(shù)為22

    1. 設(shè)置采集命令包括設(shè)備地址(1)、MODBUS功能碼(04)、寄存器地址(4113)、寄存器長(zhǎng)度(2)、采集間隔(1000)。  


    2.設(shè)置串口數(shù)據(jù)

    根據(jù)從機(jī)串口格式(1位起始位 8位數(shù)據(jù)位 1位停止位,無(wú)校驗(yàn))設(shè)置如下圖:


    3.設(shè)置數(shù)據(jù)顯示格式


    4.通訊成功界面

      
    本帖最近評(píng)分記錄:
  • 下載積分:+1(yu1804353868) 真誠(chéng)感謝!
  • 下載積分:+3(ipc小許)
  • 下載積分:+5(祝鐘劍) 真誠(chéng)感謝!
  • 下載積分:+5(mk自動(dòng)化) 真誠(chéng)感謝!
  • 下載積分:+1(夏日雪夢(mèng)) 真誠(chéng)感謝!
  • 技術(shù)咨詢熱線:18922726899  巨控黃工
    roy_poon
    級(jí)別: 略有小成
    精華主題: 0
    發(fā)帖數(shù)量: 0 個(gè)
    工控威望: 240 點(diǎn)
    下載積分: 64799 分
    在線時(shí)間: 616(小時(shí))
    注冊(cè)時(shí)間: 2013-11-09
    最后登錄: 2025-09-17
    查看roy_poon的 主題 / 回貼
    1樓  發(fā)表于: 2019-07-06 15:22
    謝謝分享!

    溧水县| 高雄县| 新龙县| 三明市| 阿克苏市| 政和县| 伊通| 阳新县| 土默特左旗| 东乌| 临泉县| 泽库县| 淄博市| 萨迦县| 睢宁县| 车险| 磐安县| 宁远县| 米泉市| 八宿县| 韩城市| 镇康县| 阳春市| 孝感市| 报价| 固镇县| 兴化市| 灵台县| 井研县| 龙江县| 昌江| 吉隆县| 镇宁| 贡山| 盐亭县| 青冈县| 资中县| 大理市| 新河县| 铜鼓县| 错那县|