我刚学PLC,自己写了一段FC1块,然后在OB1里面带参数调用FC1,输入参数file处给的是db1.dbd6可是为什么模拟一开始,在L P##file 指令那一行,standard显示就是c0,
当我强制输入信号Enter时,Souce里的数据是传入DB1.DBD24 可是我期望的是将数据传入DBD6 我错在哪里呢?
问题补充:
我的目的是:在Enter的每一个上升沿取Souce(数据类型:Dword)里的数据存入数据块DB1内,
存放地址是从File(数据类型:Dword)指定的地址开始,
取数据的次数由Length确定,Position是当前取的次数,
当Position=Length时,输出DN位。
在OB1调用FC1时给出的实参是:
CALL FC 1
Enter :=L20.0
Souce :=MD2
Length :=DB1.DBW2
DN :=DB1.DBX0.1
ER :=DB1.DBX0.0
File :=DB1.DBD6
Position:=DB1.DBW4
请求各位高工再帮我看看:
1.我用FC块来做这段程序合适吗?
2.给定的实参到了FC块内部执行时怎么变成了C0?
图片说明:
最佳答案
你没有给出#file的类型,我感觉应该是Pointer吧,在FC中不能直接传递Pointer,要对其进行拆分取出实参的地址。
见附件的写法试试。
1、可以使用FC做,没问题。
2、那是存放输入实参的地址,要对存放地址进行分析后取出实参的地址。
图片说明:
提问者对于答案的评价:
按照你的提醒,指针问题已经解决,但是无论Enter使能多少次,Position的值总是在2和3之间跳来跳去,DB1中也只有DB6和DB14中传入了数据。能不能再帮我检查一下,
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc238689.html