作者:馬樂
1.主站發送報文結構
大家可以看到我之前寫的文章中的程序都是沒有什么具體功能的,都是兩個站點之間互相傳遞數據,這些數據我們只是看看是否可以正常接收發送,數據本身是沒有任何含義的。很明顯在實際使用過程中我們是不會這樣去用的,對于通訊來說主站發送的數據通常只有兩個功能,一是讀取從站寄存器中地址的狀態也就是從從站讀取數據,二是向從站寫入數據。那么主站要怎么發送數據從站才能知道,主站是要讀數據還是寫數據呢?這個就要靠功能碼來區分了,

圖 1-1
圖 1-1所示就是我自己定義的主站向從站發送讀取從站數據請求的報文結構,說白了就是我自己定義的一個協議,大家可以叫它馬樂協議(^_^)。下面我們一起來看看此報文中四段內容的具體含義。
地址:指的是要讀取哪個從站的數據。
功能碼:指的是主站要對從站做什么操作,我們這條報文格式是我自定義的讀取從站數據的報文(向從站寫入數據報文格式后續文章討論)此處我把讀取從站V區數據的功能碼自定義為02,那么從站只要接收到報文的第二個字符是02從站就知道主站要讀取自己的V區,其他區域大家可以自己定義。
起始地址:讀取數據區域的起始地址。
讀取數量:讀取多少數據。
2.從站返回報文結
既然是主站向從站讀取數據,那么從站接收到指令后肯定要把主站所需要的信息返回給主站,因此從站向主站返回數據也必然有一個報文格式,下面我們一起來看看,我自定義的馬樂協議的從站返回給主站數據的報文結構。

圖2?1
地址:返回數據的從站的地址,讓主站知道這是哪個從站返回來的數據。
功能碼:就是主站發送給從站的那個功能碼,從站再返回給主站。
返回字節數量:一共給主站返回多少個字節的數據,如果此處為6那么此字節后面是6個字節的數據。
返回數據1~n:從站返回給主站的數據,返回數據數量n是由主站讀取數量所決定的。
以上我通過一個我自己定義的協議,向大家介紹了RS485通訊中主站是如何讀取從站數據的過程,當然大家如果有興趣自己也可以定義個張三協議、李四協議自己玩玩,下篇文章我就教大家如何將我上面的自定義協議,變成PLC的程序。
往期優秀文章回顧:
當電工許多年,你知道為啥標準信號就是4-20mA?