连续地址怎么判断和操作

有i0.1到i0.7共6个输入点
需要写一个FC,其中有两个输入参数,表示起始地址和结束地址,比如参数1给2,参数2给5。就表示是i0.2到i0.5。然后在FC里面执行判断i0.2,i0.4,i0.5三个地址是否为1。
这个是否要用到间接寻址?可以用Lad实现吗?

问题补充:
应该是i0.2,i0.3,i0.4,i0.5共4个地址是否为1。

最佳答案

不用间接寻址会无比麻烦,所以用LAD 来说是很复杂的,所以只能用STL了。

应该是i0.2,i0.3,i0.4,i0.5共4个地址是否为1。
你的问题是这几个位与的结果吗?
假设你的FC 的IN1 接口为StartAddr:INT  ;IN2 接口为EndAddr:INT.
做一个Out接口AndResult:BOOL
做4个Temp变量:AndResultTemp:BOOL;TempAddr1,TempAddr2,都为DWORD类型
CalcCnt:INT

L StartAddr
ITD
T TempAddr1
L EndAddr
ITD
T TempAddr2
A I[TempAddr1]
=AndResult
L EndAddr
L StartAddr
-I
Calc:T CalcCnt
A AndResult
A I[TempAddr2]
=AndResult
L TempAddr2
L 1
-D
T TempAddr2
L CalcCnt
LOOP Calc
当然 这个程序的通用性不高,仅仅针对你的地址从I0.0到I0.7开始的运算,如果你需要从Ix.y开始到Ia.b结束,你需要做4个接口x,y,a,b

提问者对于答案的评价:
A I[TempAddr1]如果我在startAddress中输入1,这个是不是就变成A I[1]了,这个代表为什么会代表I0.1呢

最佳答案作者回复:
学习下间接寻址
S7-300和S7-400寻址
https://support.automation.siemens.com/CN/llisapi.dll?func=cslib.csinfo&lang=zh&objid=79632832&caller=view

西门子STL间接寻址常问问题集
https://support.automation.siemens.com/CN/llisapi.dll?func=cslib.csinfo&lang=zh&objid=76492353&caller=view

原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc228186.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2018年12月1日
下一篇 2018年12月1日

相关推荐