說明,這個例子的PLC程序也是從別處借來,本人只是適當作了修理,另再寫了VB的代碼部分。個為認為PLC程序寫得不錯,因為程序太長,請各位心看了。
//^^^^^^^^^^^^^^^^^^^^^^//
PLC程序部分
TITLE=程序注釋
//PLC在第一次掃描時執行初始化子程序,對端口及RCV指令進行初始化。初始化完成后,運行RCV指令使端口處于接受狀態。
//RCV會將以"g"開頭"G"結尾的指令保存到接收緩沖區,并同時產生接收完成中斷。
//RCVcomplete中斷服務程序用來處理接收完成中斷事件,它會將接收緩沖區中的十六進制ASCII碼還原成數據并保存,同時置位Verify子程序的觸發條件(M0.1)。
// Verify子程序首先復位本身的觸發條件以防止子程序被重復調用,然后求出接收緩沖區中指令的BCC校驗碼并與指令中的BCC校驗碼進行比對。如果相等則置BCC碼校驗正確的標志位(M0.0)為1;如果指令格式正確(指令的結束標志在接收緩沖區中特定的位置VB133)而BCC碼不相等,則發送代表BCC校驗碼錯誤的反饋信息;如果指令格式不正確(VB133中不是指令的結束標志),則返回代表指令格式錯誤的反饋信息。
// Read子程序的觸發條件為:指令中的站地址與本機站地址相符、指令類型為讀指令、BCC檢驗碼正確。當條件滿足時,Read子程序被執行。Read子程序首先禁止RCV,然后將指令所要讀取的數據轉換成十六進制ASCII碼并寫入發送緩沖區、計算BCC檢驗碼、最后發送反饋信息。
// Write子程序的觸發條件為:指令中的站地址與本機站地址相符、指令類型為寫指令、BCC檢驗碼正確。當條件滿足時,Write子程序被執行。Write子程序首先禁止RCV,然后將指令中的數據寫入目標寄存器,最后發送代表寫入正確的反饋信息。
//PLC每接到一條指令后都會發送一條反饋信息,當反饋信息發送完成時,會產生發送完成中斷,XMTcomplete中斷服務程序用來處理發送完成中斷事件。在XMTcomplete中斷服務程序中所要執行的操作包括:復位BCC校驗碼正確的標志位(M0.0);允許RCV;bcc碼寄存器清零;重新裝入用于計算BCC校驗碼的地址指針;接收緩沖區中存放指令結束字符的字節VB133清零(用來判斷下一條指令格式是否正確)。
Network 1
LD SM0.1 //第一次掃描調用初始化子程序
CALL SBR0
Network 2
LDB= VB134, VB199 //指令中的站地址與本機站地址相符
AB= VB102, 5 //指令類型為讀指令
A M0.0 //BCC碼校驗正確
CALL SBR1 //調用讀子程序
Network 3
LDB= VB134, VB199 //指令中的站地址與本機站地址相符
AB= VB102, 6 //指令類型為寫指令
A M0.0 //BCC碼校驗正確
CALL SBR2 //調用寫子程序
Network 4
LD M0.1 //指令接收完成后調用BCC碼校驗子程序
CALL SBR3
Network 5
LD SM4.5 //當端口空閑時啟動RCV
RCV VB100, 0
Network 6
LD SM0.0
MOVW AIW0, VW300
/I +50, VW300
MOVW AIW2, VW302
/I +50, VW302
MOVW AIW4, VW304
/I +50, VW304
MOVW AIW6, VW306
/I +50, VW306
Network 7
LD SM0.0
= Q0.0
Network 8
LD I0.0
= Q0.1
TITLE=子程序注釋
Network 1 // 網絡標題
// 網絡注釋
LD SM0.0
MOVB 9, SMB30 //0口"9600,N,8,1"
Network 2
LD SM0.0 //RCV指令初始化
MOVB 16#EC, SMB87
MOVB 103, SMB88
MOVB 71, SMB89
MOVB 100, SMB92
MOVB 35, SMB94
R SM87.2, 1
Network 3
LD SM0.0
ATCH INT0, 23 //連接口0接收完成的中斷
Network 4
LD SM0.0
ATCH INT1, 9 //連接口0發送完成的中斷
Network 5
LD SM0.0
ENI //中斷允許
Network 6
LD SM0.0
MOVB 2, VB199 //將本機站地址裝入寄存器
Network 7
LD SM0.0
MOVD &VB102, VD149 //裝入地址指針
MOVB 0, VB179 //BCC碼寄存器清零
MOVD &VB156, VD181 //裝入地址指針
MOVB 0, VB180 //BCC碼寄存器清零
TITLE=子程序注釋
Network 1 // 網絡標題
// 網絡注釋
LD SM0.0 //停止端口0的接收
R SM87.7, 1
R M0.0, 1
RCV VB100, 0
Network 2
LD SM0.0 //將數據寫入發送緩沖區
MOVB 103, VB154
MOVB 1, VB155
HTA *VD135, VB156, 16
MOVB 26, VB174
MOVB 21, VB153
Network 3
LD SM0.0 //計算BCC校驗碼
FOR VW177, +1, +16
Network 4
LD SM0.0
XORB *VD181, VB180
Network 5
LD SM0.0
INCD VD181
Network 6
NEXT
Network 7
LD SM0.0
HTA VB180, VB172, 2 //BCC校驗碼寫入發送緩沖區
Network 8
LD SM4.5 //發送反饋信息
XMT VB153, 0
TITLE=子程序注釋
Network 1 // 網絡標題
// 網絡注釋
LD SM0.0 //停止端口0的接收
R SM87.7, 1
R M0.0, 1
RCV VB100, 0
Network 2
LD SM0.0 //裝入要寫如數據源的地址指針
MOVD &VB115, VD145
Network 3
LD SM0.0 //寫入數據
ATH *VD145, *VD135, VB139
Network 4
LD SM0.0 //指令執行的反饋信息寫入發送緩沖區
MOVB 21, VB153
MOVB 103, VB154
MOVB 2, VB155
MOVB 26, VB174
Network 5
LD SM4.5 //發送指令執行的反饋信息
XMT VB153, 0
TITLE=子程序注釋
Network 1 // 網絡標題
// 網絡注釋
LD SM0.0
R M0.1, 1 //復位verify子程序的執行條件
Network 2
LD SM0.0 //計算BCC碼
FOR VW175, +1, +29
Network 3
LD SM0.0
XORB *VD149, VB179
Network 4
LD SM0.0
INCD VD149
Network 5
NEXT
Network 6
LDB= VB179, VB140 //當BCC碼校驗正確時,M0.0置1
AB= VB133, 71
S M0.0, 1
Network 7
LDB= VB133, 71 //BCC碼錯誤時發送反饋信息
AB<> VB179, VB140
MOVB 21, VB153
MOVB 103, VB154
MOVB 3, VB155
MOVB 26, VB174
R SM87.7, 1
RCV VB100, 0
XMT VB153, 0
Network 8
LDB<> VB133, 71 //指令格式錯誤或RCV超時時發送反饋信息
MOVB 21, VB153
MOVB 103, VB154
MOVB 4, VB155
MOVB 26, VB174
R SM87.7, 1
RCV VB100, 0
XMT VB153, 0
TITLE=中斷程序注釋
Network 1 // 網絡標題
// 網絡注釋
LD SM0.0
ATH VB103, VB134, 2 //指令譯碼(ASCII碼到十六進制)
ATH VB105, VB135, 8
ATH VB113, VB139, 2
ATH VB131, VB140, 2
S M0.1, 1 //置位Verify子程序的觸發條件
MOVB 0, VB179 //BCC碼寄存器清零
MOVD &VB102, VD149 //裝入地址指針
TITLE=中斷程序注釋
Network 1 // 網絡標題
// 網絡注釋
LD SM0.0
R M0.0, 1 //復位BCC校驗碼正確的標志位
S SM87.7, 1 //允許口0進行接收
MOVB 0, VB179 //BCC校驗碼寄存器清零
MOVB 0, VB180 //BCC校驗碼寄存器清零
MOVD &VB102, VD149 //重新裝入地址指針
MOVD &VB156, VD181
MOVB 0, VB133 //接收緩沖區中存放指令結束字符的字節清零
點右鍵下載:
S7-200 自由口通訊程序.rar










