學習S7-200 SMART時了解到,基于RS485接口可實現一下幾種通信:
1)modbus RTU通信
2)PPI協議通信
3)USS協議通信
4)自由口通信
何為自由口通信呢?
前三種通信必須要PLC和與其通信的設備支持相同的通信協議,如果兩者之間沒有共同的通信協議則需要用到自由口通信。自由口通信也稱無協議通信,需要根據對方設備的通信數據格式編寫一個臨時協議,不僅需要編程人員學會如何編寫程序,還需要了解對方的通信數據格式,所以對編程人員要求較高,隨著標準協議(modbus,USS等)普及,自由口應用越來越少,但是對于一下小的設備如掃碼槍等,并沒有集成標準通信協議,所以只能選用自由口通信,Moubus和USS其實是自由口的一個特例。很多人碰到自由口通信就手足無措了,其實只要掌握規律,自由口通信不一定很難。為此我總結了自由口通信的基本步驟:
1)讀懂對方的數據格式。
串行通信中,數據是一位一位的進行發送,也就是0和1。為了能夠準確的將數據發送過去,往往會加上1個起始位,1個校驗位,1個停止位(無校驗是為2個停止位)如圖1-1所示。
圖1-1
我們就以Modbus RTU為例詳細看一下串口通信中數據是如何發送和就收的。
ModbusRTU代碼系統如下:
·1個起始位。
·7或8個數據位,最小的有效位先發送。
·1個奇偶校驗位,設成無校驗則沒有。
·1個停止位(有校驗時),2個Bit(無校驗時)。
數據格式的描述如下表:
11-bit字符幀(BITl-BIT8為數據位):
起始位 | Bit1 | Bit2 | Bit3 | Bit4 | Bit5 | Bit6 | Bit7 | Bit8 | 校驗位 | 停止位 |
10-bit字符幀(BITl-BIT7為數據位):
起始位 | Bit1 | Bit2 | Bit3 | Bit4 | Bit5 | Bit6 | Bit7 | 校驗位 | 停止位 |
通信中要保證通信雙方要有相同的波特率,數據格式,奇偶校驗位。
波特率:通信速度,每秒中發送的位的個數,單位為Bit/S或bps。
奇偶檢驗:偶校驗的含義:在數據傳輸前附加一位偶校驗位,用來表示傳輸的數據中“1”的個數是奇數還是偶數,為偶數時,校驗位置為“0”,否則置為“1”用以保持數據的奇偶性不變。奇校驗的含義:在數據傳輸前附加一位奇校驗位,用來表示傳輸的數據中“1”的個數是奇數還是偶數,為奇數時,校驗位置為“0”,否則置為“1”用以保持數據的奇偶性不變。
一個字符幀中,真正起作用的是數據位。起始位、檢驗位和停止位的加入只是為了將數據位正確地傳輸到對方設備。在實際應用時一定要將主站和從站數據位、奇偶校驗、停止位設為一致。
在通信過程中一個完整的通信報文包括多個數據幀,一般包含地址幀、功能碼幀、數據幀、檢驗幀。在Modbus RTU中,一個報文發送完成之后會保持3.5個字節的靜默時間,再發送下一個報文,如圖1-2所示。
圖1-2
地址幀:指示從站的站號,以十六進制表示,如01H。
功能碼幀:指示操作是讀還是寫,03H為讀,06H為寫操作。
數據幀:包含要讀寫的從站參數起始地址、個數及數值,數據幀在發送的時候每個字包含兩個8位字符,先發高8位后發低8位。
校驗幀:CRC校驗值,也拆分成兩個字節,先發低字節后發高字節。校驗幀的原理是將將所有數據幀進行CRC運算,算出一個檢驗值,加在數據幀后面一起發送過去,從站設備接收到數據后再進行一次運算,將運算的檢驗值和接收的值進行比較,如果不一致則說明數據發送出錯。
例如:從01H號站變頻器,讀取從0004H地址開始的2個數據的值。
發送報文:01H(地址幀),03H(功能碼幀),00H(起始地址高位),04H(起始地址低位),00H(數據個數高位),02H(數據個數低位),85H(CRC低位),CAH(CRC高位)
例如:將5000(1388H)寫到從站地址02H變頻器的0004H地址中。
發送報文:02H,06H,00H,04H,13H,88H,C5H,6EH
了解了通信協議的數據格式,接下來就是編寫自由口通信程序:,下面就以通過自由口通信控制英威騰變頻器啟停為例講解程序的編寫。
歸納總結了一下分為以下幾步:
1)定義通信端口。
SMB30和SMB130分別為端口0和1的控制字節,提供了波特率、奇偶校驗、數據位和通信協議的選擇,如圖1-3所示。
圖1-3
利用字節傳送指令將分析所得的控制字節數據寫入到SMB30或SMB130中,如圖1-4所示。
圖1-4
往SMB30中寫入2#01001001,則定義端口0為自由協議,波特率9600,8位數據位,偶校驗。
2)按照發送指令XMT的緩沖區格式定義發送數據報文。
圖1-5
圖1-5中TBL(VB0)為發送緩沖區起始地址,格式為:
VB0:發送字節總數。
VB1:報文第一幀,即地址幀,16#01
VB2:功能碼幀,寫16#06。
VB3:通信地址高位,控制啟停地址為16#2000,高位為16#20。
VB4:通信地址低位,16#00。
VB5:寫入數值高位,16#00(寫入16#0001正轉,16#0002反轉,16#0005停止)。
VB6:寫入數值低位,16#01。
VB7:CRC校驗碼低位,16#43。
VB8:CRC校驗碼高位,16#CA。(校驗碼為16#CA43)
程序如圖1-6所示,此處用到一個CRC算法程序,
圖1-6
3)觸發發送指令XMT,如圖1-7所示。
圖1-7
3)接收數據,接收有兩種方式,一是利用RCV指令接收,應用較為復雜,此處不介紹;一是利用SMB2緩沖地址接收,因為端口0接收到一個字符會觸發8號中斷,并將其存放于SMB2中,通常利用8號事件觸發中斷,在中斷中將SMB2的數據轉存到其它地址,否則下一數據將覆蓋該數據,直到接收完所有數據后置位一個完成標志,延時一定事件再次觸發發送指令。接收中斷程序如圖1-8所示。
圖1-8
以上介紹了S7-200SMART的自由口通信,使用自由口通信時編寫程并不是難點,關鍵在于讀懂對方通信數據格式,在以后編程過程中盡量選用支持標準協議的設備,確實需要選用自由口也不用害怕,只要按照上述步驟一步步來完成,相信肯定可以通信成功。
-
S7200
+關注
關注
2文章
35瀏覽量
16228 -
自由口通信
+關注
關注
0文章
4瀏覽量
6410
原文標題:一文讀懂S7-200 SMART自由口通信!
文章出處:【微信號:GKYXT1508,微信公眾號:工控云學堂】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論