技术论坛

INT值提取单独寄存

作者 主题
侠士

经验值: 1189
发帖数: 59
精华帖: 0
主题:【探讨】INT值提取单独寄存
推荐帖


只看楼主 只看精华 楼主 2018-09-26 23:23:34

 

     有没有无聊的朋友想过把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

奇侠

经验值: 8881
发帖数: 542
精华帖: 4
回复:INT值提取单独寄存
精华帖精华帖星级3级 推荐帖


只看楼主 只看精华 1楼 2018-09-27 09:35:58

for i:=0 to 4 do

b[i]:=input/10^i mod 10;

end_for;

请指教



吾生也有涯,而知也无涯。
以下网友喜欢您的帖子:

  
至圣

经验值: 37446
发帖数: 5133
精华帖: 47
回复:INT值提取单独寄存
推荐帖


只看楼主 只看精华 2楼 2018-10-01 13:28:05

是不是考虑使用AT指令试一下?


工业起重机防摇摆 QQ:404136820 AntiSwayControl
以下网友喜欢您的帖子:

  
至圣

经验值: 13749
发帖数: 2032
精华帖: 16
回复:INT值提取单独寄存
推荐帖


只看楼主 只看精华 3楼 2018-10-05 23:29:08

把INT转成字符串,然后拆解字符串成每一个字符,再转成数字会不会更简单?


工控毁我青春!
以下网友喜欢您的帖子:

  
游士

经验值: 223
发帖数: 31
精华帖: 0
回复:INT值提取单独寄存


只看楼主 只看精华 4楼 2018-10-06 07:07:01
没有试验过,学习了。
学无止境
以下网友喜欢您的帖子:

  
侠圣

经验值: 2300
发帖数: 442
精华帖: 1
回复:INT值提取单独寄存


只看楼主 只看精华 5楼 2018-10-06 10:41:44

INT TO BCD

BCD AND 16#xxxx

分别得个十百千 


co771@qq.com,好难
以下网友喜欢您的帖子:

  
侠圣

经验值: 2841
发帖数: 276
精华帖: 3
回复:INT值提取单独寄存


只看楼主 只看精华 6楼 2018-10-11 19:07:53
以下是引用史德利古尔在2018-09-27 09:35:58的发言 >1楼

for i:=0 to 4 do

b[i]:=input/10^i mod 10;

end_for;

请指教


化繁为简,好DOTER!


你若安好便是晴天
以下网友喜欢您的帖子:

  
侠圣

经验值: 2551
发帖数: 299
精华帖: 3
回复:INT值提取单独寄存


只看楼主 只看精华 7楼 2018-10-12 09:53:16
以下是引用reder在2018-10-11 19:07:53的发言 >6楼

化繁为简,好DOTER!

以下是引用史德利古尔在2018-09-27 09:35:58的发言 >1楼:for i:=0 to 4 dob[i...

引用1楼详细内容:

for i:=0 to 4 do

b[i]:=input/10^i mod 10;

end_for;

请指教


各位同学,^应该改为**


 
以下网友喜欢您的帖子:

  
游士

经验值: 264
发帖数: 8
精华帖: 0
回复:INT值提取单独寄存


只看楼主 只看精华 9楼 2019-01-12 15:22:53

这样行不行。。。。



 
以下网友喜欢您的帖子:

  
至圣

经验值: 43587
发帖数: 15780
精华帖: 61
回复:INT值提取单独寄存


只看楼主 只看精华 10楼 2019-01-13 17:25:40

取消优化访问,直接按位读不就行了吗?比如你取消优化后数据保存到db1.dbb0中,那么你就直接取db1.dbx0.0~db1.dbx0.7就行了。


活到老,学到老!为了生活学习吧!
以下网友喜欢您的帖子:

  
  • 上一页
  • 1
  • 下一页
收起
INT值提取单独寄存
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。