欧姆龙NJ系列排序(ST语言)

文章讨论了在欧姆龙NJ系列控制器中遇到的数据排序挑战,由于RecSort指令不保证排序完成就触发新数据获取,导致数据混乱。作者采用了冒泡排序算法,确保排序过程完整执行,避免了未完成排序即开始新数据读取的情况。
摘要由CSDN通过智能技术生成

欧姆龙NJ系列有自带RecSort指令可以进行排序,但这个指令也是只管触发,不会等待完成,因为我们的数据是实时产生的,RecSort排序没执行完下一次获取数据早就已经开始了,数据会乱。

我使用的是冒泡排序,简单粗暴,会按照顺序从上到下执行,不会出现还没排完下次读取就开始的情况。

//for (i=0; i<len-1; i++) //* 外循环为排序趟数,len个数进行len-1趟 */
FOR ui_Loop_i := UINT#1 TO (s_HMISysInfo_Tmp.MachineOnlineCount - UINT#2) BY UINT#1 DO
   // for (j=0; j<len-1-i; j++) { //* 内循环为每趟比较的次数,第i趟比较len-i次 */
	FOR ui_Loop_j := UINT#1 TO (s_HMISysInfo_Tmp.MachineOnlineCount - UINT#2 - ui_Loop_i) BY UINT#1 DO
        if (s_HMIProduceInfo.asSN[ui_Loop_j].ProduceFinishPer < s_HMIProduceInfo.asSN[ui_Loop_j + 1].ProduceFinishPer)  THEN //* 相邻元素比较,若逆序则交换(升序为左大于右,降序反之) */
            temp := s_HMIProduceInfo.asSN[ui_Loop_j];
            s_HMIProduceInfo.asSN[ui_Loop_j] := s_HMIProduceInfo.asSN[ui_Loop_j + 1];
            s_HMIProduceInfo.asSN[ui_Loop_j + 1] := temp;
		END_IF;
	END_FOR;
END_FOR;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值