数据库操作(810,811)指令,数据库读写实现
This commit is contained in:
1 parent
1096dbb42f
commit
64d820b24c
8 files changed
+640
-350
No files matched your search
+101
-51
@@ -17,6 +17,7 @@
|
||||
#include "language.h"
|
||||
#include "Variable.h"
|
||||
#include "SC828_DATA_table.h"
|
||||
#include "DB_SQLite.h"
|
||||
|
||||
rt_mq_t proc_mq;
|
||||
|
||||
@@ -59,15 +60,29 @@ int extract_between(const char *src, const char *start, const char *end, char *b
|
||||
} \
|
||||
} 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); \
|
||||
#define GET_FLOAT_VAR(var, obj, key, default_val)do { \
|
||||
cJSON *_item = cJSON_GetObjectItem((obj), (key)); \
|
||||
(var) = (_item && 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)
|
||||
#define GET_INT_FROM_ANY(var, obj, key, default_val)do { \
|
||||
cJSON *_item = cJSON_GetObjectItem((obj), (key)); \
|
||||
if (_item) { \
|
||||
if (cJSON_IsNumber(_item)) { \
|
||||
(var) = (int)(_item->valueint); \
|
||||
} else if (cJSON_IsString(_item) && _item->valuestring) { \
|
||||
(var) = atoi(_item->valuestring); \
|
||||
} else { \
|
||||
(var) = (default_val); \
|
||||
} \
|
||||
} else { \
|
||||
(var) = (default_val); \
|
||||
} \
|
||||
} while(0)
|
||||
|
||||
// ===== cJSON分析 =====//
|
||||
void pasre_DAT(const char *api, const char *json_str)
|
||||
@@ -102,46 +117,76 @@ void pasre_DAT(const char *api, const char *json_str)
|
||||
}
|
||||
else if (strcmp(api, "SC810") == 0)
|
||||
{
|
||||
char STime[25];
|
||||
char pTime[10];
|
||||
// 字符串赋值
|
||||
GET_STRING(Work, root, "Work", sizeof(Work));
|
||||
GET_STRING(Dye, root, "Dye", sizeof(Dye));
|
||||
GET_STRING(STime, root, "STime", sizeof(STime));
|
||||
GET_STRING(pTime, root, "Time", sizeof(pTime));
|
||||
|
||||
// 定义足够大的缓冲区
|
||||
char sql[512] = {0}; // 初始化为 0
|
||||
// 安全格式化
|
||||
rt_snprintf(sql, sizeof(sql),
|
||||
"INSERT INTO WorkorderSteps(WorkOrder,DYELOT,ReDye,StartTime,Time)"
|
||||
"VALUES('%s','%s',0,%s,%s,)",
|
||||
Work, Dye, STime,pTime);
|
||||
if( db_send_command(DB_CMD_EXEC, sql, 500)==RT_EOK) //
|
||||
{
|
||||
cJSON_AddItemToObject(dat,"Work",cJSON_CreateString(Work));
|
||||
cJSON_AddItemToObject(dat,"ReDye",cJSON_CreateNumber(Redye));
|
||||
}
|
||||
}
|
||||
else if (strcmp(api, "SC811") == 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);
|
||||
// 字符串赋值
|
||||
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_INT_FROM_ANY(StepN, root, "Step", 0);
|
||||
GET_INT_FROM_ANY(P1, root, "P1", 0);
|
||||
GET_INT_FROM_ANY(P2, root, "P2", 0);
|
||||
GET_INT_FROM_ANY(P3, root, "P3", 0);
|
||||
GET_INT_FROM_ANY(P4, root, "P4", 0);
|
||||
GET_INT_FROM_ANY(P5, root, "P5", 0);
|
||||
GET_INT_FROM_ANY(P1S1, root, "P1S1",0);
|
||||
GET_INT_FROM_ANY(P2S1, root, "P2S1",0);
|
||||
GET_INT_FROM_ANY(P3S1, root, "P3S1",0);
|
||||
GET_INT_FROM_ANY(P4S1, root, "P4S1",0);
|
||||
GET_INT_FROM_ANY(P5S1, root, "P5S1",0);
|
||||
//GET_INT_FROM_ANY(P1S2, root, "P1S2",0);
|
||||
//GET_INT_FROM_ANY(P2S2, root, "P2S2",0);
|
||||
//GET_INT_FROM_ANY(P3S2, root, "P3S2",0);
|
||||
//GET_INT_FROM_ANY(P4S2, root, "P4S2",0);
|
||||
//GET_INT_FROM_ANY(P5S2, root, "P5S2",0);
|
||||
//GET_INT_FROM_ANY(P1S3, root, "P1S3",0);
|
||||
//GET_INT_FROM_ANY(P2S3, root, "P2S3",0);
|
||||
//GET_INT_FROM_ANY(P3S3, root, "P3S3",0);
|
||||
//GET_INT_FROM_ANY(P4S3, root, "P4S3",0);
|
||||
//GET_INT_FROM_ANY(P5S3, root, "P5S3",0);
|
||||
|
||||
cJSON_AddItemToObject(dat,"Work",cJSON_CreateString(Work));
|
||||
cJSON_AddItemToObject(dat,"ReDye",cJSON_CreateNumber(Redye));
|
||||
cJSON_AddItemToObject(dat,"StepN",cJSON_CreateNumber(StepN));
|
||||
// 定义足够大的缓冲区
|
||||
char sql[512] = {0}; // 初始化为 0
|
||||
|
||||
// 安全格式化
|
||||
rt_snprintf(sql, sizeof(sql),
|
||||
"INSERT INTO WorkorderSteps(WorkOrder,DYELOT,ReDye,Step,StepID,P1,P2,P3,P4,P5,StepID_S1,P1_S1,P2_S1,P3_S1,P4_S1,P5_S1)"
|
||||
"VALUES('%s','%s',0,%d,%s,%d,%d,%d,%d,%d,'%s',%d,%d,%d,%d,%d)",
|
||||
Work, Dye, StepN,StepID,P1, P2, P3, P4, P5,SIDS1,P1S1,P2S1,P3S1,P4S1,P5S1 );
|
||||
if( db_send_command(DB_CMD_EXEC, sql, 500)==RT_EOK) //
|
||||
{
|
||||
cJSON_AddItemToObject(dat,"Work",cJSON_CreateString(Work));
|
||||
cJSON_AddItemToObject(dat,"ReDye",cJSON_CreateNumber(Redye));
|
||||
cJSON_AddItemToObject(dat,"Step",cJSON_CreateNumber(StepN));
|
||||
}
|
||||
}
|
||||
else if (strcmp(api, "SC812") == 0) {
|
||||
printf("Processing:SC812\n");
|
||||
//工单设定
|
||||
}
|
||||
else if (strcmp(api, "SC813") == 0) {
|
||||
printf("Processing:SC813\n");
|
||||
@@ -296,23 +341,28 @@ void proc_thread_entry(void *parameter)
|
||||
{
|
||||
if (!req) continue;
|
||||
memcpy(DATA_api,req->input,5);
|
||||
extract_between(req->input, "[", "]", machine_ID, sizeof(machine_ID));
|
||||
extract_between(req->input, "[", "]", DATA_machins, sizeof(DATA_machins));
|
||||
|
||||
if(strcmp(DATA_machins,machine_ID)==0)
|
||||
{
|
||||
char *p=strstr(req->input,"]");
|
||||
if(!p){cjson_falg=0;}
|
||||
else {
|
||||
p += strlen("]");
|
||||
}
|
||||
|
||||
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\n",DATA_api,machine_ID,json_buffer);
|
||||
req->output_len = rt_snprintf(req->output, sizeof(req->output),t_buffer);
|
||||
}else{
|
||||
req->output_len=0;
|
||||
}
|
||||
|
||||
//处理指令分析
|
||||
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\n",DATA_api,machine_ID,json_buffer);
|
||||
req->output_len = rt_snprintf(req->output, sizeof(req->output),t_buffer);
|
||||
|
||||
// 通知 UART 线程可以发送了
|
||||
if (req->sem)
|
||||
{
|
||||
@@ -332,7 +382,7 @@ int data_comm_init(void)
|
||||
}
|
||||
|
||||
rt_thread_t tid = rt_thread_create("data_comm", proc_thread_entry, RT_NULL,
|
||||
1024*5, 20, 10);
|
||||
1024*4, 20, 10);
|
||||
if (tid != RT_NULL)
|
||||
{
|
||||
rt_thread_startup(tid);
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
|
||||
// 动态数据缓冲区(初始化为 NULL,后续分配)
|
||||
char *DATA_dat;
|
||||
char *DATA_machins;
|
||||
char DATA_machins[3];
|
||||
char DATA_api[5];
|
||||
char *machine_name = "Q109";
|
||||
char machine_ID[3] = "23";
|
||||
@@ -17,8 +17,8 @@ char MACHINE_CALL = 0;
|
||||
char MACHINE_USER = 0;
|
||||
|
||||
// 字符串变量(RAM 中可修改)
|
||||
char Work[15];
|
||||
char Dye[15];
|
||||
char Work[25];
|
||||
char Dye[25];
|
||||
char Process[50];
|
||||
char Message[40];
|
||||
char Step[60];
|
||||
@@ -61,32 +61,32 @@ unsigned int P9 = 0;
|
||||
unsigned int P10 = 0;
|
||||
|
||||
// 步骤功能参数
|
||||
float P1 = 0.0f;
|
||||
float P2 = 0.0f;
|
||||
float P3 = 0.0f;
|
||||
float P4 = 0.0f;
|
||||
float P5 = 0.0f;
|
||||
float P1S1 = 0.0f;
|
||||
float P2S1 = 0.0f;
|
||||
float P3S1 = 0.0f;
|
||||
float P4S1 = 0.0f;
|
||||
float P5S1 = 0.0f;
|
||||
float P1S2 = 0.0f;
|
||||
float P2S2 = 0.0f;
|
||||
float P3S2 = 0.0f;
|
||||
float P4S2 = 0.0f;
|
||||
float P5S2 = 0.0f;
|
||||
float P1S3 = 0.0f;
|
||||
float P2S3 = 0.0f;
|
||||
float P3S3 = 0.0f;
|
||||
float P4S3 = 0.0f;
|
||||
float P5S3 = 0.0f;
|
||||
unsigned int P1 = 0;
|
||||
unsigned int P2 =0;
|
||||
unsigned int P3 =0;
|
||||
unsigned int P4 =0;
|
||||
unsigned int P5 =0;
|
||||
unsigned int P1S1 =0;
|
||||
unsigned int P2S1 =0;
|
||||
unsigned int P3S1 =0;
|
||||
unsigned int P4S1 =0;
|
||||
unsigned int P5S1 =0;
|
||||
unsigned int P1S2 =0;
|
||||
unsigned int P2S2 =0;
|
||||
unsigned int P3S2 =0;
|
||||
unsigned int P4S2 =0;
|
||||
unsigned int P5S2 =0;
|
||||
unsigned int P1S3 =0;
|
||||
unsigned int P2S3 =0;
|
||||
unsigned int P3S3 =0;
|
||||
unsigned int P4S3 =0;
|
||||
unsigned int P5S3 =0;
|
||||
|
||||
// 步骤编号字符串
|
||||
char StepID[3];
|
||||
char SIDS1[3];
|
||||
char SIDS2[3];
|
||||
char SIDS3[3];
|
||||
char StepID[4];
|
||||
char SIDS1[4];
|
||||
char SIDS2[4];
|
||||
char SIDS3[4];
|
||||
|
||||
// ===== 初始化函数 =====
|
||||
void init_global_vars(void) {
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
|
||||
// ===== 字符串变量 =====
|
||||
extern char *DATA_dat;
|
||||
extern char *DATA_machins;
|
||||
extern char DATA_machins[3];
|
||||
extern char DATA_api[5];
|
||||
extern char *machine_name;
|
||||
extern char machine_ID[3];
|
||||
@@ -17,8 +17,8 @@ extern char MACHINE_CALL;
|
||||
extern char MACHINE_USER;
|
||||
|
||||
// ===== 字符串 =====
|
||||
extern char Work[15];
|
||||
extern char Dye[15];
|
||||
extern char Work[25];
|
||||
extern char Dye[25];
|
||||
extern char Process[50];
|
||||
extern char Message[40];
|
||||
extern char Step[60];
|
||||
@@ -57,31 +57,31 @@ extern float STTB;
|
||||
extern float STLB;
|
||||
extern float STTC;
|
||||
extern float STLC;
|
||||
extern float P1;
|
||||
extern float P2;
|
||||
extern float P3;
|
||||
extern float P4;
|
||||
extern float P5;
|
||||
extern float P1S1;
|
||||
extern float P2S1;
|
||||
extern float P3S1;
|
||||
extern float P4S1;
|
||||
extern float P5S1;
|
||||
extern float P1S2;
|
||||
extern float P2S2;
|
||||
extern float P3S2;
|
||||
extern float P4S2;
|
||||
extern float P5S2;
|
||||
extern float P1S3;
|
||||
extern float P2S3;
|
||||
extern float P3S3;
|
||||
extern float P4S3;
|
||||
extern float P5S3;
|
||||
extern unsigned int P1;
|
||||
extern unsigned int P2;
|
||||
extern unsigned int P3;
|
||||
extern unsigned int P4;
|
||||
extern unsigned int P5;
|
||||
extern unsigned int P1S1;
|
||||
extern unsigned int P2S1;
|
||||
extern unsigned int P3S1;
|
||||
extern unsigned int P4S1;
|
||||
extern unsigned int P5S1;
|
||||
extern unsigned int P1S2;
|
||||
extern unsigned int P2S2;
|
||||
extern unsigned int P3S2;
|
||||
extern unsigned int P4S2;
|
||||
extern unsigned int P5S2;
|
||||
extern unsigned int P1S3;
|
||||
extern unsigned int P2S3;
|
||||
extern unsigned int P3S3;
|
||||
extern unsigned int P4S3;
|
||||
extern unsigned int P5S3;
|
||||
|
||||
extern char StepID[3];
|
||||
extern char SIDS1[3];
|
||||
extern char SIDS2[3];
|
||||
extern char SIDS3[3];
|
||||
extern char StepID[4];
|
||||
extern char SIDS1[4];
|
||||
extern char SIDS2[4];
|
||||
extern char SIDS3[4];
|
||||
|
||||
void init_global_vars(void);
|
||||
|
||||
|
||||
Reference in new issue
Block a user