西門(mén)子PLC與CHV系列變頻器通信
2.CRC校驗(yàn)子程序(SBR0)
英威騰CHV系列矢量變頻器內(nèi)置的MODBUS協(xié)議采用RTU傳輸格式,該格式使用CRC校驗(yàn)方式對(duì)每次發(fā)出或接收的數(shù)據(jù)幀進(jìn)行校驗(yàn)。因此,該子程序使用了多個(gè)局部變量,以方便其它子程序調(diào)用。
在西門(mén)子STEP 7-Micro/Win 編程環(huán)境下(如圖一),需要在該子程序的局部變量表中預(yù)先設(shè)定以下局部變量:
?。?)輸入型局部變量(VAR_bbbbb)
1d_0:DWORD; // 待發(fā)送數(shù)據(jù)地址指針變量
lw_4:WORD; // 待發(fā)送數(shù)據(jù)字節(jié)個(gè)數(shù)變量
?。?)輸出型局部變量(VAR_OUTPUT)
lb_6:BYTE; // CRC校驗(yàn)值高位變量
lb_7:BYTE; // CRC校驗(yàn)值低位變量
?。?)臨時(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 //對(duì)待發(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 //對(duì)每字節(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)










