| 作者 | 主题 |
|---|---|
|
芳季 至圣
经验值:72120 发帖数:15507 精华帖:101 |
楼主
主题:征求一个程序思路。用户级可编程动作顺序。
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楼
主题:回复:征求一个程序思路。用户级可编程动作顺序。
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 的情况。 这个方法很土,也很简单。 不过,我想,应该很实用。 特别是对象我这样的新手。
成功的叫经验,失败的叫经历
|