前言
本系列是关于PLC相关的博文,包括PLC编程、PLC与上位机通讯、PLC与下位驱动、仪器仪表等通讯、PLC指令解析等相关内容。
PLC品牌包括但不限于西门子、三菱等国外品牌,汇川、信捷等国内品牌。
除了PLC为主要内容外,PLC相关元器件如触摸屏(HMI)、交换机等工控产品,如果有值得记录的内容,也会添加进来。
环境配置
系统:windows
软件:PLC编程软件(依品牌而定,如博图)
语言:梯形图、STL、C、js(脚本用)等
库:相应PLC指令库、通用脚本
本篇内容
本篇主要介绍在汇川Eazy521系列PLC中,使用其LiteST语言,来编写一个对乱序数组进行排序的程序(冒泡法)。
冒泡法介绍
算法原理
冒泡排序通过不断地比较相邻元素并交换它们的位置,使得较大的元素逐渐“浮”到数组的末尾,而较小的元素则逐渐“沉”到数组的开头,因此得名“冒泡排序”。
该算法通过重复地遍历待排序的列表,比较每对相邻的项,如果它们的顺序错误就把它们交换过来。遍历列表的工作是重复地进行直到没有再需要交换,也就是说该列表已经排序完成。
PLC代码实现
temp1:=0;
inputtemp:=inputarray;
if enable then
if mode = 0 then
FOR i :=0 TO 9 BY 1 DO
for j:=0 to 9-i by 1 DO
m:=j+1;
if inputtemp[j] > inputtemp[m] THEN
temp1:=inputtemp[j];
inputtemp[j]:=inputtemp[m];
inputtemp[m]:=temp1;
END_IF;
END_FOR;
END_FOR;
ELSIF mode =1 THEN
FOR i :=0 TO 9 BY 1 DO
for j:=0 to 9-i by 1 DO
m:=j+1;
if inputtemp[j] < inputtemp[m] THEN
temp1:=inputtemp[j];
inputtemp[j]:=inputtemp[m];
inputtemp[m]:=temp1;
END_IF;
END_FOR;
END_FOR;
END_IF;
outputarray:=inputtemp;
END_IF;
上面的代码是汇川PLC中以LiteST语言编写的,是一个FC块封装:
参数也很简单,enable是用来开启算法的,因为内部是使用for循环来计算的,因此会消耗芯片的性能,我们只在需要排序的时候触发一下使能信号计算就行。
inputarray是输入数组,本例中的数组长度为10,因为冒泡法是一个简单的算法,且用到了for循环,对于长度很大的数组来说,这种算法就显得不足了。
因此本例中你的方法,只针对于数组长度不大的情况下。
mode是用来切换排序顺序的,可以从大到小,也可以从小到大。
我们来看一下实例演示:
稍后添加