欧姆龙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;