最近做项目,使用IO-Link器件读取从站数据时,使用从双字中提取字、字节和位的知识,作为私人,以前没有仔细注意过这个细节,所以查了一下资料
以下主要从资料查询、准备步骤、步骤验证进行记录。
一、资料查询:
在网上搜索西门子数据类型的相关资料,相信有一大堆。 最常见的是如下图所示,说明两个字符和字节的关系。
根据这个资料,进行实验验证;
二、程序的准备
资料大部分用m块介绍双字和字节等的关系,但实际上由于DB块的数据很多,在这次的实验中为了比较m块和DB块的内容容易观察,准备如下。
1、新建数据库块,创建必要的变量:
2、为了便于比较,创建m区变量。 这里取MD24,将其分解为字、字节、位,以便于观察。
3、FC程序的编制:主要将双字分解为字、双字,将双字发送到单词、单词中。 为了容易设定双字的位,特意用数组向双字的位各发送1位。
三、程序验证:
省略程序下载和模拟等操作步骤。 因为那个不是重点,所以直接出示测试结果。 如果从数组中分别设定不同的位,就相当于分别设定双字中的位,可以分别观察结果。 现在,如果取代表性的2个比特,即第0个和第16个比特1,则结果如下2个图所示。
如果通过测试,就会明白以下法则。
西门子两个字的中位排列是从右向左排列的。 这和平时写字的顺序正好相反,但我想也可以从进制的位数开始记忆。 例如,我们是十进制数,从右向左分别是个、十、百、千、万等位。 这个正好像那个。
可以看到2、2个文字传递给单词的情况,在剪切数据时很有用。 因为不做具体总结,所以可以体验。
第三、三个也是我最开始很混乱的地方。 如果观察2个字符的4个字节,就会发现与位的排列顺序相同。 也就是说,0位在右边,依次向左变大。 但是,m区其实是按这个方向排列的,但是很混乱。 以上图为例,设置0位时,DB中第0字节有变化,但m区对应MB27变化。 如最初的资料所示,对应第1字节的变化。但是,MB27是第0字节,MB26是第1字节,按顺序类推,大小和字节的顺序再次相反。 仔细想想就知道发生了什么,但依然有点不舒服。
遇到同样情况的人,应该不只我一个。 分享一下,希望对有需要的人有帮助。 第一次发送共享粘贴。 文章有点不好。 请谅解。 有不足和错误。 欢迎斧正。