技术论坛

 回复:先入先出指令的运用问题

返回主题列表
作者 主题
jk88
游民

经验值:86
发帖数:25
精华帖:0
楼主    2011-08-30 09:15:13
主题:先入先出指令的运用问题
有10个单元,每个单元有相同的工作流程,且同一时间内最多只能有1个单元进行工作,每个单元都会发出动作请求和动作完成信号(开关量),并且先请求的先动作,完成动作后,单元发出动作完成信号(开关量)。 在用先入先出指令时,我用每一个单元的动作完成信号并联作为先入先出指令的标志位,这样会出现一个问题,当开始的时候没有一个单元能发出动作完成信号,所以先入先出指令无法执行,怎么办?
icegrave
侠客

经验值:864
发帖数:249
精华帖:2
9楼    2011-09-02 15:12:03
精华帖  主题:回复:先入先出指令的运用问题
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
生命就是次单程旅行
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。