| 作者 | 主题 |
|---|---|
|
jk88 游民 经验值:86 发帖数:25 精华帖:0 |
楼主
主题:先入先出指令的运用问题
有10个单元,每个单元有相同的工作流程,且同一时间内最多只能有1个单元进行工作,每个单元都会发出动作请求和动作完成信号(开关量),并且先请求的先动作,完成动作后,单元发出动作完成信号(开关量)。 在用先入先出指令时,我用每一个单元的动作完成信号并联作为先入先出指令的标志位,这样会出现一个问题,当开始的时候没有一个单元能发出动作完成信号,所以先入先出指令无法执行,怎么办?
|
|
icegrave 侠客 经验值:864 发帖数:249 精华帖:2 |
9楼
主题:回复:先入先出指令的运用问题
Jk88
1 FILL 0, VW2, 6 这条指令不用要吧 这条这条指令是用来初始化表格的。因为在用的时候我并不清楚这一段存储空间的状态。 2.关于按钮,那是用来上电后首次执行动作用的。只要设备进入动作执行状态,下次执行都是依靠动作完成信号来激活。并不会失去自动的意义。如果不想用也是可以的。 在设备动作执行过程中,哪怕队列中只有一个动作请求也是会执行的,这一点我刚才试过了。 在我给你程序中应该加上队列中请求数的判断,当队列中只有一个请求,执行完后,如果没有新的动作请求,应该给VW101写0让设备停下来,队列中的请求数直接读VW2(表的实际条目数),你看这样是不是比判断vw4大于等于1的开点和VW6小于等于1更加省事? 我将程序改了下,你看看能不能达到你的要求。 TITLE=程序注释 Network 1 // 初始化 // 1.建动作请求表 // 2.初始化动作请求表 LD SM0.1 MOVW 5, VW0 FILL 0, VW2, 6 Network 2 // 网络标题 // I0.0---I0.4对应1到5号单元的动作请求 // 每次收到动作请求响应 // 1.把动作请求的单元编号存到表中 // LD I0.0 EU ATT 1, VW0 Network 3 // 网络标题 // 网络注释 LD I0.1 EU ATT 2, VW0 Network 4 // 网络标题 // 网络注释 LD I0.2 EU ATT 3, VW0 Network 5 // 网络标题 // 网络注释 LD I0.3 EU ATT 4, VW0 Network 6 // 网络标题 // 网络注释 LD I0.4 EU ATT 5, VW0 Network 7 // 把表中的单元编号,按先进先出的顺序读出来。 // I0.5---I1.1对应1到5号单元的动作完成信号输入 LDW= VW2, 1 LD I0.5 EU OLD LD I0.6 EU OLD LD I0.7 EU OLD LD I1.0 EU OLD LD I1.1 EU OLD AW>= VW2, 1 FIFO VW0, VW101 Network 8 //如果队列中无请求,则停下来 LDW= VW2, 0 MOVW 0, VW101 Network 9 // 根据单元编号执行动作 // Q0.0-----Q0.4对应1到5号单元的动作使能 LDW= VW101, 1 = Q0.0 = M0.1 Network 10 LDW= VW101, 2 = Q0.1 = M0.1 Network 11 LDW= VW101, 3 = Q0.2 = M0.1 Network 12 LDW= VW101, 4 = Q0.3 = M0.1 Network 13 LDW= VW101, 5 = Q0.4 = M0.1
生命就是次单程旅行
|