签到有奖
消息提醒
运维工程师专区
官方商城
扫码分享好友 任选多种周边
有没有无聊的朋友想过把INT类型数值每一位分解开来寄存或者显示,之前看到过三菱的程序这么做过(为了在一组(四个)二进制控制模式的数显表上分别显示步进距离),于是我心血来潮基于300的PLC也编写了一个这样的程序,最近在整理的时候发现了这个FB块,于是将源代码导入到1500上试了下,发现一些指令上有很大差异,导致没法到达最终效果,于是索性又重新写个块
变量定义
下面这段程序主要是判断下INT值的位数,目的有两个:
1、相应输出个十百千万分别对应1、2、3、4、5(后面数据处理有大用处);
2、INT值经过处理后最终转换为16进制双字,需要进行过滤;
下面就是将INT值做一些转换处理,首先转换成字符串,转换完后的字符串是带符号的,于是用RIGHT指令去除了这个符号(不知道有没别的方法去除?),最后又将该字符串转换成双字,这样这个16进制值与原先的INT值是一样的。
接下去就是提取这些数了,这些数以2进制的形式(2^0、2^1、2^2、2^3)进行判定后分别寄存.到这一步就实现了数值提取。
最后做什么,当然是输出这组数,这里我想要的输出要求就是这个数值始终是保持[0],[1],[2],[3],[4]对应个、十、百、千、万,于是就有了下面这个程序段,首先进行初始化,将刚刚寄存的数组以倒序的形式赋给输出数组,然后对这个数组进行相应的循环右移
最后是模拟的结果
第一次发这种贴,不足之处还请见谅,论坛各位朋友探讨看看有没更好方法解决这个无聊的问题,哈哈
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
帖子链接:https://www.ad.siemens.com.cn/club/bbs/post.aspx?b_id=66&a_id=1508999
for i:=0 to 4 do
b[i]:=input/10^i mod 10;
end_for;
请指教
是不是考虑使用AT指令试一下?
把INT转成字符串,然后拆解字符串成每一个字符,再转成数字会不会更简单?
INT TO BCD
BCD AND 16#xxxx
分别得个十百千
化繁为简,好DOTER!
引用1楼详细内容:
各位同学,^应该改为**
这样行不行。。。。
取消优化访问,直接按位读不就行了吗?比如你取消优化后数据保存到db1.dbb0中,那么你就直接取db1.dbx0.0~db1.dbx0.7就行了。
分享
扫码分享好友 任选多种好礼
收藏
有帮助
欢迎您访问支持中心!
丰富的视频,全方位的文档,大量的网友交流精华……
为了更好的完善这些内容,我们诚邀您在浏览结束后,花20秒左右的时间,完成一个用户在线调查!
感谢您的支持!
密码至少8位,包含大、小写字母,数字和符号至少三种。
允许邮箱和手机接收来自支持中心网站的信息
我已同意《支持中心网站注册协议和隐私政策》
微信登录扫码一键登录
验证码登录
密码登录
二维码失效点击重试
打开微信扫一扫,快速登录/注册
未注册手机验证后自动登录,注册即代表同意《支持中心网站注册协议和隐私政策》
三日内免验证登录
短信登录
登录