作者 | 主题 |
---|---|
WWCWWC 至圣 经验值: 71712 发帖数: 8024 精华帖: 145 |
楼主 2022-11-10 17:18:56
主题:100个浮点数数据Real求和的SCL编程 100个浮点数数据Real求和的SCL编程 曾经在STEP7软件STL编程环境下,指针偏移运算已经着迷了的我,目前也慢慢开始着迷于运算能力更强大的SCL编程环境下写一些简单的运算程序。 以下是求100个浮点数的和基本过程,希望能够给初学一些提示。实际上浮点数、整数、字节之间的计算,也仅仅只是数据类型的差异,也就是我们热门的几位数数据,如,字节是8位,字word是16位。 100个浮点数求和步骤: 1) 创建一个新项目,名称100个浮点数求和。选择合适的机型,如s7-1214C,创建求和的子程序FC1,图示: 事先按基本思路定义好FC的接口,也可以边写程序边创建,这个我感觉没有什么好与坏。创建一个浮点数数组,Array[0..99];创建一个存放FOR循环需要的存储器,名称取“i”,数据类型INT,完全可以存放数据0 ~ 99这个数据了。,当然此处定义数据类型Byte丝毫没有问题的。 2) 在SCL编辑区,编辑求和程序,图示: 程序语句非常简单,首先是给浮点数和存储器清0,目的是想从新开始计算。利用FOR循环指令做自编号0开始到99的循环,这个主要目的是为了创建浮点数数字能够带一个类似的指针偏移,Static创建的变量“i”存放循环次数的记录。假设FOR循环刚刚开始的第0次, 那么,#sum := #sum + #arrayReal[#i]的结果是:#sum := 0 + array[0],假设array[0] =1.0,则,第一次循环结束后#sum := 1.0。当进入第二次循环时,假设array[1] =2.0,那么,循环结束后#sum := 1.0 + 2.0 := 3.0、、、、、、这样重复累加100次,把浮点数数组array[0..99]的数据全部累加一遍,完成求和的过程。 3) 当IF #i = 100 THEN条件满足时,启动EXIT指令退出FOR循环,整个过程假设这么简单精炼,在OB1中调用FC1,将程序下载到cpu,看运算结果,图示: 下载cpu验证结果符号要求,此。 |
WWCWWC 至圣 经验值: 71712 发帖数: 8024 精华帖: 145 |
1楼 2022-11-10 17:27:49
主题:回复:100个浮点数数据Real求和的SCL编程 实际上,100个数据和1000个数据,在此没有什么大的变化,仅仅只是一些定义而已,有10000个数据更好,程序架构还是同样的那个,只是需要考虑数据存储的溢出问题了。 反过来,深化这个程序,如求平均值,也只是再增加一步除100的过程而已,scl运算功能确实够强大。 |
RENHQ 至圣 经验值: 68887 发帖数: 12218 精华帖: 59 |
2楼 2022-11-10 18:13:20
主题:回复:100个浮点数数据Real求和的SCL编程 可以~适合初学者学习 不过循环里面的那个if判断没必要的~
Q群:https://jq.qq.com/?k=9BDuEgf6
|
0615317263 至圣 经验值: 19210 发帖数: 4208 精华帖: 2 |
3楼 2022-11-10 19:03:38
主题:回复:100个浮点数数据Real求和的SCL编程 有了scl语句,编程工作量降低了不少。 |
WWCWWC 至圣 经验值: 71712 发帖数: 8024 精华帖: 145 |
4楼 2022-11-11 07:36:30
主题:回复:100个浮点数数据Real求和的SCL编程 我肤浅的认为,需要添加exit指令,用if作为判断条件。 如果不添加exit指令,这个循环是始终进行的。 |
WWCWWC 至圣 经验值: 71712 发帖数: 8024 精华帖: 145 |
5楼 2022-11-11 07:37:57
主题:回复:100个浮点数数据Real求和的SCL编程 是的,特别是对数据的处理。 几句话可以搞定。 |
WWCWWC 至圣 经验值: 71712 发帖数: 8024 精华帖: 145 |
6楼 2022-11-11 09:27:31
主题:回复:100个浮点数数据Real求和的SCL编程 实际上,上面的求和程序语法没有问题,而实际应用且存在一个数据溢出的问题。 一个real能够存放100个real的和?显然是不够的。需要Lreal(s7-1200、s7-1500)已经支持这个数据类型了。 当然,我不需要100个real的和,这样考虑是可以的,总之,数据累加应该考虑数据的溢出问题。 |
WWCWWC 至圣 经验值: 71712 发帖数: 8024 精华帖: 145 |
7楼 2022-11-11 09:53:37
主题:回复:100个浮点数数据Real求和的SCL编程 知道原因了,哈哈。 我之前测试scl程序一直是在仿真环境下进行的,今天特意下载了求和的程序,用if+exit和删除if+exit的结果在程序的扫描周期中没有明显的反应,如果在仿真环境中,是有非常明显的区别。 但是,写与不写这步,是否有作用,我认为还是写为好,至少,我是想到循环不允许始终进行,会影响到整体程序的周期时间。 |
Ready_OK 至圣 经验值: 15530 发帖数: 1735 精华帖: 0 |
8楼 2022-11-11 10:53:49
主题:回复:100个浮点数数据Real求和的SCL编程
海纳百川,厚德务实!
|
莘莘学子 至圣 经验值: 18702 发帖数: 3807 精华帖: 1 |
9楼 2022-11-11 11:26:08
主题:回复:100个浮点数数据Real求和的SCL编程
弘扬中华传统美德,无私奉献为根本,助人为乐为根源。
|
WWCWWC 至圣 经验值: 71712 发帖数: 8024 精华帖: 145 |
10楼 2022-11-11 11:33:43
主题:回复:100个浮点数数据Real求和的SCL编程 个人观点,逻辑控制我还是习惯于LAD方式,毕竟应用时间长,而且,还是那种图示化的逻辑直观,容易理解,上手也快。 数据处理,scl确实有独到的优势。 |
黑猫警长W 至圣 经验值: 18377 发帖数: 2409 精华帖: 1 |
11楼 2022-11-11 11:34:53
主题:回复:100个浮点数数据Real求和的SCL编程 |
莘莘学子 至圣 经验值: 18702 发帖数: 3807 精华帖: 1 |
12楼 2022-11-11 11:38:28
主题:回复:100个浮点数数据Real求和的SCL编程 你这样很容易引起恐慌,我见到最多的就是一台设备一半用SCL,一半用LAD来写,我一看到这样的程序,我就想慰问他家人的。还没见到一台设备全部用SCL写的,多少带LAD模式,或许还没遇到真正的SCL高手。
弘扬中华传统美德,无私奉献为根本,助人为乐为根源。
|
WWCWWC 至圣 经验值: 71712 发帖数: 8024 精华帖: 145 |
13楼 2022-11-11 11:41:45
主题:回复:100个浮点数数据Real求和的SCL编程 |
莘莘学子 至圣 经验值: 18702 发帖数: 3807 精华帖: 1 |
14楼 2022-11-11 11:46:07
主题:回复:100个浮点数数据Real求和的SCL编程
弘扬中华传统美德,无私奉献为根本,助人为乐为根源。
|
WWCWWC 至圣 经验值: 71712 发帖数: 8024 精华帖: 145 |
15楼 2022-11-11 11:47:33
主题:回复:100个浮点数数据Real求和的SCL编程 我再把if加上,for循环才可以正常,图示: 实际上,这样的应用场景,不需要调用exit指令的,也说明我在此功夫还没有深刻。 写这个是我之前一直是在仿真环境下,测试验证scl指令的。 上述测试是实体机上进行,与仿真确实是有一些区别。 |
莘莘学子 至圣 经验值: 18702 发帖数: 3807 精华帖: 1 |
16楼 2022-11-11 11:51:21
主题:回复:100个浮点数数据Real求和的SCL编程 有现成的硬件不用,还仿真啥呢?
弘扬中华传统美德,无私奉献为根本,助人为乐为根源。
|
WWCWWC 至圣 经验值: 71712 发帖数: 8024 精华帖: 145 |
17楼 2022-11-11 11:54:13
主题:回复:100个浮点数数据Real求和的SCL编程 这个exit指令我在7楼已经做了解释。我测试的程序没有其它内容,就是一些测试程序,相对比较简单,加与不加,没有多大的区别。 |
xiatianyun 侠圣 经验值: 4856 发帖数: 735 精华帖: 10 |
19楼 2022-11-11 12:43:05
主题:回复:100个浮点数数据Real求和的SCL编程 没搞懂,我是不是被什么事情耽误了。 循环里面的i有机会得到100吗? |
WWCWWC 至圣 经验值: 71712 发帖数: 8024 精华帖: 145 |
20楼 2022-11-11 13:12:17
主题:回复:100个浮点数数据Real求和的SCL编程 我最初的本意是当全部循环100次结束后,调用exit,退出循环。 而实际上,循环指令本身就具备了这个功能。我在7楼已经有解释了,属于多此一举的程序段。 事不辩不明,通过与各位大侠的讨论,这些点点滴滴,都将提升大家对指令的认识,包含我开始说的求和数据溢出问题。 |
WWCWWC 至圣 经验值: 71712 发帖数: 8024 精华帖: 145 |
21楼 2022-11-12 10:19:20
主题:回复:100个浮点数数据Real求和的SCL编程 100个real到底需要多少大的存储区? 以real最大值+3.402823e+38 计算,结果:+3.402823e+40. 而一个Lreal的最大数据长度是:+1.7976931348623158e+308,显然完全可以存放。 修改后的程序: |
手机用户20180604694547 侠圣 经验值: 3788 发帖数: 729 精华帖: 3 |
24楼 2022-11-12 12:25:19
主题:回复:100个浮点数数据Real求和的SCL编程
注意一下,1200是不支持LREAL类型的,只有1500支持。
不过处理超过最大范围的方案也有很多,只要处理的好不会出什么问题的。 |
WWCWWC 至圣 经验值: 71712 发帖数: 8024 精华帖: 145 |
25楼 2022-11-12 14:05:45
主题:回复:100个浮点数数据Real求和的SCL编程 |
WWCWWC 至圣 经验值: 71712 发帖数: 8024 精华帖: 145 |
27楼 2022-11-12 14:28:38
主题:回复:100个浮点数数据Real求和的SCL编程 我把我遇到的过程描述一下,程序编写没有问题,但是,下载后出现这个,图示: 很显然,我调用的数据超了范围,需要OB调用,找来找去,无法找到我想要的OB121/OB122这样的,汗、今天气温有一点高,我们这里居然到30摄氏度以上,中午和同事喝了一点酒,感觉想开空调了。 老手遇到新问题了,因为这个问题曾经在step7环境中出现,自己在portal环境一直注意着的,先定义,后调用的原则。 再仔细一看,哈哈哈,这个调用,不报警才怪呢,图示: 问题找到,修改后,再下载正常,图示: |
Zane 至圣 经验值: 76200 发帖数: 19331 精华帖: 377 |
28楼 2022-11-13 18:41:37
主题:回复:100个浮点数数据Real求和的SCL编程 数组长度就是100个,但数组定义是0~99,但如果数组定义是1~100呢?为什么同一件事会有两个结果呢? 编程的细节与变量的命名还是要注意的。 如果就是整个数组求和,可以在块内通过指令得出数组的下限值与上限值,FOR循环即可,可以不输入数组长度
Zane
注册自动化系统工程师
Always save before download
|
手机用户20180604694547 侠圣 经验值: 3788 发帖数: 729 精华帖: 3 |
30楼 2022-11-14 09:34:57
主题:回复:100个浮点数数据Real求和的SCL编程 |