技术论坛

 回复:征求一个程序思路。用户级可编程动作顺序。

返回主题列表
作者 主题
芳季
至圣

经验值:72120
发帖数:15507
精华帖:101
楼主    2012-07-18 10:10:19
主题:征求一个程序思路。用户级可编程动作顺序。
PLC有5个输出点要求又用户确定动作次序。
文本等有5个空格可以填写0到5六个数字。
五个空格对应是5个输出的动作顺序号。填写0的不参与顺序。
程序就是要求用户填完这五个空格后。5个输出就可以按照顺序动作。
例如填写3 2 1 0 4
那么输出的状态就是
1.亮Q0.3,1秒后灭
2.亮0.2,1秒后灭
3.亮0.1,1秒后灭
4.亮0.5,1秒后灭(因为第五格代表Q0.5,他里面填写4,表示第四步要亮)
这个程序有人问过了,也有人做过,可论坛上还是没有这方面的资料。想大家一起想想如何编程好。
不做工控行不行
游侠

经验值:458
发帖数:174
精华帖:1
39楼    2012-07-27 14:03:56
精华帖  主题:回复:征求一个程序思路。用户级可编程动作顺序。
PLC 被拿走了,无法测试斑竹的程序了,试不了了。
我的 思路:
1, vW0 定义为执行程序时的步标志(从1开始),
2, VW2-VW2n 用来存放用户程序执行的步顺序(1到n,0表示不执行)。(最大值N为步长,当用户安排的步顺序中含有K个0时,步长=N-K)。
3, 当VW0=VWx 的时候,执行VWx 对应的程序(要是程序动作多,可以用子程序),程序结束时,VW0+1=VW0
当VW0>步长时,返回 1 给VW0
4,返回,重新执行第3步,

这样,程序做起来就很简单了,既可以满足芳大侠提出的 基本要求(用户可以随意编排顺序),也可以满足芳侠提出的两点扩展要求;还可以多一个扩展的要求,即,可以随意取消中间任何步骤,被取消的步骤不会占用户的动作时间。

以下 是我写的一部分程序(不考虑0,考虑0的话程序会比较长),程序可以转换成梯形图的。
主程序 网络1
LD SM0.0
LPS
AW= VW0, VW2
CALL SBR_0:SBR0, Q0.0
LRD
AW= VW0, VW4
CALL SBR_0:SBR0, Q0.1
LRD
AW= VW0, VW6
CALL SBR_0:SBR0, Q0.2
LRD
AW= VW0, VW8
CALL SBR_0:SBR0, Q0.3
LPP
AW= VW0, VW10
CALL SBR_0:SBR0, Q0.4

子程序
网络1
LD SM0.0
LPS
AN T37
= #B_OUT:L0.0
LPP
AN T37
TON T37, +10
网络2
LD T37
ED
+I +1, VW0
AW= VW0, 6 // 没有0 的时候,这里的就是常数“6”了,有0 的时候,要用变量(=N-K+1)
MOVW +1, VW0

这部分程序没有考虑0的情况。
有0 的时候,只需用指针方法找出VW0-VW2n中的最大值+1给上面的程序(N-K+1)的位置中的变量,就可以了。
这个程序也是我邮箱中的程序,程序密码:LONG (大写的)。邮箱中的程序还是以前好几天写的了,当时没用指针,只是用最死板的方法,来判断的又1个为0 的情况。
这个方法很土,也很简单。
不过,我想,应该很实用。
特别是对象我这样的新手。
成功的叫经验,失败的叫经历
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。