| 作者 | 主题 |
|---|---|
|
校长123校长 侠士 经验值:1238 发帖数:57 精华帖:0 |
楼主
主题:INT值提取单独寄存
有没有无聊的朋友想过把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]对应个、十、百、千、万,于是就有了下面这个程序段,首先进行初始化,将刚刚寄存的数组以倒序的形式赋给输出数组,然后对这个数组进行相应的循环右移
最后是模拟的结果
第一次发这种贴,不足之处还请见谅,论坛各位朋友探讨看看有没更好方法解决这个无聊的问题,哈哈 |
|
史德利古尔 至圣 经验值:10749 发帖数:631 精华帖:4 |
1楼
主题:回复:INT值提取单独寄存for i:=0 to 4 do b[i]:=input/10^i mod 10; end_for; 请指教
吾生也有涯,而知也无涯。
|