如何做判断程序?

分享到:
247
下一篇 >

菜鸟:

有VW2100~VW2198共50格输入值,比如有 20 格输入值<>0,当第 21 格没有输入时(即为 0),程序就认定此配方的数据只有 20格,并且在系统工艺流程的工作中程序走完第20格后返回第1格重新开始。

当然实际情况可能是前10格有输入值、或者前25格有输入值,这是由客户自定义多少输入格,*多50格输入值。

现在就这样一个问题请教各位大侠:怎么做这样的判断程序?

大虾:

其实我从第1格开始走到第50格然后重新回到第1个循环工作的程序都做好了。

只是当实际没有50格输入,可能只有10格或者20格输入,那就只能工作到10格或者20格然后就得回到第1个重新开始循环工作,现在我就差判断实际到底有多少个输入,就是说判断从N格开始输入值为0,则认定在此程序只有N-1格。现在问题就是如何去判断一下客户输入的有多少格?

搜索“0”值。指针加一(字节加一,字加二,双字加四),直到找到0值,看看指针一共加过多少?

数据空间保证有51个位置,并且第51个恒定为0。

不是这样吗?

或者第51个是一个数据输入范围内不可能出现的值,例如:255。也就是-1。你输入时间、次数等的数值是不可能输入负数的,所以就用一个负数来区别这里是不是属于数据区。这个方法要求用户在输入数据的时候要在不工作的数据上输入-1 。

或者再让用户输入一个数据数,表示数据区的长度。

菜鸟:

怎么搜索“0”值呢?有这样的指令吗?是用查表指令码?

大虾:

循环+指针

间接寻址知道不?

确定指针

循环开始

用间接寻址和0对比,

不相等的话,把这个间接地址的值增加一

如果相等,把循环数写成*大值。

返回开始循环

循环结束

菜鸟:

谢谢芳季大侠,看来我进入误区了。本来这个问题我问过一个西门子的技术支持,他说用填表、查表指令。

但我没做成功,所以到论坛上来请教下各位大侠。谢谢芳季大侠和shine版主的回答。

芳大侠,这是我跟根据你的回答写的程序,你看是否可以?

Network 1

LD SM0.0

MOVD &VB2100, AC1

Network 2

LD SM0.0

FOR *AC1, +1, AC0

Network 3

LDW<> *AC1, 0

+I 1, AC1

Network 4

LDW= *AC1, 0

MOVW 50, AC0

Network 5

NEXT

大虾:

思路正确了。但是把for的参数用上ac的话那么只能对字节参数找0 。因为每次for指令只会把ac增加1,得不到其他结果。按字寻址的话需要加2。按双字寻址的话需要加4 。你还是把加的动作用加法指令做吧。

调试要有机才可以调的。


你可能感兴趣: 工控菜鸟园 自动化系统 SIMATIC S7-200
无觅相关文章插件,快速提升流量