自由口通信模式下計算機讀寫PLC存儲區(qū)的程序
關鍵詞:PLC 通信 自由口模式
1 引言
使用S7-200的自由口模式與上位計算機通信裂膛,其硬件成本低庇鸭,適應性強,但編程較困難紧贪。本文根據自定義的通信規(guī)約編制通信程序狂嘉,實現了上位計算機對各PLC從站存儲器中字節(jié)、整數或雙整數數據的讀寫操作藤该。
2 通信規(guī)約
通信采用單主站方式询蚊,一臺計算機作為主站,多臺PLC作為從站里状。計算機采用廣播方式主動向所有PLC發(fā)送包含從站站址的讀/寫命令幀因震,每次被計算機指定站址的一臺PLC收到后返回響應幀。
通信波特率為19.2k bit/s鳞编,串行數據格式為1位起始位汁蝶,8位數據位,1位停止位论悴,無奇偶校驗掖棉,采用異或校驗方式,校驗碼為除它本身外所有字節(jié)的異或值膀估。計算機使用事件驅動方式接收數據;PLC用XMT(發(fā)送)指令發(fā)送數據幔亥,用字符中斷方式接收數據。
圖1 通信幀格式
圖1是通信幀的格式察纯,用陰影表示數據區(qū)帕棉。幀起始標志占3個字節(jié),定義為十六進制數BEBEBE饼记。站址是計算機要讀寫的從站的編號香伴。讀命令字節(jié)為CCH,寫命令字節(jié)為DDH具则,PLC響應幀中的命令字節(jié)與接收到的命令字節(jié)相同瞒窒,寫命令的響應幀沒有“讀取的數據”部分。
除了幀起始標志乡洼、讀寫區(qū)的首地址和讀寫的數據外崇裁,幀中其余各部分均只占一個字節(jié)。圖1中當PLC對接收到的一幀數據校驗無誤而且命令字節(jié)為CCH或DDH時扛焊,響應幀中的“PLC接收正誤標志”為1波耗,否則為0脊腺。
命令幀中的讀寫區(qū)首地址為PLC內讀寫區(qū)域的起始字節(jié)地址的數字編碼,PLC接收到命令幀后可以將其作為指針休敛,使用循環(huán)指令讀寫計算機指定的連續(xù)區(qū)域茉园。經作者反復實驗,得到了PLC內部多種存儲區(qū)域地址的數字編碼規(guī)律史糕。該數字編碼為雙字汁讹,高字表示存儲區(qū)類型(見表1),低字表示偏移量锤知。根據尋址區(qū)域和偏移量就可以得到地址編碼棋裳,例如MB3的地址編碼為0200 0003H,它等同于PLC程序中的&MB3贩纵,只是表示方式不同而已凭协。在通信幀中使用地址的數字編碼可以簡化PLC的程序。
表1 幾種存儲器區(qū)域地址高字編碼
如果PLC接收超時懒叛,PLC重新進入接收狀態(tài);如果計算機接收超時丸冕,重發(fā)3次命令幀,若3次均超時薛窥,發(fā)出報警信息胖烛。
3 PLC通信程序設計
3.1 接收程序和發(fā)送程序的設計
PLC作為從站,只有接收到計算機的命令幀后才返回響應幀诅迷,不會主動發(fā)送數據洪己。
PLC使用多個字符中斷服務程序,順次接收命令幀各部分的內容竟贯。在接收幀起始標志的中斷服務程序中,只有接收到連續(xù)3個BEH逝钥,PLC才認為是一幀的開始屑那,否則重新接收幀起始標志。在接收站地址的中斷服務程序中艘款,將接收到的站址與本站站址相比較持际,如果相同,繼續(xù)接收命令幀其余的字節(jié)哗咆,否則重新接收幀起始標志搂物。這樣每次只有一臺PLC接收整個命令幀,避免了其余的PLC進行不必要的接收读铁。在接收數據區(qū)的中斷服務程序中囱蕴,通過比較接收到的“數據區(qū)字節(jié)數”和實際接收到的字節(jié)數來判斷數據區(qū)接收是否完成。接收完數據區(qū)后再接收到一個字節(jié)的校驗碼砂两,則一幀接收完成朋堪,置發(fā)送允許標志位橘疚。
主程序檢測到發(fā)送允許標志位為1時,進行異或校驗并檢查命令字節(jié)盹扮,若接收正確胶僵,判斷是讀命令還是寫命令。如果是讀命令字拒,將計算機要讀取的數據送入發(fā)送緩沖區(qū);如果是寫命令隘勾,將計算機提供的數據寫入指定的存儲區(qū)地址;最后計算異或校驗碼并將它送入發(fā)送緩沖區(qū);組織好發(fā)送幀后將它發(fā)送出去。
3.2 讀寫PLC存儲區(qū)
首先從接收緩沖區(qū)中取出讀寫區(qū)首地址投嫂,存入符號地址為Address的雙字中捏章,用循環(huán)程序實現對多個字節(jié)的讀寫。讀寫PLC存儲區(qū)的語句格式為
MOVB *pFrom, *pTo
計算機讀存儲區(qū)時座泳,pFrom指向Address開始的m個字節(jié)的連續(xù)區(qū)域惠昔,pTo指向發(fā)送緩沖區(qū),循環(huán)次數m為要讀取的字節(jié)數挑势。寫存儲區(qū)時镇防,pFrom指向接收緩沖區(qū)中要寫入的n個字節(jié)的連續(xù)區(qū)域,pTo指向Address開始的連續(xù)區(qū)域潮饱,循環(huán)次數n是要寫入的字節(jié)數来氧。
3.3 接收緩沖區(qū)和發(fā)送緩沖區(qū)
使用XMT指令時每次最多可以發(fā)送255個字節(jié)。由于PLC不能同時發(fā)送和接收數據香拉,為了節(jié)省通信程序占用的存儲空間和簡化程序啦扬,接收緩沖區(qū)和發(fā)送緩沖區(qū)共用VB100-~VB355這片區(qū)域。接收數據時凫碌,只存儲命令幀中的命令字節(jié)及其后的內容扑毡。
VB100是XMT指令發(fā)送緩沖區(qū)的首字節(jié),即要發(fā)送的字節(jié)數盛险,響應幀從VB101開始存放瞄摊。對于某一從站來說,幀起始標志和站址都是固定值颅婴,可以在PLC首次掃描時將它們送入發(fā)送緩沖區(qū)颈缆。PLC響應幀中的命令字節(jié)與接收到的命令字節(jié)相同,因此PLC在生成響應幀時汗钳,只需生成除幀起始標志梧货、站址和命令字節(jié)以外的部分。經分析可知磺瓤,計算機每次最多可以從PLC讀取247個字節(jié)镐催,向PLC寫入244個字節(jié)的數據。
4 計算機程序設計
計算機通過PLC響應幀中返回的站址號和命令字節(jié)判斷是哪個從站對何種命令作出的響應设连,并結合PLC接收正誤標志作出相應的處理娇仙。
4.1 接收及通信出錯處理
計算機采用串口事件方式接收PLC發(fā)出的響應幀丹叨。計算機將接收到的每個字節(jié)順次放入接收緩沖區(qū)(動態(tài)字節(jié)型數組),通過數據區(qū)字節(jié)數判斷對響應幀的接收是否結束尾贮。
接收完成后洁乏,計算機對接收到的數據作異或校驗,如果校驗無誤怔巷,命令字節(jié)為CCH或DDH倍试,而且PLC接收正誤標志為1,計算機認為接收正確蛋哭。如果計算機異或校驗判斷接收有誤或PLC返回的接收正誤標志為0县习,將重發(fā)同樣的命令幀,若連續(xù)重發(fā)3次后均出錯谆趾,則提示用戶躁愿。
4.2 命令幀的生成
在計算機中命令幀用字節(jié)型數組來表示。假設要讀取1號站PLC中MB6開始的3個字節(jié)的數據沪蓬,MB6的地址代碼0200 0006H應放在PLC接收緩沖區(qū)的VB107~VB110彤钟。根據S7-200的尋址方式,VB107~VB110各字節(jié)中的值分別為02H跷叉、00H 逸雹、00H、06H云挟,PLC接收到的字節(jié)從低地址開始存放梆砸,所以在計算機中只需將以上4個字節(jié)順次存放于命令幀數組即可。本例從VB101開始的讀命令幀為:BE BE BE 01 06 CC 02 00 00 06 03 72(十六進制數)园欣,最后一個字節(jié)(72H)為異或校驗碼版药。
4.3 讀寫整數和雙整數的方法
整數占用一個字,雙整數占用連續(xù)的兩個字幔膝。由于PLC和計算機中整數和雙整數的存儲方式相同茅铺,計算機可以把它們分別拆成2個字節(jié)和4個字節(jié)后發(fā)送,亦可將接收到的多字節(jié)組合成整數或雙整數噪境。
讀PLC中連續(xù)的n個整數時,可以轉換為讀連續(xù)的2n個字節(jié)丧忍,計算機接收到后將每相鄰的2個字節(jié)組合成1個整數;同樣的半泪,讀n個雙字可以轉化為讀4n個字節(jié),計算機接收到后將每相鄰的4個字節(jié)組合成1個雙整數参挨。
將n個字或雙字寫入PLC時效勺,可將它們拆分成2n個字節(jié)或4n個字節(jié),按高字節(jié)在前亮蜓,低字節(jié)在后的順序放入發(fā)送幀中嘉容。拆分操作可用位邏輯運算來實現架独。例如,欲將256和-1兩個整數寫入PLC的MW6和MW8饿呢,首先將它們分別拆分為2個字節(jié)01H ,00H和FFH, FFH脖旱,設站號為1,則寫命令幀為BE BE BE 01 09 CC 02 00 00 06 01 00 FF FF 7F(十六進制)介蛉。
5 實驗及結論
經多次實驗表明萌庆,本文介紹的通信程序運行穩(wěn)定可靠,能滿足工程實用的要求币旧。該程序的通用性好践险,計算機可以讀寫PLC中的多種存儲區(qū)域,可設置讀寫的起始地址和字節(jié)數吹菱,每次最多可讀寫240多個字節(jié)巍虫,數據可以按字節(jié)、整數和雙整數來讀寫鳍刷。
通過幀起始標志占遥、PLC接收正誤標志和異或校驗保證了通信的可靠性,接收出錯和超時出錯重發(fā)送機制進一步提高了通信的性能倾剿。
聲明:本網站所收集的部分公開資料來源于互聯(lián)網筷频,轉載的目的在于傳遞更多信息及用于網絡分享,并不代表本站贊同其觀點和對其真實性負責前痘,也不構成任何其他建議涯馆。本站部分作品是由網友自主投稿和發(fā)布、編輯整理上傳崎爽,對此類作品本站僅提供交流平臺俺埋,不為其版權負責。如果您發(fā)現網站上所用視頻摹撰、圖片俄脂、文字如涉及作品版權問題,請第一時間告知行翘,我們將根據您提供的證明材料確認版權并按國家標準支付稿酬或立即刪除內容相吭,以保證您的權益!聯(lián)系電話:010-58612588 或 Email:editor@mmsonline.com.cn领末。
- 暫無反饋