1、安全JAVA时若出现windows installer错误的问题,是因为目前机器上已经存在某个版本的JAVA,用卸载工具如360完全清除后再安全即可。

2、我们使用Rifidi Emulator来模拟EPCglobal系统中的阅读器与标签,通过Rifidi Emulator,可以创建出一些虚拟的阅读器,并且可以使用客户端跟这些阅读器建立连接,就跟和物理上的阅读器建立连接一样。然后我们还可以建立一些虚拟的标签,并把这些标签和阅读器建立连接。OSGi(JSR 291)亦称做Java语言的动态模块系统,它为模块化应用的开发定义了一个基础架构。简单的说,通过OSGi可以在后台对设备组件进行安装、升级或卸载而无需打断该设备的正常运行。

3、整个reader的实现结构如下图所示:

A view of the architecture of the reader

 

包含六个模块:

1、communication:用于阅读器和外面中间件之间的命令交换,其核心是协议解析器,用来分析命令所使用的协议,前后分别是输入输出的缓冲器和具体的输入输出端口。

2、command processor:用来接收从communication发送过来的的指令,并通过controller解析后连接到该指令的具体实现句柄上。整个命令的接收、解析及最后的执行过程如下图所示,示例使用的是TCP协议:

How a command flows through the engine

a.命令首先被发送到TCP的输入缓冲区中,然后经协议分析后只剩下具体的reader命令,并且如果中间件是同时发送多条命令的,在这个也会被分开口存入“输入命令缓冲区中”。

b.只要“输入命令缓冲区中”以后输入命令,系统通过回调函数调用“命令查找器”去寻找关于该命令的已有实现,即“Handler Method”。

c.“Handler Method”执行命令后,把所有的命令结果输出给命令适配器。再通过“command formatter”格式化成输出命令后发送给“输出命令缓冲器”。

d.“输出命令缓冲区”中的命令再经过相关的协议包装后发送给中间件作为最初命令的回复。

3、Radio:Radio是阅读器天线和阅读器之间的接口,就是由它来检测出当前和某根天线关联的标签,并且把检测的结果保存在阅读器的“Tag Memory”中。Radio有两种工作模式,一种是自动模式,一种是轮询模式。在自动模式下时,Radio会实时监控天线来使得“Tag Memory”里面的标签数据保持最新状态。当一个标签被添加到某一根天线的时候,天线会自动的告诉Radio用以触发一个update()函数,这个函数会调用scan()去重新检测当前和某跟天线关联的标签有哪些,因此,自动模式会使得阅读器能够及时的知道标签的关联情况,下面是自动模式的时间序列图:

Timing Diagram representing how the radio is used in automatic mode

在这张时间序列图里包含5个对象:

a.Controller Object:外在控制器,控制阅读器和标签的关联动作。

b.SymbolReaderModule: 阅读器的实现模块,通常是用来被Controller Object调用的。

c.SymbolTagMemory: 用来存储阅读器已经检测到的标签数据,包含在阅读器中。

d.Radio: 天线和阅读器之间的接口

e.Antenna: 天线对象,用来关联标签。

这张时间序列的执行过程如下:

1、外在控制器如IDE开始一个阅读器。

2、阅读器构造一个TagMemory.

3、阅读器激活TagMemory.

4、阅读器构造天线,构造的天线的数量也是有IDE控制的,构造完得所有天线放在一个HashMap中。

5、阅读器构造Radio,并用已经构造好的TagMemory和天线的HashMap初始化Radio,这个初始化是使用自动模式的关键。

6、外在控制器产生标签。

7、外在控制器把产生的标签和和天线做关联。

8、天线产生一个通知告诉Radio说和它关联的标签存在变化。

9、Radio扫描天线,并且调用updateTagMemory()方法,把它扫描到的标签发送给TagMemory。

10、阅读器就可以从TagMemory中得知当前和阅读器相关的标签的情况。

以上我们介绍的的是自动模式阅读器检测标签的过程,下面这张图是在轮询模式下阅读器查看标签的序列图:

Timing Diagram representing how the radio is used in polling mode

这张图所包含的对象和上面自动模式是一样的,包括Controller Object、SymbolReaderModulec、SymbolTagMemoryd、Radioe、Antenna,但这个运行过程是不一样的。

1、外在控制器如IDE开始一个阅读器。

2、阅读器构造一个TagMemory,这里和自动模式是不一样的,自动模式在构造TagMemory后紧接着就是对TagMemory的激活操作,并把激活后的TagMemory和天线用以初始化Radio对象,而在轮询模式中,TagMemory的激活是在Radio对象构造完成之后,并且Radio的初始化操作也只需要天线即可。

3、阅读器构造天线,构造的天线的数量也是有IDE控制的,构造完得所有天线放在一个HashMap中。

4、阅读器构造Radio,上一步构造的天线的HashMap初始化Radio,这里和自动模式不同的是不需要使用TagMemory初始化Radio。

5、阅读器激活TagMemory.

6、外在控制器产生标签。

7、外在控制器把产生的标签和和天线做关联。

8、阅读器在轮询期间产生一个Radio的scan方法,scan方法首先询问每个天线当前和他们相关联的标签,并且调用updateTagMemory()方法跟新相应的TagMemory。

9、阅读器就可以从TagMemory中得知当前和阅读器相关的标签的情况。

4、GPIO:基本用途的输入输出系统(General Purpose Input/Output),是用来使阅读器和其他的一些设备做交互。

5、Shared Resources:这个对象用来在communication、command controller、GPIO以及Radio之间共享数据。