<< 点击显示目录 >> 主页 exOS使用助手 > exOS Automation Help > Development > Programming > Data communication > Datamodel description > Datamodel example |
要理解生成的数据模型描述,最简单的方法可能就是通过一个示例。
为简单起见,让我们看看下面的 Types.typ文件 :
TYPE
Types : STRUCT
Run : BOOL; (*PUB*)
Running : BOOL; (*SUB*)
Counter : UDINT; (*SUB*)
END_STRUCT;
END_TYPE
数据模型定义文件 通过以下 .exospkg 定义与 exOS 构建链一起生成 :
<?xml version="1.0" encoding="utf-8"?>
<ComponentPackage .. >
..
<Build>
<GenerateDatamodel FileName="Types.typ" TypeName="Types">
<SG4 Include="TypesTYP.h"/>
<Output Path="Linux"/>
<Output Path="Types"/>
</GenerateDatamodel>
它会创建以下 exos_types.h 头文件:
/Automatically generated header file from Types.typ/
#ifndef _EXOS_COMP_TYPES_H_
#define _EXOS_COMP_TYPES_H_
#include "exos_api.h"
#if defined(_SG4)
#include <Types.h>
#else
#include <stddef.h>
#include <stdint.h>
#include <stdbool.h>
typedef struct Types
{
bool Run; //PUB
int32_t Counter; //PUB SUB
bool Running; //SUB
} Types;
#endif // _SG4
EXOS_ERROR_CODE exos_datamodel_connect_types(exos_datamodel_handle_t *datamodel, exos_datamodel_event_cb datamodel_event_callback);
#endif // _EXOS_COMP_TYPES_H_
以及下面的 exos_types.c:
/*Automatically generated c file from Types.typ*/
#include "exos_types.h"
const char config_types[] = "{\"name\":\"struct\",\"attributes\":{\"name\":\"<NAME>\",\"dataType\":\"Types\",\"info\":\"<infoId0>\"},\"children\":[{\"name\":\"variable\",\"attributes\":{\"name\":\"Run\",\"dataType\":\"BOOL\",\"comment\":\"PUB\",\"info\":\"<infoId1>\"}},{\"name\":\"variable\",\"attributes\":{\"name\":\"Counter\",\"dataType\":\"DINT\",\"comment\":\"PUB SUB\",\"info\":\"<infoId2>\"}},{\"name\":\"variable\",\"attributes\":{\"name\":\"Running\",\"dataType\":\"BOOL\",\"comment\":\"SUB\",\"info\":\"<infoId3>\"}}]}";
/*Connect the Types datamodel to the server*/
EXOS_ERROR_CODE exos_datamodel_connect_types(exos_datamodel_handle_t *datamodel, exos_datamodel_event_cb datamodel_event_callback)
{
Types data;
exos_dataset_info_t datasets[] = {
{EXOS_DATASET_BROWSE_NAME_INIT,{}},
{EXOS_DATASET_BROWSE_NAME(Run),{}},
{EXOS_DATASET_BROWSE_NAME(Counter),{}},
{EXOS_DATASET_BROWSE_NAME(Running),{}}
};
exos_datamodel_calc_dataset_info(datasets, sizeof(datasets));
return exos_datamodel_connect(datamodel, config_types, datasets, sizeof(datasets), datamodel_event_callback);
}
关于这两个文件的更多详情,请参阅 " 头文件 "说明。
The simplest way to understand the generated datamodel description is probably to go through an example.
For the sake of simplicity, lets have a look at the following file Types.typ:
TYPE
Types : STRUCT
Run : BOOL; (*PUB*)
Running : BOOL; (*SUB*)
Counter : UDINT; (*SUB*)
END_STRUCT;
END_TYPE
The datamodel definition files are generated with the exOS build-chain via the following .exospkg definition:
<?xml version="1.0" encoding="utf-8"?>
<ComponentPackage .. >
..
<Build>
<GenerateDatamodel FileName="Types.typ" TypeName="Types">
<SG4 Include="TypesTYP.h"/>
<Output Path="Linux"/>
<Output Path="Types"/>
</GenerateDatamodel>
It creates the following exos_types.h headerfile:
/Automatically generated header file from Types.typ/
#ifndef _EXOS_COMP_TYPES_H_
#define _EXOS_COMP_TYPES_H_
#include "exos_api.h"
#if defined(_SG4)
#include <Types.h>
#else
#include <stddef.h>
#include <stdint.h>
#include <stdbool.h>
typedef struct Types
{
bool Run; //PUB
int32_t Counter; //PUB SUB
bool Running; //SUB
} Types;
#endif // _SG4
EXOS_ERROR_CODE exos_datamodel_connect_types(exos_datamodel_handle_t *datamodel, exos_datamodel_event_cb datamodel_event_callback);
#endif // _EXOS_COMP_TYPES_H_
As well as the following exos_types.c:
/*Automatically generated c file from Types.typ*/
#include "exos_types.h"
const char config_types[] = "{\"name\":\"struct\",\"attributes\":{\"name\":\"<NAME>\",\"dataType\":\"Types\",\"info\":\"<infoId0>\"},\"children\":[{\"name\":\"variable\",\"attributes\":{\"name\":\"Run\",\"dataType\":\"BOOL\",\"comment\":\"PUB\",\"info\":\"<infoId1>\"}},{\"name\":\"variable\",\"attributes\":{\"name\":\"Counter\",\"dataType\":\"DINT\",\"comment\":\"PUB SUB\",\"info\":\"<infoId2>\"}},{\"name\":\"variable\",\"attributes\":{\"name\":\"Running\",\"dataType\":\"BOOL\",\"comment\":\"SUB\",\"info\":\"<infoId3>\"}}]}";
/*Connect the Types datamodel to the server*/
EXOS_ERROR_CODE exos_datamodel_connect_types(exos_datamodel_handle_t *datamodel, exos_datamodel_event_cb datamodel_event_callback)
{
Types data;
exos_dataset_info_t datasets[] = {
{EXOS_DATASET_BROWSE_NAME_INIT,{}},
{EXOS_DATASET_BROWSE_NAME(Run),{}},
{EXOS_DATASET_BROWSE_NAME(Counter),{}},
{EXOS_DATASET_BROWSE_NAME(Running),{}}
};
exos_datamodel_calc_dataset_info(datasets, sizeof(datasets));
return exos_datamodel_connect(datamodel, config_types, datasets, sizeof(datasets), datamodel_event_callback);
}
These two files are described more in detail in the Headerfile description.