QQ登录

只需一步,快速开始

威纶触摸屏中数组中最大最小值判断的宏指令函数是什么

[ 复制链接 ]
比如数组:
data[120]={12.45,12.33,12.34,12.36,12.37,12.32,12.33,12.38,12.35,12.34,12.31,12.29,12.35,12.33,12.34,12.36,12.37,12.32,12.33,12.38,12.35,12.3
4,12.31,12.29,12.35,12.33,12.34,12.36,12.37,12.32,12.33,12.38,12.35,12.34,12.31,12.29,12.35,12.33,12.34,12.36,12.37,12.32,12.33,12.
38,12.35,12.34,12.31,12.29,12.35,12.33,12.34,12.36,12.37,12.32,12.33,12.38,12.35,12.34,12.31,12.29,12.35,12.33,12.34,12.36,12.37,12
.32,12.33,12.38,12.35,12.34,12.31,12.29,12.35,12.33,12.34,12.36,12.37,12.32,12.33,12.38,12.35,12.34,12.31,12.29,12.35,12.33,12.34,1
2.36,12.37,12.32,12.33,12.38,12.35,12.34,12.31,12.29,12.35,12.33,12.34,12.36,12.37,12.32,12.33,12.38,12.35,12.34,12.31,12.29,12.35,
12.33,12.34,12.36,12.37,12.32,12.33,12.38,12.35,12.34,12.31,12.21},  
要找出其中最大、最小值,该用何命令?
另外,我想把这120个数据分别在120个数据显示元件中显示,有什么简便指令?
谢谢!!


回答:
这是一个很精典的需求,对应有一个很精典的冒泡排序算法。
可以使用威纶触摸屏宏指令循环语句来实现对数组升序或降序冒泡排序后,
提取数组的首尾元素就为最大,最小数据。
这里编写一个实例,提供两种方法来回答。
界面如下:

威纶触摸屏中数组中最大最小值判断的宏指令函数是什么

威纶触摸屏中数组中最大最小值判断的宏指令函数是什么

点击两个按钮,会分别调用两个宏指令,使用两种方法对上面的数组进取最大,最小值。
两个宏指令代码如下:

  1. macro_command main()
  2. float data[120]={12.45,12.33,12.34,12.36,12.37,12.32,12.33,12.38,12.35,12.34,12.31,12.29,12.35,12.33,12.34,12.36,12.37,
  3. 12.32,12.33,12.38,12.35,12.34,12.31,12.29,12.35,12.33,12.34,12.36,12.37,12.32,12.33,12.38,12.35,12.34,12.31,12.29,12.35,
  4. 12.33,12.34,12.36,12.37,12.32,12.33,12.38,12.35,12.34,12.31,12.29,12.35,12.33,12.34,12.36,12.37,12.32,12.33,12.38,12.35,
  5. 12.34,12.31,12.29,12.35,12.33,12.34,12.36,12.37,12.32,12.33,12.38,12.35,12.34,12.31,12.29,12.35,12.33,12.34,12.36,12.37,
  6. 12.32,12.33,12.38,12.35,12.34,12.31,12.29,12.35,12.33,12.34,12.36,12.37,12.32,12.33,12.38,12.35,12.34,12.31,12.29,12.35,
  7. 12.33,12.34,12.36,12.37,12.32,12.33,12.38,12.35,12.34,12.31,12.29,12.35,12.33,12.34,12.36,12.37,12.32,12.33,12.38,12.35,12.34,12.31,12.21}
  8. //假设已知最小值不超过0.0,最大值不超过1000.0
  9. float fMax=0.0,fMin=1000.0
  10. short i=0
  11. for i=0 to 119 step 1
  12. if data[i]>fMax then
  13. fMax = data[i]
  14. end if
  15. //
  16. if data[i]<fMin then
  17. fMin = data[i]
  18. end if
  19. next
  20. SetData(fMax, "Local HMI", LW, 0, 1)
  21. SetData(fMin, "Local HMI", LW, 2, 1)
  22. end macro_command
复制代码


上面这一种方法相对运算快,理解起来也简单。
前提是要知道数值的大小范围。

下面一种方法是冒泡排序算法,将数组元素从左到右升序排序。
用到了双重循环语句,模拟运行测试,速度明显慢很多。
可以根据自己需要选择使用。
宏指令代码如下:

  1. macro_command main()
  2. float data[120]={12.45,12.33,12.34,12.36,12.37,12.32,12.33,12.38,12.35,12.34,12.31,12.29,12.35,12.33,12.34,
  3. 12.36,12.37,12.32,12.33,12.38,12.35,12.34,12.31,12.29,12.35,12.33,12.34,12.36,12.37,12.32,12.33,12.38,12.35,
  4. 12.34,12.31,12.29,12.35,12.33,12.34,12.36,12.37,12.32,12.33,12.38,12.35,12.34,12.31,12.29,12.35,12.33,12.34,
  5. 12.36,12.37,12.32,12.33,12.38,12.35,12.34,12.31,12.29,12.35,12.33,12.34,12.36,12.37,12.32,12.33,12.38,12.35,
  6. 12.34,12.31,12.29,12.35,12.33,12.34,12.36,12.37,12.32,12.33,12.38,12.35,12.34,12.31,12.29,12.35,12.33,12.34,12.36,
  7. 12.37,12.32,12.33,12.38,12.35,12.34,12.31,12.29,12.35,12.33,12.34,12.36,12.37,12.32,12.33,12.38,12.35,12.34,12.31,
  8. 12.29,12.35,12.33,12.34,12.36,12.37,12.32,12.33,12.38,12.35,12.34,12.31,12.21}
  9. int nLen=120//数组元素个数
  10. //从左到右升序冒泡排序
  11. int x=0,y=0,y1=0
  12. for x=0 to nLen-2 step 1//要排序几趟
  13.   for y=0 to nLen-2-x step 1//每趟比较几次
  14.     y1=y+1
  15.     if data[y]>data[y1] then   
  16.       float b=0.0
  17.       b=data[y1]
  18.       data[y1]=data[y]
  19.       data[y]=b
  20.     end if
  21.   next
  22. next
  23. SetData(data[119], "Local HMI", LW, 0, 1)
  24. SetData(data[0], "Local HMI", LW, 2, 1)
复制代码


//要将数组元素都显示,可以直接用下面SetData函数.
//要注意的是数组元素为浮点数,占用两个寄存器。
//如data[0]占用RW0,RW1。
//120表示120个浮点数值,也就是说会用到RW0--RW240共240个配方寄存器。
SetData(data[0], "Local HMI", RW, 0, 120)
end macro_command

下面为例程下载地址:
请点击此处下载

请先注册会员后在进行下载

已注册会员,请先登录后下载

文件名称:威纶触摸屏中数组中最大最小值判断的宏指令函数是什么.rar 
文件大小:335.44 KB  售价:10金币
下载权限: 不限 以上或 VIP会员   [购买捐助会员]   [充值积分]   有问题联系我


如果不熟悉宏指令,也可以看看我录制的两套威纶通视频教程。

  

如果您认可,可联系功能定制!

  

如果您着急,充值会员可直接联系发您资料!

  

QQ联系我

微信扫扫联系我

  


回复

使用道具 举报

点击查看
快速回复 返回列表 客服中心 搜索