勤工儉學(xué)
deep throat
級(jí)別: 論壇先鋒
精華主題: 0
發(fā)帖數(shù)量: 188 個(gè)
工控威望: 1567 點(diǎn)
下載積分: 5955 分
在線時(shí)間: 120(小時(shí))
注冊(cè)時(shí)間: 2016-03-10
最后登錄: 2024-09-27
查看勤工儉學(xué)的 主題 / 回貼
樓主  發(fā)表于: 2017-07-14 22:47
用gx-designer3寫的觸摸屏,gx-developer寫的PLC程序。
功能有機(jī)種存儲(chǔ)、、查看、選定、搜索、修改和刪除。
關(guān)鍵是思路,程序稍微修改一下既可以套用了。盡可能地模塊化吧。
附件里包括觸摸屏程序、PLC程序和程序思路文檔。
2017/8/31更
之前把程序上傳后也沒怎么理會(huì)了。前幾天把壓縮包發(fā)給同事時(shí),打開發(fā)現(xiàn)上傳的程序搞錯(cuò)了,程序里面既沒有注釋也不完整。對(duì)于那些已經(jīng)下載程序的朋友們表達(dá)歉意。


抱歉了,浪費(fèi)你們的時(shí)間了!



下面我把有注釋的程序更換了,在這之前順便把重名檢測(cè)功能加上去了,并且用gt simulator仿真過,本人暫時(shí)沒有發(fā)現(xiàn)bug。如有發(fā)現(xiàn)的朋友,可以跟我說一下。

關(guān)于思路的那個(gè)文檔我也整理了一下,因?yàn)樵瓉淼奈臋n是我記錄思路的第一現(xiàn)場(chǎng),散亂。

思路如下
這個(gè)程序適應(yīng)于生產(chǎn)型號(hào)調(diào)用、存儲(chǔ)和查看等功能。因?yàn)镻LC代碼的可移植性太差了,思路就顯得尤為重要了。下面的內(nèi)容就是本程序的思路。
首先明白調(diào)用,存儲(chǔ)和查看之間該怎樣處理數(shù)據(jù)。首先確定一個(gè)型號(hào)需要多少存儲(chǔ)空間。這里確定一個(gè)型號(hào)為10個(gè)寄存器。在寄存器里給各個(gè)功能分配存儲(chǔ)空間,各種功能就是對(duì)空間里的信息進(jìn)行讀寫。這里分配D1000到D1009為設(shè)定區(qū)域,D1010到D1019為調(diào)用區(qū)域,D1020到D2000為存儲(chǔ)空間。接下來解釋各個(gè)區(qū)域有什么作用。

設(shè)定區(qū)域顧名思義,在存儲(chǔ)前對(duì)型號(hào)進(jìn)行各種參數(shù)的設(shè)定。例如,型號(hào)名稱為ABC,定位參數(shù)X軸為100,Y軸為200,Z軸為300,單相電機(jī)或三相電機(jī)。這些數(shù)據(jù)都在這個(gè)區(qū)域設(shè)定完畢,再按照一定的規(guī)律存儲(chǔ)到D1020至D2000之間的空間。這個(gè)區(qū)域還需根據(jù)實(shí)際情況進(jìn)一步細(xì)分D1000至D1009之間的空間的功能。程序里將D1000至D1002分配為型號(hào)名稱,D1003為X軸,D1004為Y軸,D1005為Z軸,D1006.0為單相電機(jī),D1006.1為三相電機(jī)。此外,在設(shè)定區(qū)域內(nèi)可搜索名稱輸入框中的型號(hào),設(shè)定區(qū)域還可以用作查看已存儲(chǔ)型號(hào)的參數(shù)。
調(diào)用區(qū)域,正常生產(chǎn)時(shí),所需要的數(shù)據(jù)從調(diào)用區(qū)域讀取。該區(qū)域細(xì)分功能與設(shè)定區(qū)域細(xì)分功能是一樣的,并且一一對(duì)應(yīng)的。調(diào)用區(qū)域在我的理解里算是一個(gè)接口吧,其他的程序就從這個(gè)區(qū)域讀取相應(yīng)的數(shù)據(jù),用作生產(chǎn)。設(shè)立這個(gè)區(qū)域還有一個(gè)原因就是為了和設(shè)定區(qū)域以及存儲(chǔ)區(qū)域進(jìn)行隔離。為了避免在操作設(shè)定區(qū)域和存儲(chǔ)區(qū)域時(shí),影響正常生產(chǎn)。

存儲(chǔ)區(qū)域這個(gè)就是存儲(chǔ)已經(jīng)設(shè)定好的型號(hào),相當(dāng)于數(shù)據(jù)庫(kù)功能。根據(jù)每個(gè)型號(hào)分配的寄存器個(gè)數(shù),每個(gè)型號(hào)在存儲(chǔ)區(qū)域內(nèi)占有10個(gè)寄存器。排列如下,D1020至D1029,D1030至D1039,如此類推。
各個(gè)區(qū)域之間的數(shù)據(jù)處理。

設(shè)定區(qū)域>存儲(chǔ)區(qū)域>調(diào)用區(qū)域
存儲(chǔ)區(qū)域>設(shè)定區(qū)域

上面表示三個(gè)區(qū)域之間的關(guān)系,箭頭方向表示數(shù)據(jù)寫入方向,并且一個(gè)箭頭代表一個(gè)BMOV指令。
按下存儲(chǔ)按鈕,將設(shè)定區(qū)域?qū)懭氪鎯?chǔ)區(qū)域。
型號(hào)編號(hào)有變動(dòng)、搜索成功和選定,將存儲(chǔ)區(qū)域的數(shù)據(jù)寫入設(shè)定區(qū)域,顯示。
按下選定按鈕,將存儲(chǔ)區(qū)域的數(shù)據(jù)寫入調(diào)用區(qū)域,。
按下刪除按鈕,將清零當(dāng)前顯示的型號(hào)和清空設(shè)定區(qū)域。
按下清空按鈕,清空設(shè)定區(qū)域。
根據(jù)上面的動(dòng)作,寫好三個(gè)BMOV指令至關(guān)重要。

以上是大體的方向,下面的內(nèi)容將涉及到各個(gè)功能的細(xì)節(jié),以及曾經(jīng)遇到的問題。
設(shè)定區(qū)域有一個(gè)型號(hào)編號(hào)輸入框,要想查看已存儲(chǔ)型號(hào)的參數(shù),只需要輸入相對(duì)于的型號(hào)編號(hào)即可。
1,設(shè)定區(qū)域要清零。
因?yàn)轭A(yù)先給每個(gè)型號(hào)分配的寄存器個(gè)數(shù)超過了實(shí)際需要的個(gè)數(shù),并且沒使用到的寄存器在人機(jī)界面上是無法對(duì)其進(jìn)行讀寫的。清空主要是在存儲(chǔ)前對(duì)這部分寄存器進(jìn)行清零。

2,搜索只對(duì)型號(hào)名稱進(jìn)行搜索,對(duì)于型號(hào)參數(shù)不搜索。
搜索成功后,將搜索到的內(nèi)容顯示在設(shè)定區(qū)域。這里只需要將搜索到的型號(hào)的編號(hào)反饋給設(shè)定區(qū)域的編號(hào)輸入寄存器即可。
存儲(chǔ)前要對(duì)準(zhǔn)備存儲(chǔ)的型號(hào)名稱進(jìn)行重名檢查及空白名稱檢查。重名檢查也需要逐一對(duì)比,這部分功能與搜索有重疊,在搜索的基礎(chǔ)上稍微修改即可。但有一點(diǎn)應(yīng)該注意的,就是重名檢查要跳過當(dāng)前編號(hào)的型號(hào)。具體來說就是,將原本存儲(chǔ)在編號(hào)8的A型號(hào)存儲(chǔ)在編號(hào)8的空間上并沒有違反重名規(guī)則。
空白名稱檢查,在程序里名稱以ASCII碼存放的,在ASCII中空白字符并不是0000,所以空白名稱檢查要考慮這種情況的出現(xiàn)。在人機(jī)界面中,一個(gè)寄存器在ASCII碼顯示框?yàn)榭瞻椎那闆r有兩種,一種是x00,一種是x20。假設(shè)ASCII碼輸入框?yàn)?位,但只輸入一個(gè)A。這是對(duì)于寄存器來說可不是只有一個(gè)字符A,而依然是4個(gè)字符,只是一個(gè)為A,其他三個(gè)為空字符。但是空字符在寄存器內(nèi)表示的數(shù)值卻不是x00,而是x20。
目前我遇到的問題都已經(jīng)解決了。
[ 此帖被勤工儉學(xué)在2017-08-31 21:16重新編輯 ]
本帖最近評(píng)分記錄:
  • 下載積分:+5(新工電工) 感謝分享!
  • 工控威望:+20(ymmfa) 感謝分享!
  • 下載積分:+2(li051005) 感謝分享!
    tan088
    級(jí)別: 略有小成
    精華主題: 0
    發(fā)帖數(shù)量: 199 個(gè)
    工控威望: 318 點(diǎn)
    下載積分: 554 分
    在線時(shí)間: 669(小時(shí))
    注冊(cè)時(shí)間: 2012-06-03
    最后登錄: 2024-10-30
    查看tan088的 主題 / 回貼
    1樓  發(fā)表于: 2017-07-14 22:55
    好東東謝謝分享