plc在第一次掃描時執(zhí)行初始化子程序,對端口及rcv指令進行初始化。初始化完成后,運行rcv指令使端口處于接受狀態(tài)。
rcv會將以g開頭g結尾的指令保存到接收緩沖區(qū),并同時產生接收完成中斷。
rcvcomplete中斷服務程序用來處理接收完成中斷事件,它會將接收緩沖區(qū)中的十六進制ascii碼還原成數(shù)據(jù)并保存,同時置位verify子程序的觸發(fā)條件(m0.1)。 ----verify子程序首先復位本身的觸發(fā)條件以防止子程序被重復調用,然后求出接收緩沖區(qū)中指令的bcc校驗碼并與指令中的bcc校驗碼進行比對。如果相等則置bcc碼校驗正確的標志位(m0.0)為1;如果指令格式正確(指令的結束標志在接收緩沖區(qū)中特定的位置vb133)而bcc碼不相等,則發(fā)送代表bcc校驗碼錯誤的反饋信息;如果指令格式不正確(vb133中不是指令的結束標志),則返回代表指令格式錯誤的反饋信息。
read子程序的觸發(fā)條件為:指令中的站地址與本機站地址相符、指令類型為讀指令、bcc檢驗碼正確。當條件滿足時,read子程序被執(zhí)行。read子程序首先禁止rcv,然后將指令所要讀取的數(shù)據(jù)轉換成十六進制ascii碼并寫入發(fā)送緩沖區(qū)、計算bcc檢驗碼、最后發(fā)送反饋信息。
write子程序的觸發(fā)條件為:指令中的站地址與本機站地址相符、指令類型為寫指令、bcc檢驗碼正確。當條件滿足時,write子程序被執(zhí)行。write子程序首先禁止rcv,然后將指令中的數(shù)據(jù)寫入目標寄存器,最后發(fā)送代表寫入正確的反饋信息。
plc每接到一條指令后都會發(fā)送一條反饋信息,當反饋信息發(fā)送完成時,會產生發(fā)送完成中斷,xmtcomplete中斷服務程序用來處理發(fā)送完成中斷事件。在xmtcomplete中斷服務程序中所要執(zhí)行的操作包括:復位bcc校驗碼正確的標志位(m0.0);允許rcv;bcc碼寄存器清零;重新裝入用于計算bcc校驗碼的地址指針;接收緩沖區(qū)中存放指令結束字符的字節(jié)vb133清零(用來判斷下一條指令格式是否正確)。