日期:2014-05-18  浏览次数:20731 次

向高手求一个算法
问题的描述如下:
1.一个检测设备,有多个检测模组,对应每个被测产品,每个模组会出一组检测数据,且每个模组测出一组数据后会通过网络发送给同一个服务器,发送的数据包括(模组标识,数据,数据尾);
2.产品通过流水线依次经过各个模组,每经过一个模组,模组检测完毕会向服务器发送检测数据,若产品在中途出现损坏则退出检测,不再往前走;
3.产品一旦走完所有检测模组,服务器根据收到的这个产品的检测数据作出判断,并向最终的控制器发出控制命令;
现在的问题是:
服务器端的接收程序如何将收到的数据与产品准确对应(特别是在出现产品中途退出的情况下)?
打算用C#实现。

------解决方案--------------------
流水线检测,也许可以根据 时间 在程序中对产品进行编号(比如20120501124020),检测结果可以按顺序放到list或者dictionary中,
中途退出的产品放到另外一个 退出用list中,这样最终通过的检测信息和出来的产品一一对应,唯一的问题就是出来的产品顺序不能搞乱,不然就不知道该产品对应的检测信息了。

退出的产品信息也是按顺序和退出的产品对应。

如果可以达到这种要求的话,不需要贴唯一标识也可以对应。
------解决方案--------------------
做一个结构链表。假设你的检测模块有n项,结构里要依次存放这n个模块检测后返回的信息。模块里面的数据初始化为空。链表里面的数据就是被检测的产品的顺序。对链表里的每一个节点进行判断,如果存放n个模块的检测结果的地方值都不为空,那这个产品就检测通过了。否则没通过。由于顺序是相同的,知道链表中的哪个节点数据异常了,就知道哪个产品出问题了。
因此,产品上没有标签也行的。
------解决方案--------------------
检测组的网络模块发送时间回来不?

因为你是流水线,所以产品路过每一个模块的时间,从他开始的时候应该就可以确定下来了。只能根据这个来了。
产品本身标识不了,只能根据他检测的时间了。

比如开始时间作为产品编号20120301103020

到检测1结果信心生成时间是30秒,20120301103050 时的检测报告就是产品20120301103020的。