实现此逻辑的最简单办法有没有? 点击:518 | 回复:9



秦君_1

    
  • 精华:8帖
  • 求助:22帖
  • 帖子:148帖 | 4867回
  • 年度积分:1651
  • 历史总积分:39896
  • 注册:2005年6月28日
发表于:2014-09-26 16:47:08
楼主

有下面的工况:

在某个设备(姑且称之为A)监测范围内存在N个信号,A就有能力识别到此N个信号。控制器(PLC)与A通讯,可以判断监测范围内存在有哪些信号,问题是PLC怎样判断监测范围内已有的信号真正离开了检测范围?

目前想到的办法是PLC只要检测到某个信号就马上置位一个M,表明此信号已经出现在监测范围内(这个逻辑要求已经写了出来,没有问题)。

置位M后马上启动一个时间继电器,启动条件中间串联一个此信号消失的节点,时间到后就复位M,即就是在一个时间段内一直没有接收到某信号存在的数据就认为这个信号已经离开了此区域。


如果需要检测的信号是海量的话,这个逻辑是不是无法写下去了(太多程序段啊!)?

大家有什么好的处理办法?

以下是我以5个信号为例子写的逻辑。如果有上万个信号,岂不是PLC无法完成这样的任务了?




楼主最近还看过



变幻莫测

  • 精华:0帖
  • 求助:0帖
  • 帖子:23帖 | 1337回
  • 年度积分:0
  • 历史总积分:1937
  • 注册:2008年11月09日
发表于:2014-09-26 17:07:21
1楼

参考消防系统艳感报警器,并且还带地址识别。能实现的太多办法了,都简单!以上 哈哈!

万把个信号不是什么难事

梧桐树A

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 616回
  • 年度积分:36
  • 历史总积分:2335
  • 注册:2004年11月23日
发表于:2014-09-26 17:42:47
2楼

用通信的方式,把所有的信号连接起来,一个信号为一个地址不就可以了,太简单了。每收到一个信号立马就知道是哪个点的信号,然后就可以作出相应的处理了。找我,我给你搞定,QQ1060202933.

zdy13656171065

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 94回
  • 年度积分:0
  • 历史总积分:411
  • 注册:2010年6月01日
发表于:2014-09-26 20:56:32
3楼

看过扫描式按键不?200个I/O点就搞定10000个信号

秦君_1

  • 精华:8帖
  • 求助:22帖
  • 帖子:148帖 | 4867回
  • 年度积分:1651
  • 历史总积分:39896
  • 注册:2005年6月28日
发表于:2014-09-27 08:49:41
4楼

感觉楼上三位没有看明白帖子意思。成千上万的信号(1#-N#)是以通讯的方式接收存储到PLC的D区(上图片中的D113)中,接收辨别那个信号出现不成问题,现在问题是怎样在PLC中判断某个信号离开监测区域?上面图片是我想出的逻辑,但是遇到的困难就是信号多了,怎么办?(处理一个信号要写两行啊!)

阿水--王者之师

  • 精华:25帖
  • 求助:348帖
  • 帖子:1617帖 | 22281回
  • 年度积分:37
  • 历史总积分:98482
  • 注册:2007年3月22日
发表于:2014-09-27 09:08:57
5楼

  太难了,我不会,就看看学习

秦君_1

  • 精华:8帖
  • 求助:22帖
  • 帖子:148帖 | 4867回
  • 年度积分:1651
  • 历史总积分:39896
  • 注册:2005年6月28日
发表于:2014-09-27 14:25:34
6楼

可能还有些人看不明白,我重新描述一下工况:

因为是串口过来的数据,所以PLC接收寄存器(图片中的D113)接收到的是不断变化的N个数据信息。
可以理解成PLC与无线读卡器通讯,在覆盖监测区域内有1#卡存在就接收到1;有2#卡存在就接收到2……,存在很多卡的话,D113中就会接收到不断变化的数据1、2……,检测区域内没有任何卡存在,那么D113中接收到的数据就是0。
现在要使用PLC判断监测区域内有那些卡存在(例如人员身份信息),这个都不是问题,关键是那些卡离开了监测区域不好判断,使用图片中的逻辑,一个个写的话就有点力不从心了。(因为需要给出一个时间段,用时间点无法判断)

第五纪冰川

  • 精华:3帖
  • 求助:5帖
  • 帖子:37帖 | 4224回
  • 年度积分:3
  • 历史总积分:12263
  • 注册:2005年2月18日
发表于:2014-09-27 15:06:45
7楼

首先假设有N个信号可能在允许时间段内出现,那么就分配N个数组。

数组包含,信号标识符(标识符是唯一的),存在时间,两个寄存器(当然信号标识符也可以是寄存器位,以实际需要决定)。信号标识符与标识符寄存器地址之间保持严格的对应关系,这点很重要,主要是保证标识符寻址的便利性)。

当从通信中接收到某个标识符后,就开始对这个标识符的存在时间开始计时,计时不采用定时器,而采用定时中断加计数。

然后对N个标识符寄存器进行连续的扫描,如果标识符存在(表面改信号已经被侦测到),如果时间溢出,那么表示改信号已经离开,清空标识符。如果再次侦测到该标识符,则对存在时间置零。

上面使用标识符寄存器固定对应信号标识符,内存空间开销有点大。

如果允许时间内出现的信号不多,但总的信号仍然是N个,那么就可以使用浮动标识符寄存器。某个信号一出现,就随机的把内存中的某个数组分配给他,又一个信号出现时又分配一个数组给他。当对标识符寄存器进行扫描,发现存在时间溢出表示信号离开后,清空这个数组空间,留给下一个即将到来的信号。

浮动标识符方式,可以利用一次扫描过程完成标识符分配、存在时间加计数、时间溢出判断、清空标识符等工作。

这些工作只需要你用一个简短的定时中断子程序来完成,不需要重复编程。

不管怎样,PLC的速度都必须的快。这样中断子程序执行速度才够快。比如定时中断子程序的执行速度为1mS,1S内也就只能扫描1000个信号。如果要在1S内扫描1W个信号,则必须在中断子程序中处理10个信号。

总之,速度要快、内存空间要大。

秦君_1

  • 精华:8帖
  • 求助:22帖
  • 帖子:148帖 | 4867回
  • 年度积分:1651
  • 历史总积分:39896
  • 注册:2005年6月28日
发表于:2014-09-28 10:02:31
8楼

引用 第五纪冰川 的回复内容: 首先假设有N个信号可能在允许时间段内出现,那么就分配N...


感谢您的关注与回复,我慢慢消化一下您给予的指导,试一试。

Mr袁--王者之师

  • 精华:0帖
  • 求助:3帖
  • 帖子:32帖 | 1147回
  • 年度积分:0
  • 历史总积分:3881
  • 注册:2011年10月26日
发表于:2014-09-29 11:12:50
9楼

试试把这些信号进行编码啊  ,二进制就可以。


热门招聘
相关主题

官方公众号

智造工程师