作者 | 主题 |
---|---|
奔跑の蜗牛 侠圣 经验值: 2532 发帖数: 297 精华帖: 1 |
楼主 2020-03-29 22:12:07
主题:双字、字、字节和位的关系总结 更新一下,受shine和YiMoon两高手的提醒,再补充一下,俺一直用的都是优化块,再去测试一下非优化的,再次感谢两位; ---------------------------------------------------------------------------------------------------------------------------- 最近做项目,用到了IO-Link设备,在读取从站数据时候,用到从双字中提取字、字节和位的知识,作为一个菜鸟,由于以前也没有仔细关注过这个细节,所以又查了下资料,并做了程序进行测试,现记录一下,以备自己将来使用,也方便有类似问题的人使用; 下面主要从资料查询、准备程序、程序验证进行记录: 一、资料查询: 相信从网上搜一下西门子数据类型方面的资料,会有一大堆,最常见的就是解释双字和字节之间的组成关系,如下图: 就以这个资料为基础,进行试验验证; 二、 程序准备 由于资料上大部分都是以M区介绍双字和字节等关系,但是实际情况是DB块中的数据居多,故在此实验中,将M区和DB区的内容进行对比,以方便观察,进行如下准备: 1、 新建DB块,里面创建需要的变量: 2、 创建M区变量,以方便做比较,这里取MD24,然后将其拆成字、字节、位,以方便观察: 3、 创建FC程序:主要是将双字拆成字、双字,并将双字传送给单字、单字传送给双字,为了方便置位双字中的位,特意用数组逐位传送给双字中的位: 三、程序验证: 省略掉程序的下载啊、仿真啊的操作步骤,因为那个不是重点,直接展示测试结果:从数组中,分别置位不同的位,则相当于分别对双字中的位进行置位,可以分别观察结果,现在取比较有代表性的两个位,即将第0位和第16位置1,结果如下两图所示: 通过测试可以发现如下规律: 1、西门子双字中位的排列,是从右向左排的,这点和平时写字顺序正好相反,但是我觉得可以从进制的位数去记忆一下,比如我们十进制,从右往左分别是个、十、百、千、万等位,这个正好类似于那个; 2、 可以看下双字传给单字的情况,对于截取数据时候比较有帮助,具体不总结,可以体会一下; 3、第三条也是我一开始比较迷糊的地方,观察双字的四个字节,和位的排序是一样的,即0位在右,依次往左增大,但是M区其实按照这个方向排列,但是让人很迷糊,上图为例,我们置位0位的时候,在DB中是第0个字节有变化,但是在M区中对应的是MB27变化,虽然按照一开始资料所示,MB27是在最右边,但是MB27是第0字节,MB26是第1字节,依次类推,大小和字节顺序又反了一次,虽然仔细想一下就明白怎么回事,但是依然有点小别扭; 遇到类似情况的,应该不止我一个,分享一下,希望能帮到需要的人,第一次发分享贴,文笔有点差劲,大家见谅,有不足和错误的地方,欢迎斧正;
千万不要和杠精抬杠,因为他会把你拉低到他的水平,然后再恶心你
|
shine 至圣 经验值: 19840 发帖数: 8834 精华帖: 39 |
1楼 2020-03-29 22:39:44
主题:回复:双字、字、字节和位的关系总结 你可以再百度一下big endian 和little endian。 1200、1500之前的CPU,都是big endian的,1200 1500的M区也还是big endian,优化的DB是little endian。 |
YiMoon 至圣 经验值: 11229 发帖数: 1230 精华帖: 35 |
2楼 2020-03-29 22:45:29
主题:回复:双字、字、字节和位的关系总结
输入输出地址,m地址和非优化访问db是大端传输,地址排列方式是从低字节开始的,
通过udt序列化和反序列化后的地址也是大端传输。 优化访问db是小端传输。
Keep calm and carry on!!!
|
奔跑の蜗牛 侠圣 经验值: 2532 发帖数: 297 精华帖: 1 |
3楼 2020-03-30 05:49:16
主题:回复:双字、字、字节和位的关系总结 俺再请教一下,日系的诸如三菱欧姆龙这些PLC,类似于上面的数据处理是和西门子一样还是相反的,没用过日系,有点好奇,请指教
千万不要和杠精抬杠,因为他会把你拉低到他的水平,然后再恶心你
|
奔跑の蜗牛 侠圣 经验值: 2532 发帖数: 297 精华帖: 1 |
4楼 2020-03-30 05:55:55
主题:回复:双字、字、字节和位的关系总结 您好,俺又把块改成了非优化的,仿真了一下,结果还是和上面的一样,我这个是用的1200做的,是不是300/400和这个不一样?
千万不要和杠精抬杠,因为他会把你拉低到他的水平,然后再恶心你
|
YiMoon 至圣 经验值: 11229 发帖数: 1230 精华帖: 35 |
5楼 2020-03-30 09:34:04
主题:回复:双字、字、字节和位的关系总结 日系的用的较少,没有研究过数据是大端还是小端。
Keep calm and carry on!!!
|
YiMoon 至圣 经验值: 11229 发帖数: 1230 精华帖: 35 |
6楼 2020-03-30 10:13:18
主题:回复:双字、字、字节和位的关系总结
Keep calm and carry on!!!
|
天芯 至圣 经验值: 20030 发帖数: 2182 精华帖: 0 |
7楼 2020-03-31 10:17:34
主题:回复:双字、字、字节和位的关系总结 楼主看得出很用心,学习学习! |
黑猫警长W 至圣 经验值: 19043 发帖数: 2486 精华帖: 1 |
8楼 2020-03-31 11:09:20
主题:回复:双字、字、字节和位的关系总结 看讨论也精彩! |
笨笨笨笨 奇侠 经验值: 7247 发帖数: 1024 精华帖: 2 |
9楼 2020-04-01 09:46:13
主题:回复:双字、字、字节和位的关系总结 研究的够仔细啊,我刚开始的时候也是迷惑这个问题,不过没有楼主这么深究过!后面用着用着反而也习惯了!
心有多远路就有多远
|
astrkk 游侠 经验值: 371 发帖数: 20 精华帖: 0 |
16楼 2020-04-15 22:01:25
主题:回复:双字、字、字节和位的关系总结 1,西门子的PLC数据访问是大端模式,即低字节存放高位 定义变量 tag0 地址 MW10 ,由两个字节组成MB10,MB11 当赋值tag0为1,则MB10的值为0,MB11的值为1 2,楼主举例的程序中使用了片段访问 片段访问基于符号寻址,其字节方向(bytewise)定义为B0~B3 数值依次递增 如tag0.%B0, 代表tag变量的低值字节, 具体对应的是MB11 tag0.%B1, 代表tag变量的高值字节, 具体对应的是MB10 |