数据库操作(810,811)指令,数据库读写实现

This commit is contained in:
sc committed 2025-10-26 01:34:18 +08:00
1 parent 1096dbb42f
commit 64d820b24c
8 files changed
+640 -350

No files matched your search

+101 -51
View File
@@ -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);
+27 -27
View File
@@ -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) {
+27 -27
View File
@@ -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);