恭喜,你发布的帖子
发布于 2023-04-24 17:01:54
2楼
OK,搞出来了,除了本身的IO地址,还用了IO地址的两倍的BOOL地址和一倍的字地址(用来更改映射关系的变量,不可缺少的),
总共四类,四个作用,
第一类IO地址,外部硬件地址
第二类DB块地址,建立数组为8或者16的BOOL数组,IO直接映射到DB地址这些地址
第三类地址 ,程序直接使用的地址
第四类地址 字地址用来给数组变址映射到第三类用的
因为IO直接映射到了DB BOOL数组地址
那么DB数组地址通过字地址变址再映射到第三类程序直接使用的地址就OK了
FOR #A := 0 TO 14 DO
"输入映射".DI1[#A] := PEEK_BOOL(area := 16#81, dbNumber := 0, byteOffset := #A / 8, bitOffset := #A MOD 8);
END_FOR;
"Tag_1":= "输入映射".DI1["输入映射".DI1映射编号[0]];
上述程序,将IO地址用For循环映射到DB 数组16个 BOOL,这些是固定的。
DB 数组16个 BOOL在通过字变址逐个映射到程序直接用到的BOOL地址上就OK了。
前提是需要将8输入输出或者16输入输出按0-7或者0-15按顺序编号。
这样就可以实现通过更改"输入映射".DI1映射编号[0] 的数值变更到不同的IO点了。
请填写推广理由:
分享
只看
楼主