Initial 巨集
FILLASC($140, "KM-08002-rcp")
$2 = IMRCP16($140, 3)
#$10 現在頁碼,$M0 選重的配方組別
$10 = 1
$M0 = 0
#$M27鎖頁BitON, $M26 BitOFF
#$M26.* 不可見位元 off, 鎖頁對話框可見且最上層
$M26 = NOT $M27
Background 巨集
- 警報搬移
- APC: 搬移警報到$400
- FP2 & Omron 不需要
- 自動加熱時間比對
- 秒數 > 10 不比對
- 星期1 = 1,星期二 = 2,星期日 = 7
- 將小時*100 再加上分,與設定數值比對
- 相同就啟動APC 加熱,不同就結束這次掃描
Clock 巨集
- 搬移按鍵板按鍵板PLC
- 搬移動作燈號到按鍵板
子巨集
1. 檔案選擇
參數頁按下檔案列表的任一檔案,執行前巨集->將選中的檔號放到$50,計算實際存檔位置(檔號+10)。執行後,$M0.0~$M0.9 設ON,檔案列變橘。
2. 儲存檔案
先清空配方暫存區,填入檔名時間日期,將資料依序放入$1000~$1999。RCPNO1~3 為存放檔名時間區,不含實際配方資料,RCPNO10~160 為實際配方存放區。將檔名時間另存一份在RCPNO1~3的原因是,台達以變數存取RCP最大只到65535,>65535必須以RCPNO存取到暫存區,才能取出檔名時間,這樣換頁必須載入檔案10次,以取出檔名時間。RCPNO1~9 總容量長度為 9*1,000 = 9,000 可存放 450 組檔名時間。$105.1 從$100 →RCP,$105.2 從RCP→$1000
3. 讀取檔案
$105.2 從RCP→$1000。再將$1000 內數值搬到PLC
4. 刪除檔案
將$1000清空 將$1000 寫入到配方組別即可清空檔案,清理RCPNO1~RCPNO3 裡的檔名,$52 紀錄RCPNO1~3,讀取到$1000,計算檔名偏移位置,寫入20個空直到 $1XXX ,再將$1000 寫回$52 RCPNO。匯出到SD卡
存檔設計
- 檔號編排 $20~$29 ,換頁則根據頁碼計算檔號偏移,一頁檔號偏移10,及計算檔名偏移位置,一頁偏移200,換頁取消檔案選取$M0 = 0
- 檔名時間區由RCP1001 開始,一頁偏移200,RCP0~999 為系統預定的配方操作區,不可當作存檔區,會被清除。
- 選取檔案時,判斷$41 年份為空,則檔案為空
儲存按鈕
#未選擇檔案,讀取錯誤
IF $M0 == 0
#暫停跳頁
BITON $3.0
#讀取錯誤視窗
OPENSCREEN(1120)
ELSE
#重新載入組別
$106 = $51
BITON $105.0
LABEL 1
IF $105 != 0 THEN GOTO LABEL 1
BMOV($31, RCP1, 17)
ENDIF
讀取按鈕
- 基本同儲存按鈕作法
- 循環啟動燈亮,禁止跳讀取對話框,改跳禁止操作對話框視窗
- 判斷年分為空,則檔按為空,禁止跳讀取對話框,改跳空白檔案對話框視窗
刪除按鈕
- 基本同讀取按鈕作法
- 循環啟動燈亮,禁止跳刪除對話框,改跳禁止刪除現用檔案對話框視窗
Lua
Main
--要開放的語言
langs = {1,2}
require "screenshot"
require "CloseWindows"
while true do
if mem.inter.ReadBit(92, 0)==1 then
for i = 1,table.count(langs) do
ret = screenshot(langs[i])
end
mem.inter.WriteBit(92, 0, 0)
end
ret1 = CloseWin()
end
screenshot
畫面擷取副程式
pages = {101,1201,102,103,104,105,106,201,202,203,204,205,206,301,302,303,304,305,306,401,501,1001,1002,1003,601,602,603,604,605,606,607,608,701,702,1202,801,802,901,1011,902,1010}
function screenshot(lan)
-- 改語言
mem.inter.Write(107, lan)
sys.Sleep(500)
for i=1, table.count(pages) do
ret = screen.Open(pages[i])
if ret == 1 then
if i < 20 then
sys.Sleep(1500)
elseif i < 33 then
sys.Sleep(300)
end
-- sys.Sleep(1500)
ret2 = screen.Capture(2)
if pages[i] > 1000 then
ret3 = screen.CloseSub(pages[i])
end
else
-- open fail
end
end
return 0
end
CloseWin
- 禁止操作及讀取錯誤視窗,開3秒後自動關閉
- 料管圖開啟後,離開溫讀頁面後就關閉視窗
--禁止操作1121 讀取錯誤1120
screenID1 = 1121
screenID2 = 1120
--料管圖開啟
screwID1 = 1201
screwID2 = 1202
function CloseWin()
--如果頁面已開啟
isOpen1 = screen.IsOpened(screenID1)
isOpen2 = screen.IsOpened(screenID2)
if isOpen1 == 1 then
--screenID is opened
sys.Sleep(3000)
screen.CloseSub(1121)
else
--screenID is not opened
end
if isOpen2 == 1 then
--screenID is opened
sys.Sleep(3000)
screen.CloseSub(1120)
else
--screenID is not opened
end
--料管圖開啟,離開溫度頁或離開監視頁,關閉子視窗
isScrewOpen1 = screen.IsOpened(screwID1)
isScrewOpen2 = screen.IsOpened(screwID2)
if isScrewOpen1 == 1 then
-- 溫度頁料管圖開啟
screenid = mem.inter.Read(111)
if screenid > 200 and screenid < 1000 then
screen.CloseSub(1201)
end
elseif isScrewOpen2 == 1 then
-- 監視頁料管圖開啟
screenid = mem.inter.Read(111)
if screenid ~= 702 and screenid ~= 1202 then
screen.CloseSub(1202)
end
end
return 0
end