恭喜,你发布的帖子
发布于 2016-05-06 10:02:11
1楼
用AT 变量覆盖功能,
比如下边示例代码tmpDataforCal是一个ANY 类型的指针。
VAR_TEMP
tmpDataforCalStruct AT tmpDataforCal:STRUCT
Head:BYTE;
DataTyp:BYTE;
Reapeater:WORD;
DBNO:WORD;
Addr:DWORD;
END_STRUCT;
ByteInfo,BitInfo:INT;
END_VAR
当P# I100.0 BOOL 16 实参传递到tmpDataforCal 后,tmpDataforCalStruct.Addr并不等于100,而等于P#100.0,也就是800,但是在SCL里进行寻址比如 I100.1时 以I[100,1]的形式来进行寻址的
所以应该有个
ByteInfo=DWORD_TO_INT(SHR(IN:=(tmpDataforCalStruct.Addr AND DW#16#00FFFFFF),N:=3));
BitInfo=DWORD_TO_INT(tmpDataforCalStruct.Addr) MOD 8 的过程
下面,你就可以以FOR 语句 进行赋值
WORD_TO_BLOCK_DB(DBNO).Dx[ByteInfo,BitInfo];=I[ByteInfo,BitInfo];
然后对ByteInfo和BitInfo 进行赋值即可。
以上是STE7 V5.x中的SCL 寻址
博途中的寻址见如下!
请填写推广理由:
分享
只看
楼主