西門子S7-200系列PLC的自由通訊端口編程必定會用到兩個指令,即XMT(發送)指令和RCV(接收)指令。編寫程序時需要為這兩個指令指定數據緩沖區,一般以最低位數為0的地址作為數據緩沖區的起始地址。
西林變頻器內置的MODBUS協議采用RTU傳輸格式,該格式使用CRC校驗方式對每次發出或接收的數據幀進行校驗。因此,該子程序使用了多個局部變量,以方便其它子程序調用。在西門子STEP 7-Micro/Win 編程環境下(如圖2),需要在該子程序的局部變量表中預先設定以下局部變量:
Network 1
LD SM0.0
MOVW 16#FFFF, LW6 //將16位CRC校驗寄存器LW6全置為1
Network 2
LD SM0.0
FOR LW8, +1, LW4 //對待發送數據字節個數(LW4)計數(LW8)循環
Network 3
LD SM0.0
XORB *LD0, LB7 //使待發送數據的第一個字節(*LD0)與
//CRC校驗寄存器低位字節(LB7)進行異或運算
Network 4
LD SM0.0
INCD LD0 //ld_0指向待發送數據的下一個地址
Network 5
LD SM0.0
FOR LW10, +1, +8 //對每字節8位二進制數計數(LW10)循環
Network 6
LD SM0.0
SRW LW6, 1 //CRC校驗寄存器LW6右移一位
Network 7
LD SM1.1 //若移位后的溢出值SM1.1為1
XORW 16#A001, LW6 //則使值16#A001與LW6進行異或運算
Network 8
NEXT //結束每字節8位二進制數計數循環
Network 9
NEXT //結束每數據幀字節個數計數循環
4.初始化子程序
該程序在PLC的第一個掃描周期運行,主要是設置PLC自由端口的通信格式、數據接收格式及復位各寄存區(參見西門子S7-200編程手冊)。
通信格式內容包括:波特率9.6K、每字節位數8位、無校驗等(注意與變頻器一致)。
數據接收格式完全參照MODBUS RTU格式設定,以不少于3.5個字節傳輸時間的通信口空閑間隔作為數據接收的開始及結束信號。根據協議,PLC在準備接收數據前會先監測通信口是否空閑,如連續空閑時間超過了3.5個字節的傳輸時間,則PLC默認數據接收開始,此后通訊口上出現的信息即被認為是一個數據幀的內容。同理,隨著一個數據幀的最后一個字節傳輸完成,又會出現一個3.5字節傳輸時間的空閑間隔,來表示一個數據幀傳輸的結束。
對9.6K的通信波特率來說,3.5個字節傳輸時間約為5ms左右。因該程式的每個指令只準備接收一個數據幀的回饋信息,所以接收數據前的空閑檢測時間可設為0,即PLC在發出數據后立即開始接收數據,但一個數據幀的傳輸結束空閑檢測時間仍需設為5ms以上。
Network 1
LD SM0.0
MOVB 16#09, SMB30 //設置自由通信口格式
MOVW +0, SMW90 //空閑行間隔檢測時間0ms
MOVW +5, SMW92 //字符間定時器超時檢測時間5ms
MOVB 20, SMB94 //接收信息的最大緩沖區20字節
MOVB 148, SMB87 //設置自由通信口的數據接收格式
FILL +0, QW0, 1 //輸出印象寄存區復位
FILL +0, MW0, 1 //標志寄存區復位
FILL +0, VW100, 5 //發送緩沖區復位
FILL +0, VW200, 5 //接收緩沖區復位
ATCH INT_0, 23 //接收完成中斷
ATCH INT_1, 9 //發送完成中斷
ENI