有i0.1到i0.7共6个输入点
需要写一个FC,其中有两个输入参数,表示起始地址和结束地址,比如参数1给2,参数2给5。就表示是i0.2到i0.5。然后在FC里面执行判断i0.2,i0.4,i0.5三个地址是否为1。
这个是否要用到间接寻址?可以用Lad实现吗?
ASs='html_titleimg_p' STyle='text-align:center;'>
问题补充:
应该是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
LStartAddr
ITD
TTempAddr1
LEndAddr
ITD
TTempAddr2
AI[TempAddr1]
=AndResult
LEndAddr
LStartAddr
-I
Calc:TCalcCnt
AAndResult
AI[TempAddr2]
=AndResult
LTempAddr2
L1
-D
TTempAddr2
LCalcCnt
LOOPCalc
当然这个程序的通用性不高,仅仅针对你的地址从I0.0到I0.7开始的运算,如果你需要从Ix.y开始到Ia.b结束,你需要做4个接口x,y,a,b
提问者对于答案的评价:
AI[TempAddr1]如果我在startAddress中输入1,这个是不是就变成AI[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