【1500实用FC系列】之二,SizeOf 计算数据大小

一,前言        

        很多控制器都有SizeOf这个功能。作用就是统计数据占用的字节数量。但是1X00控制器的标准库和指令中没有这个功能。可是我的一些项目中,尤其与通讯有关的项目需要这个功能,为此我开发了这个FC。

二,外特性    

        我们先看看这个FC的外特性。

图 1

    

    图1 是在main中4次调用了SizeOf函数。这个块的功能是统计出一个数据结构所占用的字节数量。

    我们要注意2个问题。

    1,我们注意到data占用8个字节,但是在data这个结构体中的所有数据占用字节总和是6个。这是我们需要注意的问题。

    2,对于bool类型的数组。不同CPU占用的字节数不同。比如X86系列CPU以及1500优化块,每个bool类型占用一个字节。对于非优化块,每个bool类型占用一个bit。Sizeof采用非优化块标准。

   

三,代码    

        先给出代码

FUNCTION "SizeOf" : UDInt

{ S7_Optimized_Access := 'TRUE' }

VERSION : 0.1

   VAR_INPUT

      Data : Variant;

   END_VAR

   VAR_IN_OUT

      BUFFER : Array[*] of Byte;

   END_VAR

   VAR_TEMP

      Pos : DInt;

      ret : Int;

   END_VAR

BEGIN

       #Pos := 0;

       #ret := Serialize(SRC_VARIABLE := #Data, DEST_ARRAY => #BUFFER, POS := #Pos);

       IF #ret = 0 THEN

           #SizeOf := #Pos;

       ELSE

           #SizeOf := 0;

       END_IF;       

END_FUNCTION

除了上述代码外,还需要一个数据块的辅助

图2

四,CODESYS的情形

图3

        在CODESYS中有SizeOf这个功能。图3是Control Win X64 PLC上得到的结果。在此我们重点关注占用空间。得到如下结论:

1,bool类型占用byte

2,数据之间有间隙,这一条结论从图3中得不到。有机会时但开一篇探讨。

五,结束语

        各位同业如果觉得有帮助,请点赞+关注。后续会分享更多内容。如果有疑问,可以留言,我们共同探讨。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值