自由口模式下PLC與計(jì)算機(jī)的通信
----本例說明如何以自由協(xié)議實(shí)現(xiàn)計(jì)算機(jī)與S7-200的通信,計(jì)算機(jī)作為主站,可以實(shí)現(xiàn)對PLC從站各寄存器的讀/寫操作押棋。
----計(jì)算機(jī)通過COM口發(fā)送指令到PLC的PORT0(或PORT1)口,PLC通過RCV接收指令,然后對指令進(jìn)行譯碼范益,譯碼后調(diào)用相應(yīng)的讀/寫子程序?qū)崿F(xiàn)指令要求的操作天枣,并返回指令執(zhí)行的狀態(tài)信息。
通信協(xié)議
----在自由口模式下虫犀,通信協(xié)議是由用戶定義的袖指。用戶可以用梯形圖程序調(diào)用接收中斷、發(fā)送中斷倘灸、發(fā)送指令(XMT)某亩、接受指令(RCV)來控制通信操作。在自由口模式下热某,通信協(xié)議完全由梯形圖程序控制腻菇。
指令格式定義
計(jì)算機(jī)每次發(fā)送一個(gè)33字節(jié)長的指令來實(shí)現(xiàn)一次讀/寫操作,指令格式見表1 說明:
起始字符
----起始字符標(biāo)志著指令的開始昔馋,在本例中被定義為ASCII碼的"g"筹吐,不同的PLC從站可以定義不同的起始字符以接收真對該P(yáng)LC的指令。
指令類型
----該字節(jié)用來標(biāo)志指令的類型秘遏,在本例中05H代表讀操作丘薛,06H代表寫操作。
目標(biāo)PLC站地址
----目標(biāo)PLC站地址占用指令的B2邦危、B3兩個(gè)字節(jié)洋侨,以十六進(jìn)制ASCII碼的格式表示目標(biāo)PLC的站地址。
目標(biāo)寄存器地址
----在PLC內(nèi)部可以用4個(gè)字節(jié)來表示一個(gè)寄存器的地址(但不能表示一個(gè)位地址)倦蚪。前兩個(gè)字節(jié)表示寄存器類型希坚,后兩個(gè)字節(jié)表示寄存器號。
00 00(H): I寄存器區(qū)
01 00(H): Q寄存器區(qū)
02 00(H): M寄存器區(qū)
08 00(H): V寄存器區(qū)
例如:
IB000的地址可表示為 00 00 00 00(H)
VB100的地址可表示為 08 00 00 64(H)
讀/寫字節(jié)數(shù)M
----當(dāng)讀命令時(shí)陵且,始終讀回從目標(biāo)寄存器開始的連續(xù)8個(gè)字節(jié)的數(shù)據(jù)(轉(zhuǎn)換為十六進(jìn)制ASCII碼后占用16個(gè)字節(jié))裁僧,可以根據(jù)自己的需要取用,M可以任意寫入垃准。
----當(dāng)寫命令時(shí)智榆,M表示的是要寫入數(shù)據(jù)的十六進(jìn)制ASCII碼所占用的字節(jié)數(shù)。例如要寫入1個(gè)字節(jié)的數(shù)據(jù)儿趋,數(shù)據(jù)在指令中以十六進(jìn)制ASCII碼表示档低,它將占用2個(gè)字節(jié),此時(shí)應(yīng)向M中寫入"02"蛔乖。同理梭甸,如果要寫入5個(gè)字節(jié)的數(shù)據(jù),M中應(yīng)寫入"0A"昵例。
要寫入的數(shù)據(jù)
----要寫入的數(shù)據(jù)在指令中以十六進(jìn)制ASCII碼的格式表示,占用指令的B14-B29共16個(gè)字節(jié)。數(shù)據(jù)區(qū)必須填滿锣裆,但只有前M個(gè)字節(jié)的數(shù)據(jù)會(huì)被寫入目標(biāo)寄存器拒凝。一條指令最多可以寫入8個(gè)字節(jié)的數(shù)據(jù)(此時(shí)M中應(yīng)寫入"10",代表十進(jìn)制的16)
BCC校驗(yàn)碼
----在傳輸過程中泞驴,指令有可能受到任何的干擾而使原來的數(shù)據(jù)信號發(fā)生扭曲牢裳,此時(shí)的指令當(dāng)然是錯(cuò)誤的,為了偵測指令在傳輸過程中發(fā)生的錯(cuò)誤叶沛,接收方必須對指令作進(jìn)一步的確認(rèn)工作蒲讯,以防止錯(cuò)誤的指令被執(zhí)行,最簡單的方法就是使用校驗(yàn)碼灰署。BCC校驗(yàn)碼的方法就是將要傳送的字符串的ASCII碼以字節(jié)為單位作異或和判帮,并將此異或和作為指令的一部分傳送出去;同樣地溉箕,接收方在接到指令后晦墙,以相同的方式對接收到的字符串作異或和,并與傳送方所送過來的值作對比肴茄,若其值相等晌畅,則代表接收到的指令是正確的,反之則是錯(cuò)誤的寡痰。
----在本例中抗楔,bcc為指令B1到B29的異或和,BCC為bcc的十六進(jìn)制ASCII碼拦坠。
----bcc=B1 xor B2 xor B3 xor B4 xor …… xor B29
結(jié)束字符
----結(jié)束字符標(biāo)志著指令的結(jié)束连躏,在本例中被定義為ASCII碼的"G",不同的PLC從站可以定義不同的結(jié)束字符以接收真對該P(yáng)LC的指令她蛉。
PLC在接到上位機(jī)指令后贺坝,將發(fā)送一個(gè)21字節(jié)長反饋信息,格式見表2
說明:
起始字符
----起始字符標(biāo)志著反饋信息的開始赚兰,在本例中被定義為ASCII碼的"g"俘噩,不同的PLC從站可以定義不同的起始字符,這樣上位機(jī)可以根據(jù)信息的起始字符來判斷反饋信息的來源郎石。
狀態(tài)信息
----該字節(jié)包含指令執(zhí)行的狀態(tài)信息逾辕,在本例中
01H 代表 讀取正確
02H 代表 寫入正確
03H 代表 BCC校驗(yàn)碼錯(cuò)誤
04H 代表 指令不合法
數(shù)據(jù)區(qū)
----反饋信息的B3到B18為讀指令所要讀取的數(shù)據(jù),以十六進(jìn)制ASCII碼表示认吕。
BCC校驗(yàn)碼
----與上位機(jī)指令中的BCC校驗(yàn)碼類似煮沸,它是反饋信息B3到B18的異或和。
結(jié)束字符
----結(jié)束字符標(biāo)志著反饋信息的結(jié)束沼昵,在本例中被定義為26H腾枣。
指令中為何要使用ASCII碼
----一條指令除包含數(shù)據(jù)外审炬,還包含必要的控制字(起始字符、結(jié)束字符跨跨、指令類型等)潮峦。如果指令中的數(shù)據(jù)直接以其原本的形式傳輸,則不可避免的會(huì)與指令中的控制字發(fā)生混淆勇婴。
----例如本例中忱嘹,指令的起始字符為"g",其ASCII碼值為67H耕渴,結(jié)束字符為"G"拘悦,其ASCII碼值為47H。假設(shè)要寫入的數(shù)據(jù)中也有47H橱脸,并且數(shù)據(jù)直接以其原本的形式傳輸础米,則PLC會(huì)因?yàn)榻邮盏搅藬?shù)據(jù)中的47H而停止接收,這樣PLC接收到的指令將是一個(gè)不完整的非法指令慰技,很可能造成PLC的誤動(dòng)作椭盏。
----為了避免這種情況的發(fā)生,可以用文本來傳送二進(jìn)制數(shù)據(jù)吻商。通過以16進(jìn)制ASCII碼的格式描述數(shù)據(jù)掏颊,每個(gè)二進(jìn)制的字節(jié)都可以表示成一對ASCII編碼,這對編碼表示這個(gè)字節(jié)的兩個(gè)16進(jìn)制字符址檀。這種格式可以表示任何的數(shù)值锌褒,僅僅使用ASCII代碼的30H到39H(表示0到9)和41H到46H(表示A到F)。ASCII碼的其余部分可以用作控制字(起始標(biāo)志绍堪、結(jié)束標(biāo)志勇湃、指令類型等)。這樣璃疫,數(shù)據(jù)中的47H以ASCII碼的形式進(jìn)行傳送就變成了34H 37H 兩個(gè)字節(jié)迅忙,從而避免了PLC因接收到數(shù)據(jù)中的47H而停止接收的錯(cuò)誤。
表1 上位機(jī)指令格式
Byte0 起始字符
Byte1 指令類型(讀/寫)
Byte2 目標(biāo)PLC站地址(十六進(jìn)制ASCII碼)
Byte3
Byte4 目標(biāo)寄存器地址(十六進(jìn)制ASCII碼)
Byte5
Byte6
Byte7
Byte8
Byte9
Byte10
Byte11
Byte12 讀/寫字節(jié)數(shù)M(十六進(jìn)制ASCII碼)
Byte13
Byte14 要寫入的數(shù)據(jù)(十六進(jìn)制ASCII碼)
Byte15
Byte16
Byte17
Byte18
Byte19
Byte20
Byte21
Byte22
Byte23
Byte24
Byte25
Byte26
Byte27
Byte28
Byte29
Byte30 BCC校驗(yàn)碼(十六進(jìn)制ASCII碼)
Byte31
Byte32 結(jié)束字符
表2 反饋信息格式
Byte0 起始字符
Byte1 狀態(tài)信息
Byte2 數(shù)據(jù)區(qū)(十六進(jìn)制ASCII碼)
Byte3
Byte4
Byte5
Byte6
Byte7
Byte8
Byte9
Byte10
Byte11
Byte12
Byte13
Byte14
Byte15
Byte16
Byte17
Byte18 BCC校驗(yàn)碼(十六進(jìn)制ASCII碼)
Byte19
Byte20 結(jié)束字符
PLC程序執(zhí)行過程
----PLC在第一次掃描時(shí)執(zhí)行初始化子程序窖韧,對端口及RCV指令進(jìn)行初始化姆巨。初始化完成后,運(yùn)行RCV指令使端口處于接受狀態(tài)姐蝠。
----RCV會(huì)將以"g"開頭"G"結(jié)尾的指令保存到接收緩沖區(qū)嫩碘,并同時(shí)產(chǎn)生接收完成中斷。
----RCVcomplete中斷服務(wù)程序用來處理接收完成中斷事件幕柬,它會(huì)將接收緩沖區(qū)中的十六進(jìn)制ASCII碼還原成數(shù)據(jù)并保存臊啃,同時(shí)置位Verify子程序的觸發(fā)條件(M0.1)。 ----Verify子程序首先復(fù)位本身的觸發(fā)條件以防止子程序被重復(fù)調(diào)用拆内,然后求出接收緩沖區(qū)中指令的BCC校驗(yàn)碼并與指令中的BCC校驗(yàn)碼進(jìn)行比對旋圆。如果相等則置BCC碼校驗(yàn)正確的標(biāo)志位(M0.0)為1宠默;如果指令格式正確(指令的結(jié)束標(biāo)志在接收緩沖區(qū)中特定的位置VB133)而BCC碼不相等,則發(fā)送代表BCC校驗(yàn)碼錯(cuò)誤的反饋信息灵巧;如果指令格式不正確(VB133中不是指令的結(jié)束標(biāo)志)光稼,則返回代表指令格式錯(cuò)誤的反饋信息。
----Read子程序的觸發(fā)條件為:指令中的站地址與本機(jī)站地址相符孩等、指令類型為讀指令、BCC檢驗(yàn)碼正確采够。當(dāng)條件滿足時(shí)肄方,Read子程序被執(zhí)行。Read子程序首先禁止RCV蹬癌,然后將指令所要讀取的數(shù)據(jù)轉(zhuǎn)換成十六進(jìn)制ASCII碼并寫入發(fā)送緩沖區(qū)权她、計(jì)算BCC檢驗(yàn)碼、最后發(fā)送反饋信息逝薪。
----Write子程序的觸發(fā)條件為:指令中的站地址與本機(jī)站地址相符隅要、指令類型為寫指令、BCC檢驗(yàn)碼正確刷航。當(dāng)條件滿足時(shí)讥啤,Write子程序被執(zhí)行。Write子程序首先禁止RCV启尚,然后將指令中的數(shù)據(jù)寫入目標(biāo)寄存器睬仿,最后發(fā)送代表寫入正確的反饋信息。
----PLC每接到一條指令后都會(huì)發(fā)送一條反饋信息纤秃,當(dāng)反饋信息發(fā)送完成時(shí)竹小,會(huì)產(chǎn)生發(fā)送完成中斷,XMTcomplete中斷服務(wù)程序用來處理發(fā)送完成中斷事件蝎杯。在XMTcomplete中斷服務(wù)程序中所要執(zhí)行的操作包括:復(fù)位BCC校驗(yàn)碼正確的標(biāo)志位(M0.0)傲钳;允許RCV;bcc碼寄存器清零戒甜;重新裝入用于計(jì)算BCC校驗(yàn)碼的地址指針棺昵;接收緩沖區(qū)中存放指令結(jié)束字符的字節(jié)VB133清零(用來判斷下一條指令格式是否正確)。
PLC寄存器地址分配
----此程序占用PLC寄存器的VB100-VB199梆栏,內(nèi)部繼電器占用M0.0和M0.1紫磷。寄存器地址分配見表3、表4做个、表5鸽心、表6。
表3 接收緩沖區(qū)
VB100 字符數(shù)
VB101 起始字符 Byte0
VB102 指令類型(讀/寫) Byte1
VB103 目標(biāo)PLC站地址(十六進(jìn)制ASCII碼) Byte2
VB104 Byte3
VB105 目標(biāo)寄存器地址(十六進(jìn)制ASCII碼) Byte4
VB106 Byte5
VB107 Byte6
VB108 Byte7
VB109 Byte8
VB110 Byte9
VB111 Byte10
VB112 Byte11
VB113 讀/寫字節(jié)數(shù)M(十六進(jìn)制ASCII碼) Byte12
VB114 Byte13
VB115 要寫入的數(shù)據(jù)(十六進(jìn)制ASCII碼) Byte14
VB116 Byte15
VB117 Byte16
VB118 Byte17
VB119 Byte18
VB120 Byte19
VB121 Byte20
VB122 Byte21
VB123 Byte22
VB124 Byte23
VB125 Byte24
VB126 Byte25
VB127 Byte26
VB128 Byte27
VB129 Byte28
VB130 Byte29
VB131 BCC校驗(yàn)碼(十六進(jìn)制ASCII碼) Byte30
VB132 Byte31
VB133 結(jié)束字符 Byte32
表4 譯碼區(qū)
VB134 PLC站號(ATH from VB103-VB104)
VB135 合成為VD135作為目標(biāo)寄存器的地址指針
(ATH from VB105-VB112)
VB136
VB137
VB138
VB139 讀/寫字節(jié)數(shù)(ATH from VB113-VB114)
VB140 bcc碼(ATH from VB131-VB132)
VB141 未使用
VB142
VB143
VB144
VB145
VB146
VB147
VB148
VB149 和成為VD149作為VB102的地址指針
用以計(jì)算BCC校驗(yàn)碼
VB150
VB151
VB152
表5 發(fā)送緩沖區(qū)
VB153 字符數(shù)
VB154 起始字符 Byte0
VB155 狀態(tài)信息 Byte1
VB156 數(shù)據(jù)區(qū)(十六進(jìn)制ASCII碼) Byte2
VB157 Byte3
VB158 Byte4
VB159 Byte5
VB160 Byte6
VB161 Byte7
VB162 Byte8
VB163 Byte9
VB164 Byte10
VB165 Byte11
VB166 Byte12
VB167 Byte13
VB168 Byte14
VB169 Byte15
VB170 Byte16
VB171 Byte17
VB172 BCC校驗(yàn)碼(十六進(jìn)制ASCII碼) Byte18
VB173 Byte19
VB174 結(jié)束字符 Byte20
表6 其它
VB175 合成為VW175
作為接收時(shí)計(jì)算bcc碼循環(huán)的INDX
VB176
VB177 合成為VW177
作為發(fā)送時(shí)計(jì)算bcc碼循環(huán)的INDX
VB178
VB179 接收數(shù)據(jù)的bcc碼
VB180 發(fā)送數(shù)據(jù)的bcc碼
VB181 合成為VD181作為VB156的地址指針
(計(jì)算發(fā)送反饋信息的bcc碼時(shí)使用)
VB182
VB183
VB184
VB185至VB198 未使用
VB199 本機(jī)站號
程序清單
主程序:
NETWORK 1
LD SM0.1 //第一次掃描調(diào)用初始化子程序
CALL initialize
NETWORK 2
LDB= VB134, VB199 //指令中的站地址與本機(jī)站地址相符
AB= VB102, 5 //指令類型為讀指令
A M0.0 //BCC碼校驗(yàn)正確
CALL Read //調(diào)用讀子程序
NETWORK 3
LDB= VB134, VB199 //指令中的站地址與本機(jī)站地址相符
AB= VB102, 6 //指令類型為寫指令
A M0.0 //BCC碼校驗(yàn)正確
CALL Write //調(diào)用寫子程序
NETWORK 4
LD M0.1 //指令接收完成后調(diào)用BCC碼校驗(yàn)子程序
CALL Verify
NETWORK 5
LD SM4.5 //當(dāng)端口空閑時(shí)啟動(dòng)RCV
RCV VB100, 0
Read子程序:
NETWORK 1
LD SM0.0 //停止端口0的接收
R SM87.7, 1
R M0.0, 1
RCV VB100, 0
NETWORK 2
LD SM0.0 //將數(shù)據(jù)寫入發(fā)送緩沖區(qū)
MOVB 103, VB154
MOVB 1, VB155
HTA *VD135, VB156, 16
MOVB 26, VB174
MOVB 21, VB153
NETWORK 3
LD SM0.0 //計(jì)算BCC校驗(yàn)碼
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校驗(yàn)碼寫入發(fā)送緩沖區(qū)
NETWORK 8
LD SM4.5 //發(fā)送反饋信息
XMT VB153, 0
Write子程序:
NETWORK 1
LD SM0.0 //停止端口0的接收
R SM87.7, 1
R M0.0, 1
RCV VB100, 0
NETWORK 2
LD SM0.0 //裝入要寫如數(shù)據(jù)源的地址指針
MOVD &VB115, VD145
NETWORK 3
LD SM0.0 //寫入數(shù)據(jù)
ATH *VD145, *VD135, VB139
NETWORK 4
LD SM0.0 //指令執(zhí)行的反饋信息寫入發(fā)送緩沖區(qū)
MOVB 21, VB153
MOVB 103, VB154
MOVB 2, VB155
MOVB 26, VB174
NETWORK 5
LD SM4.5 //發(fā)送指令執(zhí)行的反饋信息
XMT VB153, 0
Verify子程序:
NETWORK 1
LD SM0.0
R M0.1, 1 //復(fù)位verify子程序的執(zhí)行條件
NETWORK 2
LD SM0.0 //計(jì)算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 //當(dāng)BCC碼校驗(yàn)正確時(shí)居暖,M0.0置1
AB= VB133, 71
S M0.0, 1
NETWORK 7
LDB= VB133, 71 //BCC碼錯(cuò)誤時(shí)發(fā)送反饋信息
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 //指令格式錯(cuò)誤或RCV超時(shí)時(shí)發(fā)送反饋信息
MOVB 21, VB153
MOVB 103, VB154
MOVB 4, VB155
MOVB 26, VB174
R SM87.7, 1
RCV VB100, 0
XMT VB153, 0
Initialize子程序:
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 +1000, SMW92
MOVB 35, SMB94
R SM87.2, 1
NETWORK 3
LD SM0.0
ATCH RCVcomplete, 23 //連接口0接收完成的中斷
NETWORK 4
LD SM0.0
ATCH XMTcomplete, 9 //連接口0發(fā)送完成的中斷
NETWORK 5
LD SM0.0
ENI //中斷允許
NETWORK 6
LD SM0.0
MOVB 2, VB199 //將本機(jī)站地址裝入寄存器
NETWORK 7
LD SM0.0
MOVB &VB102, VD149 //裝入地址指針
MOVB 0, VB179 //BCC碼寄存器清零
MOVB &VB156, VD181 //裝入地址指針
MOVB 0, VB180 //BCC碼寄存器清零
RCVcomplete中斷程序
NETWORK 1
LD SM0.0
ATH VB103, VB134, 2 //指令譯碼(ASCII碼到十六進(jìn)制)
ATH VB105, VB135, 8
ATH VB113, VB139, 2
ATH VB131, VB140, 2
S M0.1, 1 //置位Verify子程序的觸發(fā)條件
MOVB 0, VB179 //BCC碼寄存器清零
MOVD &VB102, VD149 //裝入地址指針
XMTcomplete中斷程序
NETWORK 1
LD SM0.0
R M0.0, 1 //復(fù)位BCC校驗(yàn)碼正確的標(biāo)志位
S SM87.7, 1 //允許口0進(jìn)行接收
MOVB 0, VB179 //BCC校驗(yàn)碼寄存器清零
MOVB 0, VB180 //BCC校驗(yàn)碼寄存器清零
MOVD &VB102, VD149 //重新裝入地址指針
MOVD &VB156, VD181
MOVB 0, VB133 //接收緩沖區(qū)中存放指令結(jié)束字符的字節(jié)清零
聲明:本網(wǎng)站所收集的部分公開資料來源于互聯(lián)網(wǎng)顽频,轉(zhuǎn)載的目的在于傳遞更多信息及用于網(wǎng)絡(luò)分享藤肢,并不代表本站贊同其觀點(diǎn)和對其真實(shí)性負(fù)責(zé),也不構(gòu)成任何其他建議糯景。本站部分作品是由網(wǎng)友自主投稿和發(fā)布嘁圈、編輯整理上傳,對此類作品本站僅提供交流平臺蟀淮,不為其版權(quán)負(fù)責(zé)最住。如果您發(fā)現(xiàn)網(wǎng)站上所用視頻、圖片怠惶、文字如涉及作品版權(quán)問題涨缚,請第一時(shí)間告知,我們將根據(jù)您提供的證明材料確認(rèn)版權(quán)并按國家標(biāo)準(zhǔn)支付稿酬或立即刪除內(nèi)容策治,以保證您的權(quán)益脓魏!聯(lián)系電話:010-58612588 或 Email:editor@mmsonline.com.cn。
- 暫無反饋
編輯推薦
- 2025新年特刊:打造新質(zhì)生產(chǎn)力旅急,智啟未來新篇章
- 定義制造業(yè)未來的數(shù)控加工中心技術(shù)專題
- 航空航天及交通領(lǐng)域先進(jìn)制造技術(shù)應(yīng)用專題
- 解碼消費(fèi)電子產(chǎn)品生產(chǎn)的數(shù)字化之路技術(shù)專題
- 精密智能機(jī)床牡整,助力制造升級技術(shù)專題
- 汽車輕量化驅(qū)動(dòng)下的零部件加工應(yīng)用專題
- 高性能銑刀實(shí)現(xiàn)高精加工生產(chǎn)技術(shù)專題
- 航空航天發(fā)動(dòng)機(jī)解決方案專題
- 高效齒輪加工生產(chǎn)技術(shù)方案專題
- 金屬加工液的性能不止?jié)櫥夹g(shù)應(yīng)用專題