quote:以下是引用芳季在2013-12-28 07:30:45的发言:
这个,弯要拐得比较大。边缘,计数,计时,要用手工编程实现。具体只能自己尝试了。
原则只有一条,每一个L都要有确定的值才能使用。进入子程序时的in/out,in参数可以自动带入值。
我还有個问题跟你请教下:程序执行的中间结果是在程序被执行后立马有效还是在下一个扫描周期开始有效?例如M0.0的线圈为ON后,后面的M0.0的触点立马有效还是要到下一个扫描周期开始有效?
测试程序如下:
ORGANIZATION_BLOCK 主程序:OB1
TITLE=程序注释
BEGIN
Network 1 // 网络标题
// 例1,
LD M0.0
S M1.0, 1
Network 2
LD I0.0
LPS
AN M0.1
= M0.0
LPP
= M0.1
Network 3
LD M0.0
S M1.1, 1
Network 4
// 例2
LD T37
S M2.0, 1
Network 5
LDN T37
TON T37, 30
Network 6
LD T37
S M2.1, 1
END_ORGANIZATION_BLOCK
SUBROUTINE_BLOCK SBR_0:SBR0
TITLE=子程序注释
BEGIN
Network 1 // 网络标题
// 网络注释
END_SUBROUTINE_BLOCK
INTERRUPT_BLOCK INT_0:INT0
TITLE=中断程序注释
BEGIN
Network 1 // 网络标题
// 网络注释
END_INTERRUPT_BLOCK
在300仿真中的执行结果如下:M0.0 为ON一個扫描周期,可以将M1.0和M1.1都置位;而T37为ON一个扫描周期,只能置位M2.0,M2.1始终为0.
对于这个结果我迷糊了,如果说是在线圈执行完后立即有效,M1.0和M1.1都置位可以解释的通;如果说是在程序扫描的开始有效的话,T37的执行结果也解释的通。那到底是那个是对的,还是2個都对或都不对?还我仿真的有问题?还是程序有问题?(明天下载到CPU在看看)