西門子S7-200CPU的通信口可以設置為自由口模式。選擇自由口模式后,用戶程序就可以完全控制通信端口的操作,通信協(xié)議也完全受用戶程序控制。
S7-200CPU上的通信口在電氣上是標準的RS-485半雙工串行通信口。此串行字符通信的格式可以包括:
一個起始位
7或8位字符(數據字節(jié))
一個奇/偶校驗位,或者沒有校驗位
一個停止位
自由口通信速波特率可以設置為1200、2400、4800、9600、19200、38400、57600或112500。
凡是符合這些格式的串行通信設備,理論上都可以和S7-200CPU通信。
自由口模式可以靈活應用。Micro/WIN的兩個指令庫(USS和ModbusRTU)就是使用自由口模式編程實現的。
在進行自由口通信程序調試時,可以使用PC/PPI電纜(設置到自由口通信模式)連接PC和CPU,在PC上運行串口調試軟件(或者Windows的HyperTerminal-超級終端)調試自由口程序。
USB/PPI電纜和CP卡不支持自由口調試。
自由口通信要點
應用自由口通信首先要把通信口定義為自由口模式,同時設置相應的通信波特率和上述通信格式。用戶程序通過特殊存儲器SMB30(對端口0)、SMB130(對端口1)控制通信口的工作模式。
CPU通信口工作在自由口模式時,通信口就不支持其他通信協(xié)議(比如PPI),此通信口不能再與編程軟件Micro/WIN通信。CPU停止時,自由口不能工作,Micro/WIN就可以與CPU通信。
通信口的工作模式,是可以在運行過程中由用戶程序重復定義的。
如果調試時需要在自由口模式與PPI模式之間切換,可以使用SM0.7的狀態(tài)決定通信口的模式;而SM0.7的狀態(tài)反映的是CPU運行狀態(tài)開關的位置(在RUN時SM0.7="1",在STOP時SM0.7="0")
自由口通信的核心指令是發(fā)送(XMT)和接收(RCV)指令。在自由口通信常用的中斷有“接收指令結束中斷”、“發(fā)送指令結束中斷”,以及通信端口緩沖區(qū)接收中斷。
與網絡讀寫指令(NetR/NetW)類似,用戶程序不能直接控制通信芯片而必須通過操作系統(tǒng)。用戶程序使用通信數據緩沖區(qū)和特殊存儲器與操作系統(tǒng)交換相關的信息。
XMT和RCV指令的數據緩沖區(qū)類似,起始字節(jié)為需要發(fā)送的或接收的字符個數,隨后是數據字節(jié)本身。如果接收的消息中包括了起始或結束字符,則它們也算數據字節(jié)。
調用XMT和RCV指令時只需要指定通信口和數據緩沖區(qū)的起始字節(jié)地址。
XMT和RCV指令與NetW/NetR指令不同的是,它們與網絡上通信對象的“地址”無關,而僅對本地的通信端口操作。如果網絡上有多個設備,消息中必然包含地址信息;這些包含地址信息的消息才是XMT和RCV指令的處理對象。
由于S7-200的通信端口是半雙工RS-485芯片,XMT指令和RCV指令不能同時有效。
XMT和RCV指令
XMT(發(fā)送)指令的使用比較簡單。RCV(接收)指令所需要的控制稍多一些。
RCV指令的基本工作過程為:
在邏輯條件滿足時,啟動(一次)RCV指令,進入接收等待狀態(tài)
監(jiān)視通信端口,等待設置的消息起始條件滿足,然后進入消息接收狀態(tài)
如果滿足了設置的消息結束條件,則結束消息,然后退出接收狀態(tài)
所以,RCV指令啟動后并不一定就接收消息,如果沒有讓它開始消息接收的條件,就一直處于等待接收的狀態(tài);如果消息始終沒有開始或者結束,通信口就一直處于接收狀態(tài)。這時如果嘗試執(zhí)行XMT指令,就不會發(fā)送任何消息。
所以確保不同時執(zhí)行XMT和RCV非常重要,可以使用發(fā)送完成中斷和接收完成中斷功能,在中斷程序中啟動另一個指令。