北岛夜话
原创工业智能控制领域(PLC、单片机/嵌入式、机器人、通信、机器视觉)的技术及经验分享。
文章478 浏览5397548

西门子SCL编程实例——位与字节的相互转换

在实际项目中,有时候需要位与字节的相互转换。比如:将8个位值(布尔值)组成一个字节,或者16个位值组成一个字,或者将一个字节按照其位顺序分成8个布尔值。今天这篇文章,我们来介绍下如何编程实现位与字节的相互转换。我们使用变量的切片访问功能来编写两个函数:FC5002_BitsToByte和FC5005_ByteToBits,前者实现将8个布尔值组成一个字节,后者实现将一个字节按照其位顺序分成8个布尔值,接下来详细介绍下。

cover.png

1、FC5002_BitsToByte

该函数将8个布尔值组成一个字节变量,其变量声明如下图所示:

FC5002变量声明.png

其中:

  • bit0~bit7是8个输入变量,数据类型为布尔型;

  • byteQ是输出变量,数据类型为字节;

  • tmpByte为临时变量,数据类型为字节;

该函数的代码如下:

code1.png

上述代码中“#tmpByte.%Xb(b=0~7)”是变量的切片访问方式,比如:#tmpByte.%X0表示访问该变量的第0位。

2、FC5005_ByteToBits

该函数将一个字节按照其位顺序输出8个布尔值,其变量声明如下图所示:

FC5005变量声明.png

其中:

  • iByte是输入的字节变量;

  • Q0~Q7为该字节的位0~位7的值;

该函数的代码如下:

code2.png

这两个函数我都测试过,用同样的方式可以实现将16个布尔值组成一个字,或者将一个字分解成16个布尔值。类似的函数我之前还写过一篇文章《西门子SCL编程实例——按位读写字变量》,它实现读写字中的某一位。

我的书《西门子S7-1200/1500 PLC SCL语言编程》中也介绍了变量的切片访问及其它技巧和实例,感兴趣的话可以扫描下面的二维码查看详细介绍。

如果你已经购买此书,想加入读书群交流,请留言。

取消

感谢您的支持,欢迎常来看看!

扫码支持
一点动力,多少随意

打开支付宝扫一扫,即可进行扫码打赏哦

发表评论

  • 李工,你好。我已加入购买此书,如何加入读书群。

牛年到,祝福到!

祝愿大家在新的一年里,身体健康,工作顺利,财运滚滚,牛年大吉!

×