合信论坛

快捷导航
查看: 2834|回复: 0

多个连续数据分组有条件抓取数据压缩成新数组(C函数)

[复制链接]

30

主题

33

帖子

1210

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1210
QQ
发表于 2022-9-27 10:01:22 | 显示全部楼层 |阅读模式
将连续多个存储区内数据按设置的单个集合数据量分组成“总数/单个数量”个小组,然后通过过滤选项识别需要的数据,将其求和、取平均值后输出到新数组位置。
————————————————————
例如设置5个1组,取第2、3个数据
图示.png      
————————————————————
实际实现功能指令接口:
指令接口.png
程序内容:
C语言内容.png
使用PLC运算计算结果:12个数据,6个1组,取第6、第3、第2个数据生成新数组
计算结果.png

程序本体放在最后

/***********************符号注释***********************
*
*        Ex:接通之后循环进行计算输出 —— 一直接通则实时输出,每个扫描周期输出一次;接通一个沿则输出一次。
*
*        data_pick:按位判断参与计算的数据,使用该存储区的前’group_len‘个位,bit0判断单个集合内的第一个,bit1判断集合内第二个,...bit’group_len‘判断集合内最后一个;  判断的位为1则将该位置数据加入求和平均,求和次数自动计算。
*
*        group_len:将‘data_len’长度的数据划分为‘group_len’长度为一组的多个数据,一个‘group_len’长度为一个集合
*                                                                                                                                                                                                                                                                                       
*        data_len:数据区总长度,数据量;例:720表示从‘data_in’开始共720个数据
*
*        data_in:待处理数据区首地址,指向首个数据
*
*        data_out:输出数据区首地址,指向可用于输出处理后数据的地址首地址,占用(‘data_len’ / ‘group_len’)*4个字节。
*/
/***********************注意事项***********************
*
*        data_len除以group_len需要能整除,否则不执行运算,在输出首地址输出135.246
*
*        group_len与data_len不能为0,否则不执行运算,在输出首地址输出135.246
*
*        如果运算后求和次数为0,则该输出区输出135.246(简便判断方式:所有输出均为135.246)
*/




/*************************图例*************************
*
*        data_pick == 3(bit0与bit1为1,其他为0;共获取2个数据加起来在除以2得出平均数)
*        group_len == 3
*        data_len == 12
*
*        运算结果:
*                                ‘data_out ’= (‘data_in’+‘data_in+4’ )/2 ;                                ‘data_in+8’对应’data_pick‘的bit2 == 0,忽略运算
*                                ‘data_out+4 ’=( ‘data_in12’+‘data_in+16’ )/2 ;                        ‘data_in+20’对应’data_pick‘的bit2 == 0,忽略运算
*                                ‘data_out+8 ’=( ‘data_in24’+‘data_in+28’) /2;                 ‘data_in+32’对应’data_pick‘的bit2 == 0,忽略运算
*                                ‘data_out+12 ’=( ‘data_in36’+‘data_in+40’) /2;                 ‘data_in+44’对应’data_pick‘的bit2 == 0,忽略运算
*/
/***********************取数速记***********************

*        data_pick按位输入使用十进制(DEC)输入或十六进制(hex)输入算法:
*        确认需要的是第几个数,然后将各个需要的数位置的十进制数/十六进制数加起来赋值到该变量中
*
*                合集第 x                 DEC                                hex
*                        1                1                                16#1
*                        2                2                                16#2
*                        3                4                                16#4
*                        4                8                                16#8
*                        5                16                                16#10
*                        6                32                                16#20
*                        7                64                                16#40
*                        8                128                                16#80
*                        9                256                                16#100
*                        10                512                                16#200
*                        11                1024                        16#400
*                        12                2048                        16#800
*                        13                4096                        16#1000
*                        14                8192                        16#2000
*                        15                16384                        16#4000
*                        16                32768                        16#8000
*                        17                65536                        16#10000
*                        18                131072                        16#20000
*                        19                262144                        16#40000
*                        20                524288                        16#80000
*                        21                1048576                        16#100000
*                        22                2097152                        16#200000
*                        23                4194304                        16#400000
*                        24                8388608                        16#800000
*                        25                16777216                16#1000000
*                        26                33554432                16#2000000
*                        27                67108864                16#4000000
*                        28                134217728                16#8000000
*                        29                268435456                16#10000000
*                        30                536870912                16#20000000
*                        31                1073741824                16#40000000
*                        32                2147483648                16#80000000
*/


程序&库文件.rar

30.18 KB, 下载次数: 212

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

客服热线
400-700-4858 周一至周五:09:00 - 18:00
深圳市南山区打石一路深圳国际创新谷6栋A座9层

深圳市合信自动化技术有限公司(简称“合信技术”)成立于2003年,高新技术企业,专注于工业自动化产品的研发、生产、销售和技术服务,依靠高质量、高性能的自动化控制产品与方案为客户创造最大价值,立志于成为全球领先的工业自动化解决方案供应商。

Archiver|手机版|小黑屋|COTRUST Inc. ( 粤ICP备13051915号 )

GMT+8, 2024-9-8 12:43 , Processed in 0.091515 second(s), 24 queries .

快速回复 返回顶部 返回列表