Skip to content

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
- 指定檔案名稱到$140 - 從SD 卡載入配方 - 初始化頁碼 - 初始化選中組別 - 載入鎖頁設定

Background 巨集

  1. 警報搬移
  2. APC: 搬移警報到$400
  3. FP2 & Omron 不需要
  4. 自動加熱時間比對
  5. 秒數 > 10 不比對
  6. 星期1 = 1,星期二 = 2,星期日 = 7
  7. 將小時*100 再加上分,與設定數值比對
  8. 相同就啟動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卡

存檔設計

  1. 檔號編排 $20~$29 ,換頁則根據頁碼計算檔號偏移,一頁檔號偏移10,及計算檔名偏移位置,一頁偏移200,換頁取消檔案選取$M0 = 0
  2. 檔名時間區由RCP1001 開始,一頁偏移200,RCP0~999 為系統預定的配方操作區,不可當作存檔區,會被清除。
  3. 選取檔案時,判斷$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
- 若$M0 = 0 則禁止儲存按鈕的換畫面動作,利用$3.0 禁止換畫面,然後開啟讀取錯誤彈跳視窗,利用讀取錯誤視窗關閉時BITOFF $3.0 讓下一次儲存按鈕的換畫面動作能夠使用 - 若有選取檔按,則選取之將檔號組別,利用$105.0 載入組別檔名時間日期內容,將檔名日期時間搬到檔名暫存區$31,跳畫面後,顯示檔名$31

讀取按鈕

  • 基本同儲存按鈕作法
  • 循環啟動燈亮,禁止跳讀取對話框,改跳禁止操作對話框視窗
  • 判斷年分為空,則檔按為空,禁止跳讀取對話框,改跳空白檔案對話框視窗

刪除按鈕

  • 基本同讀取按鈕作法
  • 循環啟動燈亮,禁止跳刪除對話框,改跳禁止刪除現用檔案對話框視窗

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
1. 定義要開放抓取畫面截圖的語言 1. 載入畫面擷取副程式與定時關閉提醒視窗 1. 用 for 迴圈將要抓取的語言丟給畫面擷取副程式 1. 呼叫關視窗副程式

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
1. 定義要抓取的頁面列表 1. 變更取言 語言代碼寫到$107 1. 等待語言變更完成 1. 溫度頁,電流頁,時間頁,壓力速度頁,等待1.5秒讓數值抓取完成後 1. 其餘頁面等0.3秒再抓畫面 1. 頁碼>1000 為對話框視窗,抓完必須關掉對話框 1. 若畫面開啟失敗,不做處理,直接開下一個視窗

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