命令框架

命令框架概述

你可以使用命令框架服务向设备上正在运行的应用程序发送命令。

例如,Predix云中的EdgeManager设备管理应用程序能够向任何使用命令框架服务设备的单独的应用程序发送命令。

为了传递EdgeManager的命令,Predix机器需要得到想要达到的每个它所访问的应用程序的命令处理程序程序。应执行每个命令处理程序程序需要被实现以与具体的应用程序进行通信。

注:

参见创建命令处理程序

工作流

本范例展示了机器命令处理程序程序执行 getlogs 命令的工作流。
1. 云网关依据根据以下三大条件之一与边缘网关进行同步:
- 1.Sever-Sent Events服务器发送事件 (SSE)
- 2.在云网关配置中设置的时间间隔
- 3.机器上运行的应用程序发送一个同步请求
2. 边缘网关向 get logs推送一项任务。
3. 云网关将命令传递给命令调度程序。
4. 命令调度程序将命令识别为机器命令,并向机器处理程序发送消息。
5. 机器处理程序通过向边缘网关端点发表日志执行所需的操作。
6. 机器处理程序向云网关发送成功状态消息。
7. 云网关储存状态消息直到下一次同步周期。
8. 将状态消息上传至云端。

下图显示了工作流。

命令框架消费者配置

Maven依赖项

消费进行命令框架服务时需要下列Maven依赖项:
图片描述

OSGI导入

在消费消耗捆绑包中时,需要导入下列OSGI:
图片描述

在Predix机器中安装命令框架

为了使用命令框架服务,你必须生成一个Predix机器供应容器,包括命令框架和云网关捆绑包。

你可以使用命令行脚本或Predix机器SDK在Eclipse中生成容器。
• 使用命令行生成容器。
例如,GenerateContainers.bat D\users\16.4.0\SDK\eclipse-jee-mars-SR2-win32-x8-64.zip -PROV

注:

欲了解使用脚本生成容器的完整说明,参见用命令行脚本生成Predix机器运行时容器
• 用Predix机器SDK生成容器,并在Predix功能组捆绑包类型中添加Predix供应支持捆绑包。

注:

欲了解使用Eclipse生成容器的完整说明,参见用Eclipse生成Predix机器运行时容器

创建命令处理程序程序

为了使用命令框架服务,你必须生成一个Predix机器供应容器,包括命令框架和云网关捆绑包。

你可以使用命令行脚本或Predix机器SDK在Eclipse中生成容器。
• 使用命令行生成容器。
例如,GenerateContainers.bat D\users\16.4.0\SDK\eclipse-jee-mars-SR2-win32-x8-64.zip -PROV

注:

欲了解使用脚本生成容器的完整说明,参见用命令行脚本生成Predix机器运行时容器。
• 用Predix机器SDK生成容器,并在Predix功能组捆绑包类型中添加Predix供应支持捆绑包。

注:

欲了解使用Eclipse生成容器的完整说明,参见用Eclipse生成Predix机器运行时容器。

创建命令处理程序程序

要订阅命令,应用程序必须注册命令处理程序程序服务实现执行 ICommandHandler 接口。调度新命令时,在调度程序中注册并调用这项服务。

下列范例显示了如何执行一个命令处理程序:
图片描述

命令和命令格式

命令格式

EdgeCommand Protobuf对象发送至机器
图片描述

CommandStatus Protobuf Object 返回至CloudGateway。
图片描述

命令

Predix机器命令处理程序提供下列命令。

图片描述
图片描述
图片描述
图片描述
图片描述
图片描述

命令输出

应通过下列一种方式返回命令输出。如果一个命令有两种执行方式,只有CommandStatus对象(第一种方式) 中的输出会在EdgeManager UI中显示。

1.通过输出字段中的 CommandStatus 对象发送输出。

注:

限制为< 1KB的字符串输出。

2.通过提供的URL上传输出。

命令状态枚举

下表描述了 CommandStatus 对象中的枚举值和设定值描述。
图片描述

向命令处理程序发布一条命令

用声明服务注入命令框架服务,例如:
图片描述

机器命令处理程序

你可以使用机器命令处理程序与Predix机器进行通信。例如,EdgeManager将命令发送至机器命令处理程序,可以启用或禁用Predix机器网络控制台。

配置机器命令处理程序

你可以配置机器命令处理程序。

格式化.config文件(不是.cfg文件)内的属性值时,使用类型字符,之后跟加引号引用的值字符串值表示。例如,一个布尔型属性=B”true”。小写类型字符表示基本数据。字符串的类型可以省略。下表列出了类型和对应的类型字符:
图片描述
数组格式为属性=<类型>[”<值1>”,”<值2>”]。例如,整型数组属性=I[“1”, “2”, “3”].清晰起见,可使用反斜杠分隔换行。

  1. 找到并打开下列文件:
    图片描述
  2. 打开com.ge.dspmicro.device.commandhandler.machinecomm.config 文件并设置下列属性:
    图片描述
AT命令是一种通用的命令格式,用于在串口通信中发送和接收数据。在STM32中实现AT命令框架可以使我们方便地控制串口设备,例如GSM模块、蓝牙模块、WIFI模块等。 下面是STM32串口实现AT命令框架的基本步骤: 1. 初始化串口 在STM32中,我们可以使用HAL库或者标准库来初始化串口。以下是使用HAL库初始化串口的示例代码: ```c /* 定义串口句柄 */ UART_HandleTypeDef huart1; /* 初始化串口 */ void MX_USART1_UART_Init(void) { huart1.Instance = USART1; huart1.Init.BaudRate = 115200; huart1.Init.WordLength = UART_WORDLENGTH_8B; huart1.Init.StopBits = UART_STOPBITS_1; huart1.Init.Parity = UART_PARITY_NONE; huart1.Init.Mode = UART_MODE_TX_RX; huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE; huart1.Init.OverSampling = UART_OVERSAMPLING_16; if (HAL_UART_Init(&huart1) != HAL_OK) { Error_Handler(); } } ``` 2. 编写AT命令发送函数 AT命令发送函数的作用是将AT命令发送到串口设备中。以下是一个简单的AT命令发送函数示例: ```c void sendATCommand(char* command) { HAL_UART_Transmit(&huart1, (uint8_t*)command, strlen(command), HAL_MAX_DELAY); HAL_UART_Transmit(&huart1, (uint8_t*)"\r\n", 2, HAL_MAX_DELAY); } ``` 3. 编写AT命令接收函数 AT命令接收函数的作用是从串口设备中接收AT命令的响应。以下是一个简单的AT命令接收函数示例: ```c void receiveATResponse(char* response) { uint8_t buffer[1]; uint16_t count = 0; uint32_t timeout = HAL_GetTick() + 1000; // Timeout of 1 second memset(response, 0, strlen(response)); while (count < strlen(response) && HAL_GetTick() < timeout) { HAL_UART_Receive(&huart1, buffer, 1, HAL_MAX_DELAY); response[count++] = buffer[0]; } } ``` 4. 编写AT命令执行函数 AT命令执行函数的作用是将AT命令发送到串口设备中,并等待响应。以下是一个简单的AT命令执行函数示例: ```c void executeATCommand(char* command, char* response) { sendATCommand(command); receiveATResponse(response); } ``` 5. 使用AT命令执行函数 使用AT命令执行函数可以发送AT命令到串口设备中,并获取响应。以下是一个简单的使用AT命令执行函数的示例: ```c char response[100]; executeATCommand("AT+CGMI", response); // 发送 AT+CGMI 命令 printf("%s", response); // 输出响应 ``` 总结: 以上就是STM32串口实现AT命令框架的基本步骤。通过这种方法,我们可以方便地控制串口设备,并实现各种功能。当然,还有很多细节需要注意,例如超时时间、错误处理等。在实际应用中,我们需要根据具体的需求进行修改和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值