PLC程式中的配方應用

不愿透露姓名的小村村發表於2024-04-30
  1. 建立ARRAYDB
  • 集合配方需要的所有元素結構,組成一個UDT(包含範圍最全)
  • 新建一組ARRAY DB,元素的個數就是配方需要的副本的個數
  • 陣列DB勾選僅儲存在裝載記憶體中,以便資料量大的配方不佔用資料工作儲存器空間,節省資源
  • 在ARRAY DB的起始值處填寫配方的具體值
  • 1200不支援ARRAY DB,所以用普通全域性DB替代也可
  1. 配方表的匯入匯出
  • 匯入
//export
#statExRecipe.req := #H_animinal.start_export_button;
#RecipeExport_Instance(REQ := #statExRecipe.req,
                       DONE => #statExRecipe.done,
                       BUSY => #statExRecipe.busy,
                       ERROR => #statExRecipe.error,
                       STATUS => #statExRecipe.status,
                       RECIPE_DB := "Product_Recipe");
  • 匯出
//import
#statImRecipe.req := #H_animinal.start_import_button;
#RecipeImport_Instance(REQ:=#statImRecipe.req,
                       DONE=>#statImRecipe.done,
                       BUSY=>#statImRecipe.busy,
                       ERROR=>#statImRecipe.error,
                       STATUS=>#statImRecipe.status,
                       RECIPE_DB:="Product_Recipe");
  • 匯入匯出位置
  1. DBL的讀出和寫入
  • 從DBL讀出到程式中使用,靠index索引,靠req使能,statReturnRDDBL=16#7002時表示讀出完成
  • read_DBL本身是非同步指令,整個過程會橫跨多個掃描週期,另外因為是從儲存卡讀取而來,讀取速度上不是很快
  • DBL因為使能了僅儲存在裝載記憶體中,故不能線上,它只有起始值,沒有線上值。
  • 寫入同理
//read_DBL
#statReadDBL.req := #H_animinal.start_readDBL_button;
#statReturnRDDBL:=READ_DBL(REQ := #statReadDBL.req, SRCBLK :="Product_Recipe"."THIS"[#H_animinal.recipe_index] , BUSY => #statReadDBL.busy, DSTBLK => #H_current_params);
IF 16#7002 = #statReturnRDDBL THEN
    #H_animinal.start_readDBL_button := FALSE;
END_IF;

//write DBL
#statWriteDBL.req := #H_animinal.start_writeDBL_button;
#statReturnWRDBL := WRIT_DBL(REQ := #statWriteDBL.req, SRCBLK :=#H_current_params, BUSY => #statWriteDBL.busy, DSTBLK => "Product_Recipe"."THIS"[#H_animinal.recipe_index]);
IF 16#7002 = #statReturnWRDBL THEN
    #H_animinal.start_writeDBL_button := FALSE;
END_IF;

相關文章