最近在做一个项目,程序中需要比较5台机组的运行时间大小并排序,我写了个FC块(具体程序如下),想实现的功能见一下描述。感觉没有错(呵呵,鄙人一向感觉良好,见笑了),可在plcsim中下载了硬件、程序(OB1中有调用此FC块)后,出现错误导致cpu停机,从诊断缓冲区中看出,cpu直接停机原因是优先级错误,同时还有两个错误,大意是:1、读的时候地址区长度错误;2、读的时候设置错误(因为有ob121,这两条不是cpu停机的直接原因),不过当从这两条打开块时,光标停在程序中 L DBD [MD 2]的位置,不知是什么原因,请高手指点!
程序想实现的功能:比较5个双整数的大小并从小到大排序
实现思路:1、在db10中依次存有5个双整数dbd0,dbd4,dbd8,dbd12,dbd16;2、先用dbd0中的数与其它四个数逐个比较,最后将最小的数放在dbd0中(如当dbd0与dbd4比较时,如果前者小于后者,二者位置不表,继续将dbd0与dbd8比较,依次类推,如前者大于后者,则互换二者的位置,然后用新的dbd0中的数与dbd8比较,依次类推、、、待dbd0与dbd16比较后,即得出了最小值,其存在于dbd0中;3、比较基准改变,即用dbd4中的数与dbd8、、、dbd16中的数比较,方法同上,得出次最小值,置于dbd4中;4、依次类推,最后结果是五个数将由从小到大的顺序依次存放在dbd0到dbd16中。
妈呀,说了好多,费了这多话,不晓得说清楚了没,请高手指教!
L L#0
T MD 2
L 4
T MW 40
A1: L MD 2
T LD 20
AB: OPN DB 10
L DBD [LD 20]
T LD 0
L L#4
L MD 2
+D
T MD 2
L LD 0
OPN DB 10
L DBD [MD 2]
<=D
JC BC
OPN DB 10
T DBD [LD 20]
TAK
OPN DB 10
T DBD [MD 2]
BC: L MD 2
L L#16
==D
JC CD
JU AB
CD: L MW 40
LOOP A2
A2: L L#4
L LD 2
+D
T LD 2
JU A1