PLC论坛-全力打造可编程控制器专业技术论坛

 找回密码
 注册哦

QQ登录

只需一步,快速开始

微信扫码登录

查看: 2084|回复: 9

[三菱] 一个思考题,看你行不行?

[复制链接]
发表于 2007-12-13 11:20:00 | 显示全部楼层 |阅读模式

关于OMRON PLC的一个思考题?

某台设备用OMRON CPM2A控制,该设备每天早晨7:45自动开机且一绿色指示灯亮,下午16:55自动关机且黄色指示灯亮。直到第二天早晨重复此过程。不断循环往复……,PLC任何时候开机运行均能实现此功能,且PLC开机运行后(若没特殊情况)始终不关机。

此题某种方法提示:涉及到将PLC时钟信号取出转换,并用比较指令产生控制信号。由于plc取出的时钟信号是年月,日时,分秒三种信号,需要转换成时和分,然后再比较产生控制信号(此转换较啰嗦)。

当然也许有其他更好的方法?有兴趣者不妨参与一下,至少可学习或复习巩固一下知识。

比如取时间2007年12月12日10点29分20秒吧,OMRON CPM2A取出的值分别是:PLC2007年12月的BCD码是712,对应通道AR20的16进制数值是02C8;12日10点的BCD码是1210,对应通道AR19的16进制数值是04BA;29分20秒的BCD码是2920,对应通道AR18的16进制数值0B68,这些数据都可清楚在电脑上监控到。

但如果只取时和分(10点29分),则BCD码和16进制数应该是什么呢?按前面的值通道直接转移,推算过来是BA0B吗?

而你预设的值简单好算,BCD码是1029,换算成16进制数则是405,会和PLC算出来的大不同,怎么用CMP指令比较?这里怎么解决才算方便科学呢?

[em07][em07][em07]
[此贴子已经被作者于2007-12-13 13:16:09编辑过]
回复

使用道具 举报

发表于 2007-12-13 11:30:00 | 显示全部楼层
CPM2A内置时钟,好像在AR18,AR19,取出高低8位与预设值进行比较,就可以了,简单
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-12-13 12:43:00 | 显示全部楼层
取出的高低8位是不能直接和预设值比较的,不信你试试。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-12-13 12:56:00 | 显示全部楼层

二楼的思路是对的,但是会碰到一点麻烦,似乎并不简单。

比如取时间2007年12月12日10点29分20秒吧,OMRON CPM2A取出的值分别是:PLC2007年12月的BCD码是712,对应通道AR20的16进制数值是02C8;12日10点的BCD码是1210,对应通道AR19的16进制数值是04BA;29分20秒的BCD码是2920,对应通道AR18的16进制数值0B68,这些数据都可清楚在电脑上监控到。

但如果只取时和分(10点29分),则BCD码和16进制数应该是什么呢?按前面的值通道直接转移,推算过来是BA0B吗?

而你预设的值简单好算,BCD码是1029,换算成16进制数则是405,会和PLC算出来的大不同,怎么用CMP指令比较?这里怎么解决才算方便科学呢?

[此贴子已经被作者于2007-12-13 13:14:35编辑过]
回复 支持 反对

使用道具 举报

发表于 2007-12-13 16:06:00 | 显示全部楼层
ding
回复 支持 反对

使用道具 举报

发表于 2007-12-14 09:58:00 | 显示全部楼层
对于不需要比较的高8位和低8位,进行移入00处理,好像是MOVB命令,你自己查一下指令手册,然后拿处理好的数据和预设值比较,你试试看,不行你再跟我说
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-12-14 11:36:00 | 显示全部楼层

比如:BCD码是1210,16进制数值是04BA。

BCD码是1012,16进制数值难道是BA04吗?显然不是。所以不能简单的用通道移位或移入00处理吧,也许是我把问题想复杂了,还是我根本没想到点子上?

楼上的老师,请赐教

回复 支持 反对

使用道具 举报

发表于 2007-12-14 12:17:00 | 显示全部楼层
BCD码和16进制数只是一个表示数的手段,比如你的设定值是BCD,你就直接和AR的8位做比较,你的设定值是16进制数,那你先把时钟的BCD数值分成2个16位的BCD,要高8位的低8位就移0,要低8位的高8位就移0,然后把他们转成16进制数,和你的设定16进制数做比较。一般的话,AR中的值是BCD输出,是16位的2进制数,直接取出高低8位比较,CMP的设置值是加#号的BCD。
回复 支持 反对

使用道具 举报

发表于 2007-12-14 12:38:00 | 显示全部楼层
BCD是1210(0001100 00001010),把他处理成2个BCD,高8位移入一个新的D(比如D100)的低8位,D100的高8位自动为0,原来的低8位移入D101的低8位,这样D100现在的值是12,D101的值是10 ,再用CMP比较。懂了吗?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-12-17 14:31:00 | 显示全部楼层

感谢nokia6100sh!你的意思我基本明白,但还有一疑问?

BCD是1210数按两个BCD转换成的二进制应该是00001100 00001010不错,可从AR通道中读出来的却是04BA(我已经用PLC调试了,它是作为一个整体数值将1210转换成的16进制数,不是分两个BCD转换的),二进制却是00000100 10111010.

问题就在这两种二进制都表示BCD的1210,前一个是设定值,后一个是AR区读出来的值,如何比较呢?

[此贴子已经被作者于2007-12-17 14:34:50编辑过]
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册哦

本版积分规则

QQ|小黑屋|手机版|Archiver|PLC技术网-PLC论坛 ( 粤ICP备17165530号 )|网站地图

GMT+8, 2024-9-19 10:03 , Processed in 0.046612 second(s), 24 queries .

快速回复 返回顶部 返回列表