[西门子] SCL编程实例100例-039-将位字符串中的位转移到位数组中

[复制链接]
查看81 | 回复0 | 2024-12-11 08:08:20 | 显示全部楼层 |阅读模式
>

1 | 题目



编写程序将位字符串(Byte、Word、DWord、LWord)中的位的值转移到位数组中。例如#byte=2#0101_0101转移到位数组中得到#arrayBools[]={1, 0, 1, 0, 1, 0, 1, 0}。



2 | 设计分析



使用向右移位指令把位字符串中的每一位都移动到0位,然后利用片段访问的方式将0位的值循环传递到位数组中。



3 | 创建功能或功能块



创建功能块FC,命名为“BitStrToBitArray”。




4 | 定义接口变量



具体接口变量定义见下图:

定义了变量#bitStrIn,数据类型为Variant,用来接收不同数据类型的位字符串。定义了可变长(泛型或可变限值)布尔类型一维数组,数据类型为#Array
  • of Bool,用来存储位字符串中的每个位的值。



  • 5 | 程序代码



    编写程序代码。如下图:


    本例数据类型只支持位字符串,使用了指令“TypeOf()”获取输入的位字符串的具体数据类型,对于不满足要求的数据类型直接返回,注意程序中的处理方式。注意片段访问对变量的区域进行寻址方式。



    6 | 代码测试



    在循环OB中调用FC-“BitStrToBitArray”。如下图:

    定义了全局数据块GdbBitStrToBitArrayData作为实参传递给形参。

    转至在线并监控程序。如下图


    给定Word类型位字符串,值为16#0F0F,转移到位数组后得到#arrayBolls[]={1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0}。



    7 | 总结



    学习数据类型Variant的使用;

    学习指令TypeOf(),返回值为type_id;

    学习可变长一维数组的定义和使用;

    学习使用多分支选择CASE语句;

    学习使用FOR循环语句;

    学习通过片断访问对变量区域进行寻址;

    学习RETURN指令在程序中的作用;

    学习在OB中调用FC和实参的传递方式

    -

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?注册哦

    x
    您需要登录后才可以回帖 登录 | 注册哦

    本版积分规则