From 5c82f4c50122295b15a2c253dd0848b546a5a6b8 Mon Sep 17 00:00:00 2001 From: Yan_yan Date: Tue, 17 Nov 2020 17:45:00 +0800 Subject: [PATCH] modify apparch/kong.md --- docs/doc/apparch/kong.md | 42 ++++++++++++++++++++-------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/docs/doc/apparch/kong.md b/docs/doc/apparch/kong.md index ca9a9f4..222bd20 100644 --- a/docs/doc/apparch/kong.md +++ b/docs/doc/apparch/kong.md @@ -2,16 +2,16 @@ 工业生产中控制逻辑的复杂程度千变万化,往往需要具体行业专业人员完成专门的设计,从而提高了行业的技术壁垒,严重阻碍了工业领域的自动化和智能化升级。 -XiUOS应用程序框架中的“控”子框架从“控制需求”本身出发,同时面向专业用户和非专业用户,通过对“控制需求”本身和复杂的工业控制流程进行深入分析,通过软件定义的方式,提出以“控制元”为核心的“控”制流程。具体地,本设计通过解耦复杂的工业控制流程,将工业生产中的各种复制工业控制流程分解为各种类型的“控制元”命令,这些“控制元”的命令以软件API的形式交互给用户使用,从而屏蔽了以PLC为中心的各种控制器的巨大差异,形成了方便易用的接口,降低了专业的技术壁垒,加速了工业领域的智能化升级。 +XiUOS 应用程序框架中的“控”子框架从“控制需求”本身出发,同时面向专业用户和非专业用户,通过对“控制需求”本身和复杂的工业控制流程进行深入分析,通过软件定义的方式,提出以“控制元”为核心的“控”制流程。具体地,本设计通过解耦复杂的工业控制流程,将工业生产中的各种复制工业控制流程分解为各种类型的“控制元”命令,这些“控制元”的命令以软件API的形式交互给用户使用,从而屏蔽了以 PLC 为中心的各种控制器的巨大差异,形成了方便易用的接口,降低了专业的技术壁垒,加速了工业领域的智能化升级。 ## 1. XiUOS“控”制框架的关键数据结构定义和解析 ```c struct xs_PlcAbility { - const char name[XS_NAME_MAX]; /* name of the plc ability instance */ + const char name[XS_NAME_MAX]; /* name of the PLC ability instance */ enum xs_PlcCtlType type; /* type of control the plcable to excute, such as HSC or PID control */ - char address[XS_PLC_ADDRESS_MAX]; /* The address for this function in the plc*/ - struct xs_PlcDevice *pdev;/* corresponding plc device */ + char address[XS_PLC_ADDRESS_MAX]; /* The address for this function in the PLC*/ + struct xs_PlcDevice *pdev;/* corresponding PLC device */ struct XS_DOUBLE_LINKLIST_NODE link;/* link list node */ }; ``` @@ -30,7 +30,7 @@ enum xs_PLcCtlType { }; ``` -由于plc里控制指令执行都是向数据模块DB写数据,需要知道该函数功能对应的数据块地址,这个用address标识。 +由于 PLC 里控制指令执行都是向数据模块DB写数据,需要知道该函数功能对应的数据块地址,这个用address标识。 pdev成员表示该xs_PlcAbility所属的xs_PlcDevice结构,其具体定义在下文给出。 @@ -39,14 +39,14 @@ pdev成员表示该xs_PlcAbility所属的xs_PlcDevice结构,其具体定义在 ```c struct xs_PlcDevice { const char name[XS_NAME_MAX]; /* name of the device */ - struct xs_PlcInfo info;/* Plc info, such as vendor name and model name */ + struct xs_PlcInfo info;/* PLC info, such as vendor name and model name */ struct xs_PlcOps ops;/* filesystem-like APIs for data transferring */ - struct xs_PlcInterface interface;/* protocls used for transferring data from program to plc */ + struct xs_PlcInterface interface;/* protocls used for transferring data from program to PLC */ structXS_DOUBLE_LINKLIST_NODE link;/* link list node */ }; ``` -name成员记录PLC设备在系统中的名字,用于唯一标识一个xs_PlcDevice结构。 +name成员记录 PLC 设备在系统中的名字,用于唯一标识一个xs_PlcDevice结构。 ```c structxs_PlcInfo { @@ -56,7 +56,7 @@ structxs_PlcInfo { }; ``` -info成员记录PLC设备的一些属性信息,包括PLC的能力ability、厂家名vendor与型号product_model,其中ability用一个位图表示该PLC设备可以控制进行的操作: +info成员记录 PLC 设备的一些属性信息,包括 PLC 的能力ability、厂家名vendor与型号product_model,其中ability用一个位图表示该 PLC 设备可以控制进行的操作: ```c #define XS_PLC_ABILITY_HSC ((uint32_t)(1 << XS_CONTROL_TYPE_HSC)) @@ -65,7 +65,7 @@ info成员记录PLC设备的一些属性信息,包括PLC的能力ability、厂 /* ...... */ ``` -ps成员包含统一的、类似文件系统的API,用于和PLC设备通信,进行实际的数据读写和对PLC设备实现控制功能。在使用一个PLC设备前后需要打开(open)/关闭(close)该PLC,实际为建立和关闭连接;read、write分别用与从PLC接收数据与向PLC发送数据,ioctl用于向PLC设备发送控制指令: +ps成员包含统一的、类似文件系统的API,用于和 PLC 设备通信,进行实际的数据读写和对 PLC 设备实现控制功能。在使用一个 PLC 设备前后需要打开(open)/关闭(close)该 PLC,实际为建立和关闭连接;read、write分别用与从 PLC 接收数据与向 PLC 发送数据,ioctl用于向 PLC 设备发送控制指令: ```c structxs_PlcOps { @@ -77,7 +77,7 @@ structxs_PlcOps { }; ``` -interface成员表示用于与PLC进行通信时所用到的协议: +interface成员表示用于与 PLC 进行通信时所用到的协议: ```c struct xs_PlcInterface { @@ -86,7 +86,7 @@ enum xs_plc_transport transport; }; ``` -xs_plc_protocol和xs_plc_transport是两个枚举类型,标识PLC设备和自研的两种终端之间用到的通讯协议,其定义如下: +xs_plc_protocol和xs_plc_transport是两个枚举类型,标识 PLC 设备和自研的两种终端之间用到的通讯协议,其定义如下: ```c enum xs_plc_protocol{ @@ -117,9 +117,9 @@ enum xs_plc_transport{ xs_PlcProtocolCheck(struct xs_PlcDevice*); ::: -最后,系统中所有注册过的PLC设备被组织成一个双链表,即link成员。 +最后,系统中所有注册过的 PLC 设备被组织成一个双链表,即link成员。 -## 2.XiUOS Plc控制框架驱动开发 +## 2.XiUOS PLC 控制框架驱动开发 以HSC高速计数器为例。控制框架针对每个具体的控制类型将xs_PlcAbility进行扩充,采用类似面向对象的手段添加其他必要成员,如: @@ -131,7 +131,7 @@ struct xs_PlcAbilityHsc { }; ``` -实现xs_PlcOps中的数据通信API,具体实现细节取决于PLC型号,无法实现的API可以置为NULL: +实现xs_PlcOps中的数据通信API,具体实现细节取决于 PLC 型号,无法实现的API可以置为NULL: ```c structxs_PlcOpshsc_example_ops = { @@ -143,7 +143,7 @@ structxs_PlcOpshsc_example_ops = { }; ``` -实现xs_PlcAbilityHsc中的write和read接口,该接口用于向PLC的HSC模块发送控制参数和读取返回参数。在实现过程中可以使用xs_PlcOps中的接口与plc进行通信。 +实现xs_PlcAbilityHsc中的write和read接口,该接口用于向 PLC 的HSC模块发送控制参数和读取返回参数。在实现过程中可以使用xs_PlcOps中的接口与 PLC 进行通信。 其中param为一个void类型指针,由于要写入的命令参数和要读取的返回参数往往不止一个,可以根据不同的控制类型定义不同的数据读写结构体,最后使用结构体指针进行强制类型转换即可。例如对于HSC: 定义数据写入结构体: @@ -199,7 +199,7 @@ struct hsc_read{ ``` value是指定返回的变量值,与结构体hsc_write发送的指令cmd类型有关,down/busy/error是一些状态指示位。 -如我们要使用write函数向PLC发送HSC类型的控制指令: +如我们要使用write函数向 PLC 发送HSC类型的控制指令: ```c struct hsc_write write_example; @@ -209,7 +209,7 @@ struct xs_PlcAbilityHsc hsc_example进行必要的初始化后,用强制类 ```c hsc_example ->write(&hsc_example,(struct hsc_write*)&write_example); ``` -最后,将plc设备添加到plc框架。分别填充xs_PlcDevice与对应物理量的xs_PlcAbility结构(高速计数器即为xs_PlcAbilityHsc),并依次使用xs_PlcDeviceRegister和xs_PlcAbilityRegister函数将其注册到plc框架: +最后,将 PLC 设备添加到 PLC 框架。分别填充xs_PlcDevice与对应物理量的xs_PlcAbility结构(高速计数器即为xs_PlcAbilityHsc),并依次使用xs_PlcDeviceRegister和xs_PlcAbilityRegister函数将其注册到 PLC 框架: ```c int xs_PlcDeviceRegister (struct xs_PlcDeviceRegister *pdev); @@ -254,8 +254,8 @@ void register_example_plc() } ``` -## 3. XiUOS Plc控制框架的使用示例 -PLC控制应用开发者使用PLC控制框架提供的API操作PLC,PLC的API可以分为通用API与控制类型特有API。通用API用于PLC的获取、打开与关闭,控制类型特有API用于不同种类PLC的不同控制指令。以具有HSC高速计时器功能的PLC为例: +## 3. XiUOS PLC 控制框架的使用示例 +PLC 控制应用开发者使用 PLC 控制框架提供的API操作 PLC,PLC 的API可以分为通用API与控制类型特有API。通用API用于 PLC 的获取、打开与关闭,控制类型特有API用于不同种类 PLC 的不同控制指令。以具有HSC高速计时器功能的 PLC 为例: ```c /* generic API: find a plcability instance by its name */ @@ -270,7 +270,7 @@ uint32_t xs_PlcHscWrite(struct xs_PlcAbilityHsc *abl, void *param); void xs_PlcHscRead(struct xs_PlcAbilityHsc *abl, void *param); ``` -在发送命令和获取数据前,需要先获取并打开要使用的PLC;PLC打开后可以随时对PLC发送指令和对其数据进行读取;使用完毕后,须关闭PLC。完整的使用过程示例如下: +在发送命令和获取数据前,需要先获取并打开要使用的 PLC;PLC 打开后可以随时对 PLC 发送指令和对其数据进行读取;使用完毕后,须关闭 PLC。完整的使用过程示例如下: ```c int main(int argc, char *argv[])