| 作者 | 主题 |
|---|---|
|
工控侠隐 侠士
经验值:1640 发帖数:306 精华帖:2 |
楼主
主题:间接寻址---300系列 最近,写了几个程序,都用到了SCL的间接寻址指令。之前,没有SCL的时候,一直用STL做,感觉很好用,利用地址寄存器做地址的计算寻址。现在,对于不是逻辑运算,主流应该用SCL比较多,于是找了找SCL的间接寻址方法。指令简单易懂,十分好用,唯一遗憾的是不能访问当前FB的背景数据块。 现在我就来简单介绍下300CPU的间接寻址方法吧。具体请看我上载的附件截图即可。 以下是对DB块的位和浮点数的间接寻址访问: IF WORD_TO_BLOCK_DB(#I_wDBNO).DX(IDX := #"I_iResetConsumptionAddr.byte" + (#IO_i - 1) * #I_iInterval, BIT := #"I_iResetConsumptionAddr.bit") AND NOT #I_bDosingUnitOn THEN WORD_TO_BLOCK_DB(#I_wDBNO).DD(#I_iOldConsumptionAfterResetAddr + (#IO_i - 1) * #I_iInterval) := WORD_TO_BLOCK_DB(#I_wDBNO).DD(#I_iNewConsumptionBeforeResetAddr + (#IO_i - 1) * #I_iInterval); END_IF; 另外,使用WORD_TO_BLOCK_DB做间接寻址时,需要注意以下几点:
3.如果要对浮点型的DB块数据访问,需要用DWORD_TO_REAL()指令进行转换,这里不支持隐式转换。 如果,有不对的地方请各位大神指正,谢谢!后续继续更新。
我爱工控!尤爱西门子!
|