MODBUS協議在STM32上實現 --- 上篇
主要參考是育靈科技視訊,需要的可以聯絡我
參考資料:
1.Modbus通訊協議.pdf
2.Modbus除錯精靈1.024.rar
3.主機原始碼.rar
第一節 通訊的硬體協議機制 主從模式的建立
目的:實現在modbus的從機實現
1.硬體層協議 解決傳輸問題,相當於路
2.軟體層協議
舉例:
例如RS232 傳送1是多少V,傳送0是多少V
485協議
這個硬體晶片是廠商做到一起的,一般需要有一根控制線用開判斷是哪種模式
CAN硬體協議也是類似的
1: 都是2.5V 沒有壓差
0:一個1.5V,一個3.5V 有一個壓差
還有I2C,SPI 都是有自己的硬體協議,大同小異,都是一樣的理解,很簡單的
大致說下單工半雙工
1.單工模式:方向只能朝一個方向去
2.半雙工:通過協調可以實現兩個方向的傳輸
485若想實現半雙工的模式,需要軟體層來指定
最簡單的方式:引入一個主從模式,
--只有一個主機
-- 485的一個規則,任何時候,從機不能主動把資料發回來主機
所以軟體層就是交通規則
第二節 硬體層半雙工通訊方式的實現
--上電後主機和從機都需要一直處於監聽狀態
--任何一次的通訊都需要主機的發起
軟體層比較常見的就是modbus協議
就是一種預先約定的格式,不用自己定義了,移植性好,適配性好
解決通用問題
基本模式
1.轉為傳送狀態
2. ---首先,主機發出一組定址命令幀,找誰,幹什麼
3.立刻轉為接受狀態,等待從機的執行迴應,一定要有迴應,也是按照modbus來回應
所以之後無論設計哪種協議,都是考慮兩方面
硬體協議
軟體協議
第三節 基於485的modbus協議,確定主機取地址幀格式
主要使用與一主多從的模式
modbus可以應用於很多硬體,232,i2c,spi,網線,都是可以的
所以說 基於485的modbus協議,其實是硬體加軟體
網路就是多主機,can通訊也是多主機模式
就是一個通過硬體的技術解決 ,防衝突載波監聽技術
就是每次發都會自己仲裁下,知道仲裁成功才會開始發自己的資料
1.
但是485不具備,所以485只能有一個主機,從機必須有唯一的地址
就是寫程式的人在從機中定義了一個變數,modbus的地址是從0 --- 247號
其中0號地址是廣播地址,是主機保留的,若是包頭是0的話,就是要把包發給所有的從裝置,所以0號地址從機是不予迴應的
從機迴應主機的時候,需要加上自己的地址,不會干擾其他從機
2.資料結構,也就是modbus的主機定址幀的高格式
---RTU方式 十六進位制方式
0x03 00000011
---ASC方式 ---都是換算為ASSIC傳送
0x03 分成兩個0x30和0x33,需要傳兩次,所以效率是比較低的
計算機列印ASSIC碼是32到126,所以會出現下邊的方式,所以除錯的時候很方便,可以外接一個顯示器進去
第四節 RTU的機制及資料傳輸實現方式
RTU方式
怎麼知道傳送完畢,就是傳送之後停止3.5個字元,接受資料停止時間超過3.5個位元組,就認為主機定址幀完成,開始停止
怎麼計算:
例如:波特率 9600
每位資料傳輸的時間 :大約是4個微秒
若是停止沒有3.5個位元組時間,又傳送指令,之前的指令是會被放棄的
這是RTU模式唯一的難點
RTU模式是沒有開始與結束標誌的,就是靠時間來約定,所以就需要硬體一個定時器,一個串列埠
第五節 ASC方式
有明確的開始的標誌:先發一個0x3A,就是一個冒號 :
LRC模式
就是相加求和,除以256求餘數(肯定是0到256的數),取反再加一,就是求補碼的過程
結束符號 \r \n 就是 13 10
從機的反饋問題:
1.迴應包的資料格式是一致的
2.正常的迴應時,功能碼與主機的功能碼一致(1-127)
異常的迴應:在收到的功能碼加128,這也是程式判斷的依據
從機的實現:
1.具備串列埠
2.具備毫秒級定時器