<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 基于RS485接口Modbus協(xié)議的PLC與多機通訊

          基于RS485接口Modbus協(xié)議的PLC與多機通訊

          作者: 時間:2013-02-17 來源:網絡 收藏

            上位機PLC 的通訊流程圖如圖4 所示。


            圖4 上位機PLC 的通訊流程圖

            3.2 PLC 與單片機通訊的實現

            表 1 PLC 與單片機通訊的幀字節(jié)數


            單片機進行通信時工作在“方式一”的狀態(tài)下[5]。 因為PLC 發(fā)出的數據幀第一個字符為地址數據,所 以單片機在接收數據時要區(qū)分接收到的數據是否是 幀的第一個字符。根據單片機每接收完一個字節(jié)數 據RI 就置1,而且?guī)g間隔4ms 以上,字符間隔少 于1.72ms, 可以通過計時的方式來判斷幀的第一個 字符。當RI 置1,開始計時,到下一次RI 置1,計 時結束,當時間間隔大于4ms,則后一次RI 置1 時 接收的字符是幀的第一個字符,當時間少于1.72ms, 則不是。

            為了簡化程序,可以協(xié)議好PLC 與單片機通訊 的幀字節(jié)數為6 個字節(jié),如表1。單片機根據地址字 符數據判斷是否是本機地址,如果是,則接收處理 后面的5 個字節(jié)數據,計算前四個字節(jié)的CRC 校驗 碼,并與接收到的兩個字節(jié)CRC 校驗,進行核對, 如果不相同,則不反饋數據給PLC,也不執(zhí)行數據 包含的指令,如果相同,則反饋數據給PLC,執(zhí)行 數據包含的指令。下位機單片機程序的流程圖如圖5 所示。


            4 結束語

            本文作者創(chuàng)新點:在艾默生 PLC 與其變頻器的 通訊基礎上加入了基于RS485 接口Modbus 協(xié)議的 PLC 與單片機的,該通訊方案硬件接口簡 單,軟件和通信協(xié)議有很好的通用性,可以拓展為PLC 與多個變頻器和單片機的同時通訊, 也可應用于其他工程的系統(tǒng)中。該通訊方案已經成功應用于混合動力電動汽車的驅 動電機及發(fā)動機節(jié)氣門的綜合控制。

          參考文獻:

          [1].PLCdatasheethttp://www.dzsc.com/datasheet/PLC_1248813.html.
          [2].RS485datasheethttp://www.dzsc.com/datasheet/RS485_585289.html.
          [3].89C51 datasheethttp://www.dzsc.com/datasheet/89C51+_105386.html.
          [4].TTL datasheethttp://www.dzsc.com/datasheet/TTL+_1174409.html.
          [5].MAX485 datasheethttp://www.dzsc.com/datasheet/MAX485+_859396.html.


          上一頁 1 2 下一頁

          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();