签到有奖
消息提醒
运维工程师专区
官方商城
扫码分享好友 任选多种周边
状态图表读的数正确 程序读的数确不正确 怎么回事?
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
帖子链接:https://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=1696491&b_id=64&s_id=0&num=8
状态图表的数据是十六进制的,程序段监控里面显示的是十进制!
你把十进制转换成16进制就得了,没有问题的。
这还是个BCD码呢。转十进制需要BCD_I的。
楼上说的对,应该将字节转成字(B_I),然后再用BCD_I指令转成整数
读出来的是bcd码。bcd码用16进制显示的效果是人理解的效果。但是程序监控是10进制的显示效果。不是人需要的视觉效果。程序的执行是按照10进制执行。所以程序会错,人看也错。
说的绕,看得更绕。这里面绕了两个弯了。要仔细理解一下。
方法不难,就一条bcd_i指令,但是是为什么,就要好好理一理。
这个确实太绕弯了。其实,程序监控的值与状态图表的值都是正确的!之所以说有错误,是因为忽略了数据实际显示时的进制以及表示形式,而是全部按日常生活中的十进制数来读了!
1)读取的时钟数据采用的是:8421BCD码形式;用四位二进制数,表示一位十进制数;
2)程序监控开到的是将此BCD码当做十进制数,直接显示;并且也按十进制数来读,因此读到的数有错误的(其中≤09的数是正确的);
3)状态图表则是以十六进制数显示的,而我们又将其以十进制数来读。即为BCD码(二进码十进数)表示的实际十进制数值,所以是正确的。
日常生活中的数指的都是十进制数。大家都明白,一位数的十进制数的范围是0~9;这不是废话吗!
PLC常用的数有:
1、二进制。一位数的二进制数的范围是0、1;
2、十进制。
3、十六进制。一位数的十六进制数的范围是0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F;分别对应的二进制保存形式:0000、0001、0010、0011、0100、0101、0110、0111、1000、1001、1010、1011、1100、1101、1110、1111;分别对应的十进制数是:0、1、2、3、4、5、6、7、8、9、10、11、12、13、14、15;
4、日常所说的BCD码大都是指8421BCD码形式,PLC用的就是此种。一位BCD码表示的十进制数的范围是:0、1、2、3、4、5、6、7、8、9。分别对应的二进制保存形式为:0000、0001、0010、0011、0100、0101、0110、0111、1000、1001;
PLC中的数字保存形式则只有一种:二进制保存形式。无论是二进制、十进制、十六进制,或无符号整数、有符号整数、无符号双整数、有符号双整数、实数、BCD码等等,均采用二进制形式保存;
同一个二进制保存形式的数,以不同进制或以实数显示时,字面值的大小一般是不一样的。
一贴图的VB300为例:
1、二进制是0010 0001,同时也是该数据的保存形式;
2、十进制是33;
3、十六进制是21;此处的21是16#21,值的大小等于十进制的33;
4、BCD码是21。此处的21表示的不是十六进制的21(16#21),而是十进制的21。用四个位元来储存一个十进制的数码方式。即:用八个位元来储存两位十进制的数码。
进制不一样吧
分享
扫码分享好友 任选多种好礼
收藏
有帮助
欢迎您访问支持中心!
丰富的视频,全方位的文档,大量的网友交流精华……
为了更好的完善这些内容,我们诚邀您在浏览结束后,花20秒左右的时间,完成一个用户在线调查!
感谢您的支持!
密码至少8位,包含大、小写字母,数字和符号至少三种。
允许邮箱和手机接收来自支持中心网站的信息
我已同意《支持中心网站注册协议和隐私政策》
微信登录扫码一键登录
验证码登录
密码登录
二维码失效点击重试
打开微信扫一扫,快速登录/注册
未注册手机验证后自动登录,注册即代表同意《支持中心网站注册协议和隐私政策》
三日内免验证登录
短信登录
登录