PLC程序中的配方应用
1. 建立ARRAYDB
- 集合配方需要的所有元素结构,组成一个UDT(包含范围最全)
- 新建一组ARRAY DB,元素的个数就是配方需要的副本的个数
- 数组DB勾选
仅存储在装载内存中
,以便数据量大的配方不占用数据工作存储器
空间,节省资源 - 在ARRAY DB的起始值处填写配方的具体值
- 1200不支持ARRAY DB,所以用普通全局DB替代也可
2. 配方表的导入导出
导入
1
2
3
4
5
6
7
8//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");导出
1
2
3
4
5
6
7
8//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");导入导出位置
3. DBL的读出和写入
- 从DBL读出到程序中使用,靠index索引,靠req使能,statReturnRDDBL=16#7002时表示读出完成
- read_DBL本身是
异步指令
,整个过程会横跨多个扫描周期,另外因为是从存储卡读取而来,读取速度上不是很快 - DBL因为使能了
仅存储在装载内存中
,故不能在线,它只有起始值,没有在线值。 - 写入同理
1
2
3
4
5
6
7//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;1
2
3
4
5
6
7//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;
PLC程序中的配方应用
http://example.com/2024/07/21/PLC程序中的配方应用/