|
|
@ -13,7 +13,6 @@ |
|
|
|
#include <stdio.h> |
|
|
|
#include <string.h> |
|
|
|
#include <stdlib.h> |
|
|
|
#include "string.h" |
|
|
|
#include "data_comm.h" |
|
|
|
#include "language.h" |
|
|
|
#include "Variable.h" |
|
|
@ -21,42 +20,8 @@ |
|
|
|
|
|
|
|
rt_mq_t proc_mq; |
|
|
|
|
|
|
|
void proc_thread_entry(void *parameter) |
|
|
|
{ |
|
|
|
struct proc_request *req; |
|
|
|
|
|
|
|
while (1) |
|
|
|
{ |
|
|
|
// 接收请求指针
|
|
|
|
if (rt_mq_recv(proc_mq, &req, sizeof(req), RT_WAITING_FOREVER) == RT_EOK) |
|
|
|
{ |
|
|
|
if (!req) continue; |
|
|
|
|
|
|
|
rt_kprintf("Processing: %.*s\n", req->input_len, req->input); |
|
|
|
rt_kprintf("Processing: %d\n", req->input_len); |
|
|
|
rt_kprintf("Processing: %s\n", req->input); |
|
|
|
memcpy(DATA_api,req->input,5); |
|
|
|
//DATA_api[5]="\0";
|
|
|
|
rt_kprintf("DATA_api: %s\n", DATA_api); |
|
|
|
extract_between(req->input, "[", "]", machine_ID, sizeof(machine_ID)); |
|
|
|
rt_kprintf("machine_ID: %s\n", machine_ID); |
|
|
|
// 示例处理:回显
|
|
|
|
req->output_len = rt_snprintf(req->output, sizeof(req->output), |
|
|
|
"Echo: %.*s", req->input_len, req->input); |
|
|
|
|
|
|
|
// 通知 UART 线程可以发送了
|
|
|
|
if (req->sem) |
|
|
|
{ |
|
|
|
rt_sem_release(req->sem); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// 变量
|
|
|
|
char cjson_falg=0;//是否解析cjson
|
|
|
|
char *json_buffer=NULL; |
|
|
|
uint8_t cjson_falg=0;//是否解析cjson
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 截取两个指定子串之间的内容 |
|
|
|
* @param src 源字符串 |
|
|
@ -85,7 +50,6 @@ int extract_between(const char *src, const char *start, const char *end, char *b |
|
|
|
|
|
|
|
return 0; |
|
|
|
} |
|
|
|
|
|
|
|
// 提取字符串并安全拷贝
|
|
|
|
#define GET_STRING(dst, obj, key, size) do { \ |
|
|
|
cJSON* _item = cJSON_GetObjectItem(obj, key); \ |
|
|
@ -94,227 +58,262 @@ int extract_between(const char *src, const char *start, const char *end, char *b |
|
|
|
(dst)[(size) - 1] = '\0'; \ |
|
|
|
} \ |
|
|
|
} while(0) |
|
|
|
|
|
|
|
// 提取浮点数
|
|
|
|
#define GET_FLOAT_VAR(var, obj, key, default_val) do { \ |
|
|
|
cJSON* _item = cJSON_GetObjectItem(obj, key); \ |
|
|
|
(var) = cJSON_IsNumber(_item) ? (float)_item->valuedouble : (default_val); \ |
|
|
|
} while(0) |
|
|
|
|
|
|
|
// 提取整数(int 类型)
|
|
|
|
#define GET_INT_VAR(var, obj, key, default_val) do { \ |
|
|
|
cJSON* _item = cJSON_GetObjectItem(obj, key); \ |
|
|
|
(var) = cJSON_IsNumber(_item) ? (int)_item->valueint : (default_val); \ |
|
|
|
} while(0) |
|
|
|
|
|
|
|
// ===== cJSON分析 =====
|
|
|
|
// ===== cJSON分析 =====//
|
|
|
|
void pasre_DAT(const char *api, const char *json_str) |
|
|
|
{ |
|
|
|
|
|
|
|
cJSON *root=cJSON_Parse(json_str); |
|
|
|
cJSON *dat=cJSON_CreateObject(); |
|
|
|
|
|
|
|
if(json_buffer){ |
|
|
|
free(json_buffer); |
|
|
|
if(json_buffer) |
|
|
|
{ |
|
|
|
free(json_buffer); |
|
|
|
json_buffer=NULL; |
|
|
|
} |
|
|
|
|
|
|
|
if(strlen(json_str)>4){ |
|
|
|
if(strlen(json_str)>4) |
|
|
|
{ |
|
|
|
cjson_falg=1; |
|
|
|
//判断json解析是否成功
|
|
|
|
if(!root) |
|
|
|
{ |
|
|
|
printf("JSON parse error :%s\n",cJSON_GetErrorPtr()); |
|
|
|
cJSON_Delete(root); |
|
|
|
if(!root) |
|
|
|
{ |
|
|
|
rt_kprintf("JSON parse error :%s\n",cJSON_GetErrorPtr()); |
|
|
|
cJSON_Delete(root); |
|
|
|
// return "JSON parse error\n";
|
|
|
|
}} |
|
|
|
|
|
|
|
if (strcmp(api, "SC800") == 0) { |
|
|
|
// 处理 SC800
|
|
|
|
cJSON_AddItemToObject(dat,"Name",cJSON_CreateString(machine_name)); |
|
|
|
cJSON_AddItemToObject(dat,"Station",cJSON_CreateString(machine_ID)); |
|
|
|
cJSON_AddItemToObject(dat,"SYSKEY",cJSON_CreateString(machine_ID)); |
|
|
|
cJSON_AddItemToObject(dat,"Groups",cJSON_CreateString(machine_ID)); |
|
|
|
} |
|
|
|
else if (strcmp(api, "SC810") == 0) { |
|
|
|
//工单明细
|
|
|
|
// === 解析整数变量 StepN ===
|
|
|
|
GET_INT_VAR(StepN, root, "StepN", 0); |
|
|
|
// 字符串赋值
|
|
|
|
GET_STRING(Work, root, "Work", sizeof(Work)); |
|
|
|
GET_STRING(Dye, root, "Dye", sizeof(Dye)); |
|
|
|
GET_STRING(StepID, root, "StepID", sizeof(StepID)); |
|
|
|
GET_STRING(SIDS1, root, "SIDS1", sizeof(SIDS1)); |
|
|
|
GET_STRING(SIDS2, root, "SIDS2", sizeof(SIDS2)); |
|
|
|
GET_STRING(SIDS3, root, "SIDS3", sizeof(SIDS3)); |
|
|
|
// 浮点数赋值
|
|
|
|
GET_FLOAT_VAR(P1, root, "P1", 0.0f); |
|
|
|
GET_FLOAT_VAR(P2, root, "P2", 0.0f); |
|
|
|
GET_FLOAT_VAR(P3, root, "P3", 0.0f); |
|
|
|
GET_FLOAT_VAR(P4, root, "P4", 0.0f); |
|
|
|
GET_FLOAT_VAR(P5, root, "P5", 0.0f); |
|
|
|
GET_FLOAT_VAR(P1S1, root, "P1S1", 0.0f); |
|
|
|
GET_FLOAT_VAR(P2S1, root, "P2S1", 0.0f); |
|
|
|
GET_FLOAT_VAR(P3S1, root, "P3S1", 0.0f); |
|
|
|
GET_FLOAT_VAR(P4S1, root, "P4S1", 0.0f); |
|
|
|
GET_FLOAT_VAR(P5S1, root, "P5S1", 0.0f); |
|
|
|
GET_FLOAT_VAR(P1S2, root, "P1S2", 0.0f); |
|
|
|
GET_FLOAT_VAR(P2S2, root, "P2S2", 0.0f); |
|
|
|
GET_FLOAT_VAR(P3S2, root, "P3S2", 0.0f); |
|
|
|
GET_FLOAT_VAR(P4S2, root, "P4S2", 0.0f); |
|
|
|
GET_FLOAT_VAR(P5S2, root, "P5S2", 0.0f); |
|
|
|
GET_FLOAT_VAR(P1S3, root, "P1S3", 0.0f); |
|
|
|
GET_FLOAT_VAR(P2S3, root, "P2S3", 0.0f); |
|
|
|
GET_FLOAT_VAR(P3S3, root, "P3S3", 0.0f); |
|
|
|
GET_FLOAT_VAR(P4S3, root, "P4S3", 0.0f); |
|
|
|
GET_FLOAT_VAR(P5S3, root, "P5S3", 0.0f); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
cJSON_AddItemToObject(dat,"Work",cJSON_CreateString(Work)); |
|
|
|
cJSON_AddItemToObject(dat,"ReDye",cJSON_CreateNumber(Redye)); |
|
|
|
} |
|
|
|
else if (strcmp(api, "SC811") == 0) { |
|
|
|
printf("Processing:SC811\n"); |
|
|
|
} |
|
|
|
else if (strcmp(api, "SC812") == 0) { |
|
|
|
if (strcmp(api, "SC800") == 0) |
|
|
|
{// 处理 SC800
|
|
|
|
cJSON_AddItemToObject(dat,"Name",cJSON_CreateString(machine_name)); |
|
|
|
cJSON_AddItemToObject(dat,"Station",cJSON_CreateString(machine_ID)); |
|
|
|
cJSON_AddItemToObject(dat,"SYSKEY",cJSON_CreateString(machine_ID)); |
|
|
|
cJSON_AddItemToObject(dat,"Groups",cJSON_CreateString(machine_ID)); |
|
|
|
} |
|
|
|
else if (strcmp(api, "SC810") == 0) |
|
|
|
{//工单明细
|
|
|
|
// === 解析整数变量 StepN ===
|
|
|
|
GET_INT_VAR(StepN, root, "StepN", 0); |
|
|
|
// 字符串赋值
|
|
|
|
GET_STRING(Work, root, "Work", sizeof(Work)); |
|
|
|
GET_STRING(Dye, root, "Dye", sizeof(Dye)); |
|
|
|
GET_STRING(StepID, root, "StepID", sizeof(StepID)); |
|
|
|
GET_STRING(SIDS1, root, "SIDS1", sizeof(SIDS1)); |
|
|
|
GET_STRING(SIDS2, root, "SIDS2", sizeof(SIDS2)); |
|
|
|
GET_STRING(SIDS3, root, "SIDS3", sizeof(SIDS3)); |
|
|
|
// 浮点数赋值
|
|
|
|
GET_FLOAT_VAR(P1, root, "P1", 0.0f); |
|
|
|
GET_FLOAT_VAR(P2, root, "P2", 0.0f); |
|
|
|
GET_FLOAT_VAR(P3, root, "P3", 0.0f); |
|
|
|
GET_FLOAT_VAR(P4, root, "P4", 0.0f); |
|
|
|
GET_FLOAT_VAR(P5, root, "P5", 0.0f); |
|
|
|
GET_FLOAT_VAR(P1S1, root, "P1S1", 0.0f); |
|
|
|
GET_FLOAT_VAR(P2S1, root, "P2S1", 0.0f); |
|
|
|
GET_FLOAT_VAR(P3S1, root, "P3S1", 0.0f); |
|
|
|
GET_FLOAT_VAR(P4S1, root, "P4S1", 0.0f); |
|
|
|
GET_FLOAT_VAR(P5S1, root, "P5S1", 0.0f); |
|
|
|
GET_FLOAT_VAR(P1S2, root, "P1S2", 0.0f); |
|
|
|
GET_FLOAT_VAR(P2S2, root, "P2S2", 0.0f); |
|
|
|
GET_FLOAT_VAR(P3S2, root, "P3S2", 0.0f); |
|
|
|
GET_FLOAT_VAR(P4S2, root, "P4S2", 0.0f); |
|
|
|
GET_FLOAT_VAR(P5S2, root, "P5S2", 0.0f); |
|
|
|
GET_FLOAT_VAR(P1S3, root, "P1S3", 0.0f); |
|
|
|
GET_FLOAT_VAR(P2S3, root, "P2S3", 0.0f); |
|
|
|
GET_FLOAT_VAR(P3S3, root, "P3S3", 0.0f); |
|
|
|
GET_FLOAT_VAR(P4S3, root, "P4S3", 0.0f); |
|
|
|
GET_FLOAT_VAR(P5S3, root, "P5S3", 0.0f); |
|
|
|
cJSON_AddItemToObject(dat,"Work",cJSON_CreateString(Work)); |
|
|
|
cJSON_AddItemToObject(dat,"ReDye",cJSON_CreateNumber(Redye)); |
|
|
|
} |
|
|
|
else if (strcmp(api, "SC811") == 0) { |
|
|
|
printf("Processing:SC811\n"); |
|
|
|
} |
|
|
|
else if (strcmp(api, "SC812") == 0) { |
|
|
|
printf("Processing:SC812\n"); |
|
|
|
} |
|
|
|
else if (strcmp(api, "SC813") == 0) { |
|
|
|
} |
|
|
|
else if (strcmp(api, "SC813") == 0) { |
|
|
|
printf("Processing:SC813\n"); |
|
|
|
} |
|
|
|
else if (strcmp(api, "SC820") == 0) { |
|
|
|
} |
|
|
|
else if (strcmp(api, "SC820") == 0) { |
|
|
|
printf("Processing:SC820\n"); |
|
|
|
} |
|
|
|
else if (strcmp(api, "SC821") == 0) { |
|
|
|
} |
|
|
|
else if (strcmp(api, "SC821") == 0) { |
|
|
|
printf("Processing:SC821\n"); |
|
|
|
} |
|
|
|
else if (strcmp(api, "SC822") == 0) { |
|
|
|
} |
|
|
|
else if (strcmp(api, "SC822") == 0) { |
|
|
|
printf("Processing:SC822\n"); |
|
|
|
} |
|
|
|
else if (strcmp(api, "SC827") == 0) { |
|
|
|
} |
|
|
|
else if (strcmp(api, "SC827") == 0) { |
|
|
|
printf("Processing:SC827\n"); |
|
|
|
} |
|
|
|
else if (strcmp(api, "SC828") == 0) { |
|
|
|
} |
|
|
|
else if (strcmp(api, "SC828") == 0) { |
|
|
|
printf("Processing:SC828\n"); |
|
|
|
} |
|
|
|
else if (strcmp(api, "SC829") == 0) { |
|
|
|
} |
|
|
|
else if (strcmp(api, "SC829") == 0) { |
|
|
|
printf("Processing:SC829\n"); |
|
|
|
} |
|
|
|
else if (strcmp(api, "SC830") == 0) { |
|
|
|
//当前信息
|
|
|
|
cJSON_AddItemToObject(dat,"ERR",cJSON_CreateBool(MACHINE_ERR)); |
|
|
|
cJSON_AddItemToObject(dat,"LOCK",cJSON_CreateBool(MACHINE_LOCK)); |
|
|
|
cJSON_AddItemToObject(dat,"Status",cJSON_CreateString(Message)); |
|
|
|
cJSON_AddItemToObject(dat,"Work",cJSON_CreateString(Work)); |
|
|
|
cJSON_AddItemToObject(dat,"ReDye",cJSON_CreateNumber(Redye)); |
|
|
|
cJSON_AddItemToObject(dat,"Process",cJSON_CreateString(Process)); |
|
|
|
cJSON_AddItemToObject(dat,"Step",cJSON_CreateString(Step)); |
|
|
|
cJSON_AddItemToObject(dat,"User",cJSON_CreateBool(MACHINE_USER)); |
|
|
|
cJSON_AddItemToObject(dat,"InfoS",cJSON_CreateNumber(UserInfoStart)); |
|
|
|
cJSON_AddItemToObject(dat,"Info",cJSON_CreateString(Info)); |
|
|
|
cJSON_AddItemToObject(dat,"RUN",cJSON_CreateNumber(RUN)); |
|
|
|
cJSON_AddItemToObject(dat,"STEPID",cJSON_CreateNumber(STEPID)); |
|
|
|
cJSON_AddItemToObject(dat,"CALL",cJSON_CreateBool(MACHINE_CALL)); |
|
|
|
|
|
|
|
cJSON_AddItemToObject(dat,"MST",cJSON_CreateNumber(MST)); |
|
|
|
cJSON_AddItemToObject(dat,"MTT",cJSON_CreateNumber(MTT)); |
|
|
|
cJSON_AddItemToObject(dat,"MTL",cJSON_CreateNumber(MTL)); |
|
|
|
cJSON_AddItemToObject(dat,"MTH",cJSON_CreateNumber(MTH)); |
|
|
|
cJSON_AddItemToObject(dat,"MUT",cJSON_CreateNumber(MUT)); |
|
|
|
cJSON_AddItemToObject(dat,"STTA",cJSON_CreateNumber(STTA)); |
|
|
|
cJSON_AddItemToObject(dat,"STLA",cJSON_CreateNumber(STLA)); |
|
|
|
cJSON_AddItemToObject(dat,"STTB",cJSON_CreateNumber(STTB)); |
|
|
|
cJSON_AddItemToObject(dat,"STLB",cJSON_CreateNumber(STLB)); |
|
|
|
cJSON_AddItemToObject(dat,"STTC",cJSON_CreateNumber(STTC)); |
|
|
|
cJSON_AddItemToObject(dat,"STLC",cJSON_CreateNumber(STLC)); |
|
|
|
} |
|
|
|
else if (strcmp(api, "SC831") == 0) { |
|
|
|
//当前步骤信息
|
|
|
|
cJSON_AddItemToObject(dat,"Work",cJSON_CreateString(Work)); |
|
|
|
cJSON_AddItemToObject(dat,"ReDye",cJSON_CreateNumber(Redye)); |
|
|
|
} |
|
|
|
else if (strcmp(api, "SC832") == 0) { |
|
|
|
//当前细节信息
|
|
|
|
cJSON_AddItemToObject(dat,"Pump",cJSON_CreateNumber(Pump));//泵
|
|
|
|
cJSON_AddItemToObject(dat,"TC",cJSON_CreateNumber(TC));//温度比例
|
|
|
|
cJSON_AddItemToObject(dat,"Fan",cJSON_CreateNumber(Fan));//风机
|
|
|
|
cJSON_AddItemToObject(dat,"Pull",cJSON_CreateNumber(Pull));//提布
|
|
|
|
cJSON_AddItemToObject(dat,"Swing",cJSON_CreateNumber(Swing));//摆布
|
|
|
|
cJSON_AddItemToObject(dat,"STA",cJSON_CreateNumber(STA));//料1
|
|
|
|
cJSON_AddItemToObject(dat,"STB",cJSON_CreateNumber(STB));//料2
|
|
|
|
cJSON_AddItemToObject(dat,"STC",cJSON_CreateNumber(STC));//料3
|
|
|
|
} |
|
|
|
else if (strcmp(api, "SC833") == 0) { |
|
|
|
//当前领料单信息
|
|
|
|
cJSON_AddItemToObject(dat,"Work",cJSON_CreateString(Work)); |
|
|
|
cJSON_AddItemToObject(dat,"ReDye",cJSON_CreateNumber(Redye)); |
|
|
|
} |
|
|
|
else if (strcmp(api, "SC851") == 0) { |
|
|
|
//创建数组
|
|
|
|
cJSON *Dev = cJSON_CreateArray(); |
|
|
|
//
|
|
|
|
for (int i = 0; i < DIO_TABLE_SIZE; i++) { |
|
|
|
cJSON* item = cJSON_CreateObject(); |
|
|
|
} |
|
|
|
else if (strcmp(api, "SC830") == 0) { |
|
|
|
//当前信息
|
|
|
|
cJSON_AddItemToObject(dat,"ERR",cJSON_CreateBool(MACHINE_ERR)); |
|
|
|
cJSON_AddItemToObject(dat,"LOCK",cJSON_CreateBool(MACHINE_LOCK)); |
|
|
|
cJSON_AddItemToObject(dat,"Status",cJSON_CreateString(Message)); |
|
|
|
cJSON_AddItemToObject(dat,"Work",cJSON_CreateString(Work)); |
|
|
|
cJSON_AddItemToObject(dat,"ReDye",cJSON_CreateNumber(Redye)); |
|
|
|
cJSON_AddItemToObject(dat,"Process",cJSON_CreateString(Process)); |
|
|
|
cJSON_AddItemToObject(dat,"Step",cJSON_CreateString(Step)); |
|
|
|
cJSON_AddItemToObject(dat,"User",cJSON_CreateBool(MACHINE_USER)); |
|
|
|
cJSON_AddItemToObject(dat,"InfoS",cJSON_CreateNumber(UserInfoStart)); |
|
|
|
cJSON_AddItemToObject(dat,"Info",cJSON_CreateString(Info)); |
|
|
|
cJSON_AddItemToObject(dat,"RUN",cJSON_CreateNumber(RUN)); |
|
|
|
cJSON_AddItemToObject(dat,"STEPID",cJSON_CreateNumber(STEPID)); |
|
|
|
cJSON_AddItemToObject(dat,"CALL",cJSON_CreateBool(MACHINE_CALL)); |
|
|
|
cJSON_AddItemToObject(dat,"MST",cJSON_CreateNumber(MST)); |
|
|
|
cJSON_AddItemToObject(dat,"MTT",cJSON_CreateNumber(MTT)); |
|
|
|
cJSON_AddItemToObject(dat,"MTL",cJSON_CreateNumber(MTL)); |
|
|
|
cJSON_AddItemToObject(dat,"MTH",cJSON_CreateNumber(MTH)); |
|
|
|
cJSON_AddItemToObject(dat,"MUT",cJSON_CreateNumber(MUT)); |
|
|
|
cJSON_AddItemToObject(dat,"STTA",cJSON_CreateNumber(STTA)); |
|
|
|
cJSON_AddItemToObject(dat,"STLA",cJSON_CreateNumber(STLA)); |
|
|
|
cJSON_AddItemToObject(dat,"STTB",cJSON_CreateNumber(STTB)); |
|
|
|
cJSON_AddItemToObject(dat,"STLB",cJSON_CreateNumber(STLB)); |
|
|
|
cJSON_AddItemToObject(dat,"STTC",cJSON_CreateNumber(STTC)); |
|
|
|
cJSON_AddItemToObject(dat,"STLC",cJSON_CreateNumber(STLC)); |
|
|
|
} |
|
|
|
else if (strcmp(api, "SC831") == 0) |
|
|
|
{//当前步骤信息
|
|
|
|
cJSON_AddItemToObject(dat,"Work",cJSON_CreateString(Work)); |
|
|
|
cJSON_AddItemToObject(dat,"ReDye",cJSON_CreateNumber(Redye)); |
|
|
|
} |
|
|
|
else if (strcmp(api, "SC832") == 0) |
|
|
|
{//当前细节信息
|
|
|
|
cJSON_AddItemToObject(dat,"Pump",cJSON_CreateNumber(Pump));//泵
|
|
|
|
cJSON_AddItemToObject(dat,"TC",cJSON_CreateNumber(TC));//温度比例
|
|
|
|
cJSON_AddItemToObject(dat,"Fan",cJSON_CreateNumber(Fan));//风机
|
|
|
|
cJSON_AddItemToObject(dat,"Pull",cJSON_CreateNumber(Pull));//提布
|
|
|
|
cJSON_AddItemToObject(dat,"Swing",cJSON_CreateNumber(Swing));//摆布
|
|
|
|
cJSON_AddItemToObject(dat,"STA",cJSON_CreateNumber(STA));//料1
|
|
|
|
cJSON_AddItemToObject(dat,"STB",cJSON_CreateNumber(STB));//料2
|
|
|
|
cJSON_AddItemToObject(dat,"STC",cJSON_CreateNumber(STC));//料3
|
|
|
|
} |
|
|
|
else if (strcmp(api, "SC833") == 0) |
|
|
|
{//当前领料单信息
|
|
|
|
cJSON_AddItemToObject(dat,"Work",cJSON_CreateString(Work)); |
|
|
|
cJSON_AddItemToObject(dat,"ReDye",cJSON_CreateNumber(Redye)); |
|
|
|
} |
|
|
|
else if (strcmp(api, "SC851") == 0) |
|
|
|
{//创建数组
|
|
|
|
cJSON *Dev = cJSON_CreateArray(); |
|
|
|
for (int i = 0; i < DIO_TABLE_SIZE; i++) { |
|
|
|
cJSON* item = cJSON_CreateObject(); |
|
|
|
// 添加 IO 编号
|
|
|
|
cJSON_AddItemToObject(item, "P", cJSON_CreateNumber(dio_table[i].pin)); |
|
|
|
cJSON_AddItemToObject(item, "P", cJSON_CreateNumber(dio_table[i].pin)); |
|
|
|
// 添加默认值
|
|
|
|
cJSON_AddItemToObject(item, "D", cJSON_CreateNumber(dio_table[i].current_state)); |
|
|
|
cJSON_AddItemToObject(item, "D", cJSON_CreateNumber(dio_table[i].current_state)); |
|
|
|
// 添加枚举名称(字符串形式)
|
|
|
|
//cJSON_AddStringToObject(item, "str_enum_name", lang_get_str(dio_table[i].name));
|
|
|
|
// 将当前项添加到数组中
|
|
|
|
cJSON_AddItemToArray(Dev, item); |
|
|
|
} |
|
|
|
cJSON_AddItemToObject(dat,"DIO",Dev); |
|
|
|
} |
|
|
|
else if (strcmp(api, "SC852") == 0) { |
|
|
|
//创建数组
|
|
|
|
cJSON *Dev = cJSON_CreateArray(); |
|
|
|
for (int i = 0; i < AIO_TABLE_SIZE; i++) { |
|
|
|
cJSON* item = cJSON_CreateObject(); |
|
|
|
// 添加 IO 编号
|
|
|
|
cJSON_AddNumberToObject(item, "P", aio_table[i].pin); |
|
|
|
// 添加默认值
|
|
|
|
cJSON_AddNumberToObject(item, "A", aio_table[i].current_Value); |
|
|
|
// 将当前项添加到数组中
|
|
|
|
cJSON_AddItemToArray(Dev, item); |
|
|
|
} |
|
|
|
cJSON_AddItemToObject(dat,"A",Dev); |
|
|
|
} |
|
|
|
else if (strcmp(api, "SC853") == 0) { |
|
|
|
//创建数组
|
|
|
|
cJSON *Dev = cJSON_CreateArray(); |
|
|
|
for (int i = 0; i < DATA_TABLE_SIZE; i++) { |
|
|
|
cJSON* item = cJSON_CreateObject(); |
|
|
|
// 添加 IO 编号
|
|
|
|
cJSON_AddNumberToObject(item, "P", data_table[i].pin); |
|
|
|
// 添加默认值
|
|
|
|
cJSON_AddNumberToObject(item, "M", data_table[i].current_data); |
|
|
|
// 将当前项添加到数组中
|
|
|
|
cJSON_AddItemToArray(Dev, item); |
|
|
|
} |
|
|
|
cJSON_AddItemToObject(dat,"M",Dev); |
|
|
|
} |
|
|
|
else if (strcmp(api, "SC854") == 0) { |
|
|
|
printf("Processing:SC854\n"); |
|
|
|
} |
|
|
|
else if (strcmp(api, "SC855") == 0) { |
|
|
|
cJSON_AddItemToArray(Dev, item); |
|
|
|
} |
|
|
|
cJSON_AddItemToObject(dat,"DIO",Dev); |
|
|
|
} |
|
|
|
else if (strcmp(api, "SC852") == 0) |
|
|
|
{//创建数组
|
|
|
|
cJSON *Dev = cJSON_CreateArray(); |
|
|
|
for (int i = 0; i < AIO_TABLE_SIZE; i++) { |
|
|
|
cJSON* item = cJSON_CreateObject(); |
|
|
|
// 添加 IO 编号
|
|
|
|
cJSON_AddNumberToObject(item, "P", aio_table[i].pin); |
|
|
|
// 添加默认值
|
|
|
|
cJSON_AddNumberToObject(item, "A", aio_table[i].current_Value); |
|
|
|
// 将当前项添加到数组中
|
|
|
|
cJSON_AddItemToArray(Dev, item); |
|
|
|
} |
|
|
|
cJSON_AddItemToObject(dat,"A",Dev); |
|
|
|
} |
|
|
|
else if (strcmp(api, "SC853") == 0) |
|
|
|
{//创建数组
|
|
|
|
cJSON *Dev = cJSON_CreateArray(); |
|
|
|
for (int i = 0; i < DATA_TABLE_SIZE; i++) { |
|
|
|
cJSON* item = cJSON_CreateObject(); |
|
|
|
// 添加 IO 编号
|
|
|
|
cJSON_AddNumberToObject(item, "P", data_table[i].pin); |
|
|
|
// 添加默认值
|
|
|
|
cJSON_AddNumberToObject(item, "M", data_table[i].current_data); |
|
|
|
// 将当前项添加到数组中
|
|
|
|
cJSON_AddItemToArray(Dev, item); |
|
|
|
} |
|
|
|
cJSON_AddItemToObject(dat,"M",Dev); |
|
|
|
} |
|
|
|
else if (strcmp(api, "SC854") == 0) { |
|
|
|
|
|
|
|
printf("Processing:SC854\n"); |
|
|
|
|
|
|
|
} |
|
|
|
else if (strcmp(api, "SC855") == 0) { |
|
|
|
printf("Processing:SC855\n"); |
|
|
|
} |
|
|
|
else if (strcmp(api, "SC859") == 0) { |
|
|
|
|
|
|
|
} |
|
|
|
else if (strcmp(api, "SC859") == 0) { |
|
|
|
printf("Processing:SC859\n"); |
|
|
|
} |
|
|
|
else if (strcmp(api, "SC861") == 0) { |
|
|
|
|
|
|
|
} |
|
|
|
else if (strcmp(api, "SC861") == 0) { |
|
|
|
printf("Processing:SC861\n"); |
|
|
|
} |
|
|
|
else if (strcmp(api, "SC862") == 0) { |
|
|
|
|
|
|
|
} |
|
|
|
else if (strcmp(api, "SC862") == 0) { |
|
|
|
printf("Processing:SC862\n"); |
|
|
|
|
|
|
|
} |
|
|
|
else { |
|
|
|
memcpy(DATA_api,"SC999",5); |
|
|
|
} |
|
|
|
|
|
|
|
json_buffer=cJSON_PrintUnformatted(dat); |
|
|
|
cJSON_Delete(root); |
|
|
|
cJSON_Delete(dat); |
|
|
|
} |
|
|
|
|
|
|
|
void proc_thread_entry(void *parameter) |
|
|
|
{ |
|
|
|
struct proc_request *req; |
|
|
|
while (1) |
|
|
|
{ |
|
|
|
// 接收请求指针
|
|
|
|
if (rt_mq_recv(proc_mq, &req, sizeof(req), RT_WAITING_FOREVER) == RT_EOK) |
|
|
|
{ |
|
|
|
if (!req) continue; |
|
|
|
memcpy(DATA_api,req->input,5); |
|
|
|
extract_between(req->input, "[", "]", machine_ID, sizeof(machine_ID)); |
|
|
|
char *p=strstr(req->input,"]"); |
|
|
|
if(!p){cjson_falg=0;} |
|
|
|
else { |
|
|
|
p += strlen("]"); |
|
|
|
} |
|
|
|
//处理指令分析
|
|
|
|
pasre_DAT(DATA_api,p); |
|
|
|
// 回复
|
|
|
|
int16_t total_len = strlen(machine_ID) + strlen(json_buffer) + 8; |
|
|
|
char t_buffer[total_len]; |
|
|
|
snprintf(t_buffer,total_len,"%s[%s]%s",DATA_api,machine_ID,json_buffer); |
|
|
|
req->output_len = rt_snprintf(req->output, sizeof(req->output),t_buffer); |
|
|
|
// 通知 UART 线程可以发送了
|
|
|
|
if (req->sem) |
|
|
|
{ |
|
|
|
rt_sem_release(req->sem); |
|
|
|
} |
|
|
|
} |
|
|
|
else {} |
|
|
|
//printf(dat);
|
|
|
|
json_buffer=cJSON_PrintUnformatted(dat); |
|
|
|
cJSON_Delete(root); |
|
|
|
cJSON_Delete(dat); |
|
|
|
// return json_buffer;
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
int data_comm_init(void) |
|
|
@ -327,7 +326,7 @@ int data_comm_init(void) |
|
|
|
} |
|
|
|
|
|
|
|
rt_thread_t tid = rt_thread_create("data_comm", proc_thread_entry, RT_NULL, |
|
|
|
1024*16, 20, 10); |
|
|
|
1024*5, 20, 10); |
|
|
|
if (tid != RT_NULL) |
|
|
|
{ |
|
|
|
rt_thread_startup(tid); |
|
|
|