关于在TD上设定系统时间,整数转BCD码的问题 点击:1312 | 回复:11



chinacupor

    
  • 精华:2帖
  • 求助:13帖
  • 帖子:25帖 | 845回
  • 年度积分:0
  • 历史总积分:2751
  • 注册:2013年2月16日
发表于:2013-03-03 00:29:42
楼主

读取系统时间这个现在搞明白了,就是读系统时间,然后转成整数,然后对位插入变量就好了。

 

但是要反过来的话,就有点小麻烦了。

 

屏显设定时间的数据应该都是60以内的整数值,这些整数可以转成BCD码,但转成BCD之后,输出都是以字(W)为单位的,要写入系统时钟的话,要转成字节(B)才行啊,要是纯整数的话还好说,直接把小的那个B舍掉应该就OK了,可现在是BCD,也可以直接舍去前面的那个B只取后面的那个B么?就怕舍出毛病来了。。。




chinacupor

  • 精华:2帖
  • 求助:13帖
  • 帖子:25帖 | 845回
  • 年度积分:0
  • 历史总积分:2751
  • 注册:2013年2月16日
发表于:2013-03-03 13:37:41
1楼

木有人理我。。。

 

我再人工置顶一下。。。

chinacupor

  • 精华:2帖
  • 求助:13帖
  • 帖子:25帖 | 845回
  • 年度积分:0
  • 历史总积分:2751
  • 注册:2013年2月16日
发表于:2013-03-04 00:07:38
2楼

今天折腾了一天,各种方法均失败。。。

 

明天试试字符串的方法看看行不。。。。

miy_gongkong

  • 精华:0帖
  • 求助:2帖
  • 帖子:23帖 | 3065回
  • 年度积分:0
  • 历史总积分:12421
  • 注册:2008年9月18日
发表于:2013-03-04 10:14:18
3楼

引用 chinacupor 的回复内容:今天折腾了一天,各种方法均失败。。。 明天试试字符串的方法看看行不。。。。



你可以看一下写系统时钟指令,数据格式,然后一个字节一个字节的 把你要写入的时钟数据 用Move指令传到一个Buffer中(字节流), 然后调用这个 系统时钟指令,填写刚才准备好的Buffer,即可;

至于bcd 码转换,其实很简单, 先把整数(小于9 的位个数)转换成BCD码,例如输出是一个字 0000000000001001,那么你用逻辑与指令,取出低4位(也就是BCD码低1位),这样一一按位截取即可;

chinacupor

  • 精华:2帖
  • 求助:13帖
  • 帖子:25帖 | 845回
  • 年度积分:0
  • 历史总积分:2751
  • 注册:2013年2月16日
发表于:2013-03-04 20:03:57
4楼
引用 miy_gongkong 的回复内容: 引用 chinacupor 的回复内容:今天折腾了一天,各种方法均失败。。。 明天试试字符串的方法看看行不。。。。你可以看一下写系统时钟指令,数据格式,然后一个字节一个字节的 把你要写入的时钟数据 用Move指令传到一个Buffer中(字节流), 然后调用这个 系统时钟指令,填写刚才准备好的Buffer,即可;至于bcd 码转换,其实很简单, 先把整数(小于9 的位个数)转换成BCD码,例如输出是一个字 0000000000001001,那么你用逻辑与指令,取出低4位(也就是BCD码低1位),这样一一按位截取即可;

本来都快要放弃了的,谢谢你哥们,回头我试试看。

 

不过你能再详细讲讲么?比如将TD中的20130304日和225959秒写入时钟当中。首先这里需要把他俩弄成两个字符串么?其中2013年03月04日的起始地址是VB100,那么VB103=13,VB106=03……然后再怎么办?


miy_gongkong

  • 精华:0帖
  • 求助:2帖
  • 帖子:23帖 | 3065回
  • 年度积分:0
  • 历史总积分:12421
  • 注册:2008年9月18日
发表于:2013-03-05 13:41:23
5楼

Read_RTC(读时钟)和Set_RTC(设置时钟)指令靠数据缓冲区在用户程序与硬件芯片间交换数据,它们的缓冲区格式相同。

表1. 时钟缓冲区

地址偏移TT+1T+2T+3T+4T+5T+6T+7
数据内容小时分钟0星期
数值范围
BCD
(16进制)
00-9901-1201-3100-2300-5900-5900-7*

 


* 1 = 星期日,7 = 星期六,0 = 表示禁止计星期

T 就是缓冲区的起始字节地址,可以由用户自由设置(在CPU允许的V存储区范围内)。如果设置T为VB100,那么读取时钟后,“年”的信息就会保存在VB100中,“月”保存在VB101中。

miy_gongkong

  • 精华:0帖
  • 求助:2帖
  • 帖子:23帖 | 3065回
  • 年度积分:0
  • 历史总积分:12421
  • 注册:2008年9月18日
发表于:2013-03-05 13:54:04
6楼

不要做成字符串,我说的是 Buffer (字节流), 意思是连续字节存储 时间数据;

接下来的任务就是把 13, 03,04 转换成BCD 码,例如:

MOV_B     16#13,VB100 // 年数据 传送到 VB100 中 , 可以看成 BCD 码;

其他字节用同样的方法,

MOV_B     16#03,VB100 // 年数据 传送到 VB101中 , BCD 码;

...............

以此类推。。。

 

不难看出, 其实BCD 码,用16进制表示出来,当成10 进制看 ,就是你要的BCD码。 且16进制中 A~F 值除外。

 

chinacupor

  • 精华:2帖
  • 求助:13帖
  • 帖子:25帖 | 845回
  • 年度积分:0
  • 历史总积分:2751
  • 注册:2013年2月16日
发表于:2013-03-05 16:03:06
7楼
引用 miy_gongkong 的回复内容: 不要做成字符串,我说的是 Buffer (字节流), 意思是连续字节存储 时间数据;接下来的任务就是把 13, 03,04 转换成BCD 码,例如:MOV_B     16#13,VB100 // 年数据 传送到 VB100 中 , 可以看成 BCD 码;其他字节用同样的方法,MOV_B     16#03,VB100 // 年数据 传送到 VB101中 , BCD 码;............... 以此类推。。。 不难看出, 其实BCD 码,用16进制表示出来,当成10 进制看 ,就是你要的BCD码。 且16进制中 A~F 值除外。 


如果不转字符串,那么13,03,04这三个分别都是整数值(W),除非我在组态TD的时候设定他们是字节,好吧,假定是字节,这里省事一点,把这些字节型整数转成16进制数这一步怎么办?我如果是在编程状态当然都好说,输入个16#13就好了,关键这里的13是用户通过TD输进VB100里面去的,也就是VB100里面的值,我如何将VB100里面的13转成16#13呢?

 

直接在IN端写上16#VB100?这样可以不?

 

 

不管咋说,反复先谢谢miy_gongkong大神再说。。。

miy_gongkong

  • 精华:0帖
  • 求助:2帖
  • 帖子:23帖 | 3065回
  • 年度积分:0
  • 历史总积分:12421
  • 注册:2008年9月18日
发表于:2013-03-06 15:58:24
8楼

哎,不要羡慕 “锅”, “锅”只是个更大的 “杯具”.............!

这位童鞋 ,基础不够扎实,回头好好看看《计算机组成原理》

 

 关键这里的13是用户通过TD输进VB100里面去的,也就是VB100里面的值,我如何将VB100里面的13转成16#13呢?

 

你输入一个字,整数 ,你可以有N多方法 转换成字节,

1. 例如VW100 输入了 13 ,这个值,如果你熟悉S7-200 的数据存储结构的话,VB101 里面就存储了13这个值,

         用 I_BCD VW100,VW120,(输入的数转换成BCD码)。  然后MOV_B  VB121, VB200, (假设你Buffer 首地址是VB200),   这样就把刚刚输入整数变量的值转换 到 Buffer 中了,其余的字节以此类推;

 

chinacupor

  • 精华:2帖
  • 求助:13帖
  • 帖子:25帖 | 845回
  • 年度积分:0
  • 历史总积分:2751
  • 注册:2013年2月16日
发表于:2013-03-06 18:06:03
9楼
引用 miy_gongkong 的回复内容: 哎,不要羡慕 “锅”, “锅”只是个更大的 “杯具”.............!这位童鞋 ,基础不够扎实,回头好好看看《计算机组成原理》  关键这里的13是用户通过TD输进VB100里面去的,也就是VB100里面的值,我如何将VB100里面的13转成16#13呢? 你输入一个字,整数 ,你可以有N多方法 转换成字节, 1. 例如VW100 输入了 13 ,这个值,如果你熟悉S7-200 的数据存储结构的话,VB101 里面就存储了13这个值,         用 I_BCD VW100,VW120,(输入的数转换成BCD码)。  然后MOV_B  VB121, VB200, (假设你Buffer 首地址是VB200),   这样就把刚刚输入整数变量的值转换 到 Buffer 中了,其余的字节以此类推; 

弱弱说一下,话说我不是学计算机出身。。。我只是个电工

 

对计算机基础类的知识,还不如我对魔兽的了解丰富。。。


miy_gongkong

  • 精华:0帖
  • 求助:2帖
  • 帖子:23帖 | 3065回
  • 年度积分:0
  • 历史总积分:12421
  • 注册:2008年9月18日
发表于:2013-03-07 09:40:46
10楼

那我以前也只是个电工而已..........     ,   事在人为哦..........

chinacupor

  • 精华:2帖
  • 求助:13帖
  • 帖子:25帖 | 845回
  • 年度积分:0
  • 历史总积分:2751
  • 注册:2013年2月16日
发表于:2013-03-07 11:02:02
11楼
引用 miy_gongkong 的回复内容: 那我以前也只是个电工而已..........     ,   事在人为哦..........


电工万岁。。。

热门招聘
相关主题

官方公众号

智造工程师