| 作者 | 主题 |
|---|---|
|
'Razor 至圣
经验值:24441 发帖数:3205 精华帖:41 |
楼主
主题:SCL实现数组全复制的三种方法
当一回孔乙己,如题。 //copy a array totally to another array //first way: use SFC20 #Error := BLKMOV(SRCBLK := #SourceArray, DSTBLK =>#DestinationArray_1); //second way: copy the elements one by one FOR #index := 0 TO 9 DO #DestinationArray_2[#index] := #SourceArray[#index]; END_FOR; #index := #index + 1; //third way: use the name of array #DestinationArray_3 := #SourceArray; //Error check FOR #index := 0 TO 9 DO IF (#DestinationArray_1[#index] <> #SourceArray[#index]) THEN #Error_1 := TRUE; ELSE IF (#DestinationArray_2[#index] <> #SourceArray[#index]) THEN #Error_2 := TRUE; ELSE IF (#DestinationArray_3[#index] <> #SourceArray[#index]) THEN #Error_3 := TRUE; ELSE ; END_IF; END_IF; END_IF; END_FOR; 若要倒序复制,则变更索引下标即可: //second way: copy the elements one by one FOR #index := 0 TO 9 DO #DestinationArray_2[9-#index] := #SourceArray[#index]; END_FOR; #index := #index + 1; 或者 //second way: copy the elements one by one FOR #index := 0 TO 9 DO #DestinationArray_2[#index] := #SourceArray[9-#index]; END_FOR; #index := #index + 1;
少即是多
|
|
Zane 版主 经验值:85161 发帖数:21047 精华帖:399 |
4楼
主题:回复:SCL实现数组全复制的三种方法孔乙己有啥典故?窃书不为偷? 对楼主程序的建议: 300/400的做法,建议按字节直接用SFC20拷贝,只要确保目标存储区大于源存储区即可 而在博图S7-1200/1500下,对等结构是可以直接MOVE的,而不同长度数组的拷贝则可以考虑楼主的做法,但保险起见需要核对目标数组的大小及数组单元的类型
Zane
注册自动化系统工程师
Always save before download
|
|
Setrarin 侠士 经验值:1749 发帖数:139 精华帖:4 |
5楼
主题:回复:SCL实现数组全复制的三种方法不错,唯一就是#index := #index + 1; 有些累赘了。
但行好事,莫问前程
|
|
Qin. 侠圣 经验值:3902 发帖数:234 精华帖:1 |
7楼
主题:回复:SCL实现数组全复制的三种方法不错,见识了几种移植方法,有心了解过。但这样发散的思维不应该是孔乙己呀,唐诗宋瓷?印象中鲁大师笔下的孔乙己是位思想腐朽、四体不勤的形象,完全跟唐兄这举一反三、追求科技的思想大相径庭啊~
Stay Hungry ,Stay Foolish .
|
|
'Razor 至圣 经验值:24441 发帖数:3205 精华帖:41 |
8楼
主题:回复:SCL实现数组全复制的三种方法孔乙己不是说“茴”字有三种写法嘛,所以借用了一下。 多谢 Z 版不计前嫌,提携后进。 无论是应用场景,还是应用中的注意事项,都被说到了。 关于不同长度数组的拷贝,核对目标数组的大小及数组单元的类型,考虑采用ARRAY+ANY,ANY指向ARRAY的起始地址,对ANY进行解析,取出重复因子及数据类型等参数,进行数组长度的计算,以及索引下标是否边界溢出,数据类型是否匹配等问题的核验,待算法经过验证后,再另开一帖说明 。 上面的代码缺点不少,最基本的,易读性不是太好,一些类似“0“和”9“这样的常数没有明确的标示出其代表的意义,改成"minIndex"、"maxIndex"、"totalElements",阅读效果要好得多。 博途平台SCL编程环境下,不支持绝对地址的编程,而是采用支持符号寻址的编程方式,更多的恐怕也是基于易读性方面的考虑。 数组的操作属于数据结构的基础知识,自己也只是写出来发在论坛以防自己忘记而已,没想到得到前辈推荐,还成了“精华贴”,实在是惭愧,多谢大伽推荐,更多谢版主封精。
少即是多
|
|
lurphy 侠士 经验值:1777 发帖数:7 精华帖:0 |
9楼
主题:回复:SCL实现数组全复制的三种方法不理解Error check 为什么要嵌套。 |