PLC與CHV系列變頻器通信
?。?)臨時(shí)局部變量(VAR)
lw_8:WORD; // 待發(fā)送數(shù)據(jù)字節(jié)個(gè)數(shù)計(jì)數(shù)變量
lw_10:WORD; // 待發(fā)送數(shù)據(jù)每字節(jié)8位二進(jìn)制數(shù)計(jì)數(shù)變量
Network 1
LD SM0.0
MOVW 16#FFFF, LW6 //將16位CRC校驗(yàn)寄存器LW6全置為1
Network 2
LD SM0.0
FOR LW8, +1, LW4 //對待發(fā)送數(shù)據(jù)字節(jié)個(gè)數(shù)(LW4)計(jì)數(shù)(LW8)循環(huán)
Network 3
LD SM0.0
XORB *LD0, LB7 //使待發(fā)送數(shù)據(jù)的第一個(gè)字節(jié)(*LD0)與
//CRC校驗(yàn)寄存器低位字節(jié)(LB7)進(jìn)行異或運(yùn)算
Network 4
LD SM0.0
INCD LD0 //ld_0指向待發(fā)送數(shù)據(jù)的下一個(gè)地址
Network 5
LD SM0.0
FOR LW10, +1, +8 //對每字節(jié)8位二進(jìn)制數(shù)計(jì)數(shù)(LW10)循環(huán)
Network 6
LD SM0.0
SRW LW6, 1 //CRC校驗(yàn)寄存器LW6右移一位
Network 7
LD SM1.1 //若移位后的溢出值SM1.1為1
XORW 16#A001, LW6 //則使值16#A001與LW6進(jìn)行異或運(yùn)算
Network 8
NEXT //結(jié)束每字節(jié)8位二進(jìn)制數(shù)計(jì)數(shù)循環(huán)
Network 9
NEXT //結(jié)束每數(shù)據(jù)幀字節(jié)個(gè)數(shù)計(jì)數(shù)循環(huán)
3. 初始化子程序(SBR1)
該程序在PLC的第一個(gè)掃描周期運(yùn)行,主要是設(shè)置CPU224自由端口的通信格式、數(shù)據(jù)接收格式及復(fù)位各寄存區(qū)(參見西門子S7-200編程手冊)。
通信格式內(nèi)容包括:波特率9.6K、每字節(jié)位數(shù)8位、偶校驗(yàn)等(注意與變頻器一致)。
數(shù)據(jù)接收格式完全參照MODBUS RTU格式設(shè)定,以不少于3.5個(gè)字節(jié)傳輸時(shí)間的通信口空閑間隔作為數(shù)據(jù)接收的開始及結(jié)束信號。根據(jù)協(xié)議,PLC在準(zhǔn)備接收數(shù)據(jù)前會先監(jiān)測通信口是否空閑,如連續(xù)空閑時(shí)間超過了3.5個(gè)字節(jié)的傳輸時(shí)間,則PLC默認(rèn)數(shù)據(jù)接收開始,此后通訊口上出現(xiàn)的信息即被認(rèn)為是一個(gè)數(shù)據(jù)幀的內(nèi)容。同理,隨著一個(gè)數(shù)據(jù)幀的最后一個(gè)字節(jié)傳輸完成,又會出現(xiàn)一個(gè)3.5字節(jié)傳輸時(shí)間的空閑間隔,來表示一個(gè)數(shù)據(jù)幀傳輸?shù)慕Y(jié)束。(參見MODBUS協(xié)議標(biāo)準(zhǔn)及CHV系列矢量變頻器通訊卡使用說明書)
對9.6K的通信波特率來說,3.5個(gè)字節(jié)傳輸時(shí)間約為5ms左右。因該程式的每個(gè)指令只準(zhǔn)備接收一個(gè)數(shù)據(jù)幀的回饋信息,所以接收數(shù)據(jù)前的空閑檢測時(shí)間可設(shè)為0,即PLC在發(fā)出數(shù)據(jù)后立即開始接收數(shù)據(jù),但一個(gè)數(shù)據(jù)幀的傳輸結(jié)束空閑檢測時(shí)間仍需設(shè)為5ms以上。
Network 1
LD SM0.0
MOVB 16#49, SMB30 //設(shè)置自由通信口格式
MOVW +0, SMW90 //空閑行間隔檢測時(shí)間0ms
MOVW +5, SMW92 //字符間定時(shí)器超時(shí)檢測時(shí)間5ms
MOVB 20, SMB94 //接收信息的最大緩沖區(qū)20字節(jié)
MOVB 148, SMB87 //設(shè)置自由通信口的數(shù)據(jù)接收格式
FILL +0, QW0, 1 //輸出印象寄存區(qū)復(fù)位
FILL +0, MW0, 1 //標(biāo)志寄存區(qū)復(fù)位
FILL +0, VW100, 5 //發(fā)送緩沖區(qū)復(fù)位
FILL +0, VW200, 5 //接收緩沖區(qū)復(fù)位
ATCH INT_0, 23 //接收完成中斷
ATCH INT_1, 9 //發(fā)送完成中斷
ENI //在全局啟用中斷
評論