本博客最初发布于cimetrix.com。
您是否需要为设备中的组件开发复杂驱动程序?让我们看看CIMControlFramework™通信框架如何助您实现这一目标。
什么是CCF通信框架?
通信框架通过封装CCF与设备之间的连接,简化了与硬件之间低级消息的处理。
以控制软件与硬件设备之间的连接为例。实现ASCII串行连接需要:基于TCP的套接字连接、处理设备多向消息的多线程机制、同步命令及其响应的逻辑,以及若干其他功能。若从零开始开发,这将是一项艰巨的工作。
作为替代方案,CCF提供了一个内置的ASCII串行连接类,可快速实现上述所有功能。您只需使用该类即可创建与组件的ASCII串行连接。
Communicator框架的具体作用是什么?
设备中的每个组件或装置都提供一组命令与响应机制以执行其指定功能。通信框架包含一个事务类来处理这些命令;针对特定设备的每条命令均以事务形式实现。
考虑负载端口的夹紧操作——其关联命令可能是“LOCK”。现在让我们看看作为CCF开发者,在负载端口驱动程序中实现此命令需要完成哪些任务。
第一步是为加载端口创建一个Transaction类,该类必须继承自基础的CCF Transaction类。下文给出了创建“Clamp”事务的示例。

在此示例中,ClampTransaction 类将 Clamp 命令作为属性接受。作为属性传递给其基类的命令将通过 ASCII 串行连接发送至设备。
下一步是实现一个Communicator类,用于向设备发送命令并接收响应。请参见下面的示例代码。

CCF产品包含一个LoadPort类。在此我们通过ASCII串行连接初始化Communicator类以执行交易。

当需要执行钳位操作时,CCF会调用负载端口的Clamp函数来执行钳位。我们使用刚初始化的Communicator对象将命令发送至硬件。请注意,我们并未编写任何发送命令或接收响应的代码,因为这是Communicator的职责。通过调用Communicator基类的PerformTransaction函数,即可将命令发送至硬件,如下所示:

信不信由你……就这样!我们仅用驱动程序中寥寥数行代码就向设备发送了指令。那么,如何处理设备返回的响应呢?让我们来看看。
每个设备对命令集的响应方式各不相同,具体取决于设备制造商。这些响应可能包括确认信息、数据项、各类事件等。 因此,每当通信器接收到设备响应时,它会调用子类的抽象方法来解析响应。作为CCF开发者,您必须判断响应类型、交易是否成功完成,并据此决定如何向通信器反馈结果。
下面的示例展示了如何解析来自设备的响应。

最后,我们如何从硬件层面处理事件?从上述代码中可以看出,如何标识响应类型为事件,此时它将调用其子类的另一个抽象方法来处理该事件。CCF开发者随后可在其代码中按如下方式进行处理:

以上就是全部内容。上述代码段展示了一个包含Clamp事务的基本负载端口驱动程序示例。若需为设备实现更多命令,只需添加更多事务并从设备控制器调用即可。通讯框架将负责处理与设备的其余通信。