表格信息
This commit is contained in:
1 parent
3c27178f57
commit
5f9242f64d
8 files changed
+148
-36
No files matched your search
@@ -30,6 +30,7 @@ struct rt_messagequeue *response_mq; // Proc → UART
|
|||||||
char cjson_falg=0;//是否解析cjson
|
char cjson_falg=0;//是否解析cjson
|
||||||
char *json_buffer=NULL;//
|
char *json_buffer=NULL;//
|
||||||
|
|
||||||
|
char select_data[1024] = {0};
|
||||||
/**
|
/**
|
||||||
* 截取两个指定子串之间的内容
|
* 截取两个指定子串之间的内容
|
||||||
* @param src 源字符串
|
* @param src 源字符串
|
||||||
@@ -377,7 +378,8 @@ void pasre_DAT(const char *api, const char *json_str)
|
|||||||
}
|
}
|
||||||
else if (strcmp(api, "SC822") == 0)
|
else if (strcmp(api, "SC822") == 0)
|
||||||
{
|
{
|
||||||
printf("Processing:SC822\n");
|
db_send_select(DB_CMD_SELECT, "SELECT * FROM WorkOrderSet LIMIT 10;", 500,select_data);
|
||||||
|
cJSON_AddItemToObject(dat,"ERR",cJSON_CreateString(select_data));
|
||||||
}
|
}
|
||||||
else if (strcmp(api, "SC827") == 0)
|
else if (strcmp(api, "SC827") == 0)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -383,7 +383,7 @@ void table_thread_entry(void *parameter)
|
|||||||
{
|
{
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
rt_thread_delay(1000);
|
rt_thread_delay(500);
|
||||||
|
|
||||||
//Ai输入
|
//Ai输入
|
||||||
MTT = get_ai_value(4001)/10.0f;
|
MTT = get_ai_value(4001)/10.0f;
|
||||||
|
|||||||
@@ -20,7 +20,50 @@ typedef struct {
|
|||||||
} IO_State_AIO;
|
} IO_State_AIO;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
int pin; // PLCID
|
char Dyelot[32]; // 单号
|
||||||
|
int ReDye;
|
||||||
|
char *ProgramName; // 工艺
|
||||||
|
int lock;
|
||||||
|
int State;
|
||||||
|
char *Remark; //
|
||||||
|
} WorkOrder_DATA;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
char Dyelot[32]; // 单号
|
||||||
|
int ReDye;
|
||||||
|
char *Mode;
|
||||||
|
char StepID[4];
|
||||||
|
char *StepName;
|
||||||
|
char *ParameterName;
|
||||||
|
double P1;
|
||||||
|
double P2;
|
||||||
|
double P3;
|
||||||
|
double P4;
|
||||||
|
double P5;
|
||||||
|
int P6;
|
||||||
|
int P7;
|
||||||
|
int P8;
|
||||||
|
int P9;
|
||||||
|
int P10;
|
||||||
|
double P1_S1;
|
||||||
|
double P2_S1;
|
||||||
|
double P3_S1;
|
||||||
|
double P4_S1;
|
||||||
|
double P5_S1;
|
||||||
|
double P1_S2;
|
||||||
|
double P2_S2;
|
||||||
|
double P3_S2;
|
||||||
|
double P4_S2;
|
||||||
|
double P5_S2;
|
||||||
|
double P1_S3;
|
||||||
|
double P2_S3;
|
||||||
|
double P3_S3;
|
||||||
|
double P4_S3;
|
||||||
|
double P5_S3;
|
||||||
|
} Step_DATA;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
int pin; // ID
|
||||||
rt_int32_t current_data; // 当前状态
|
rt_int32_t current_data; // 当前状态
|
||||||
str_id_t name; // 名称(可选,用于调试)
|
str_id_t name; // 名称(可选,用于调试)
|
||||||
} IO_State_DATA;
|
} IO_State_DATA;
|
||||||
|
|||||||
@@ -28,8 +28,8 @@ rt_bool_t MACHINE_CALL = 0;
|
|||||||
rt_bool_t MACHINE_USER = 0;
|
rt_bool_t MACHINE_USER = 0;
|
||||||
|
|
||||||
// 字符串变量(RAM 中可修改)
|
// 字符串变量(RAM 中可修改)
|
||||||
char Work[25]="SC----------";
|
char Work[32]="SC----------";
|
||||||
char Dye[25];
|
char Dye[32];
|
||||||
char Process[50];
|
char Process[50];
|
||||||
char Message[40];
|
char Message[40];
|
||||||
char Step[60];
|
char Step[60];
|
||||||
|
|||||||
@@ -29,8 +29,8 @@ extern rt_bool_t MACHINE_CALL;
|
|||||||
extern rt_bool_t MACHINE_USER;
|
extern rt_bool_t MACHINE_USER;
|
||||||
|
|
||||||
// ===== 字符串 =====
|
// ===== 字符串 =====
|
||||||
extern char Work[25];
|
extern char Work[32];
|
||||||
extern char Dye[25];
|
extern char Dye[32];
|
||||||
extern char Process[50];
|
extern char Process[50];
|
||||||
extern char Message[40];
|
extern char Message[40];
|
||||||
extern char Step[60];
|
extern char Step[60];
|
||||||
|
|||||||
@@ -18,6 +18,7 @@
|
|||||||
#define DB_NAME "/sddisk/SC828.db"
|
#define DB_NAME "/sddisk/SC828.db"
|
||||||
int db_HelperInit;
|
int db_HelperInit;
|
||||||
rt_mq_t db_mq = RT_NULL; //
|
rt_mq_t db_mq = RT_NULL; //
|
||||||
|
struct db_command cmd;
|
||||||
|
|
||||||
#define DBG_TAG "dat_sql"
|
#define DBG_TAG "dat_sql"
|
||||||
#define DBG_LVL DBG_LOG
|
#define DBG_LVL DBG_LOG
|
||||||
@@ -96,62 +97,80 @@ static void return_disabled(struct db_command *cmd) {
|
|||||||
* @brief SELECT 查询回调函数
|
* @brief SELECT 查询回调函数
|
||||||
*/
|
*/
|
||||||
static int callback(void *result_str, int argc, char **argv, char **azColName) {
|
static int callback(void *result_str, int argc, char **argv, char **azColName) {
|
||||||
char *str = (char *)result_str;
|
//char *buf = (char *)result_str;
|
||||||
int len = rt_strlen(str);
|
int written = rt_strlen(result_str); // 当前已写入长度(假设 buf 是 \0 结尾的)
|
||||||
for (int i = 0; i < argc; i++) {
|
int remaining = MAX_RESULT_LEN - written - 1; // -1 留给最终 \0
|
||||||
rt_snprintf(str + len, MAX_RESULT_LEN - len, "%s=%s|",
|
|
||||||
azColName[i], argv[i] ? argv[i] : "NULL");
|
if (remaining <= 0) {
|
||||||
len = rt_strlen(str);
|
return 0; // 缓冲区已满,不再写入
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < argc && remaining > 0; i++) {
|
||||||
|
const char *val = argv[i] ? argv[i] : "NULL";
|
||||||
|
// 预估所需长度(保守估计)
|
||||||
|
int needed = rt_strlen(azColName[i]) + rt_strlen(val) + 2; // + "=...\0" 至少 2 字节(= 和 |)
|
||||||
|
|
||||||
|
if (needed > remaining) {
|
||||||
|
break; // 空间不足,停止
|
||||||
|
}
|
||||||
|
|
||||||
|
int n = rt_snprintf(result_str + written, remaining + 1, "%s=%s|", azColName[i], val);
|
||||||
|
if (n < 0 || n > remaining) {
|
||||||
|
break; // 写入失败或超限
|
||||||
|
}
|
||||||
|
|
||||||
|
written += n;
|
||||||
|
remaining -= n;
|
||||||
|
}
|
||||||
|
//buf[MAX_RESULT_LEN - 1] = '\0'; // 强制终止,防止意外
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief 执行具体 SQL 操作
|
* @brief 执行具体 SQL 操作
|
||||||
*/
|
*/
|
||||||
static void handle_db_command(struct db_command *cmd) {
|
static void handle_db_command(struct db_command *cmd_dat) {
|
||||||
char *err_msg = 0;
|
char *err_msg = 0;
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
switch (cmd->type)
|
switch (cmd_dat->type)
|
||||||
{
|
{
|
||||||
case DB_CMD_INSERT:
|
case DB_CMD_INSERT:
|
||||||
case DB_CMD_DELETE:
|
case DB_CMD_DELETE:
|
||||||
case DB_CMD_UPDATE:
|
case DB_CMD_UPDATE:
|
||||||
case DB_CMD_EXEC:
|
case DB_CMD_EXEC:
|
||||||
rc = sqlite3_exec(g_db, cmd->sql, 0, 0, &err_msg);
|
rc = sqlite3_exec(g_db, cmd_dat->sql, 0, 0, &err_msg);
|
||||||
if (rc != SQLITE_OK) {
|
if (rc != SQLITE_OK) {
|
||||||
cmd->result_code = rc;
|
cmd_dat->result_code = rc;
|
||||||
rt_strncpy(cmd->result, err_msg, MAX_RESULT_LEN - 1);
|
rt_strncpy(cmd_dat->result, err_msg, MAX_RESULT_LEN - 1);
|
||||||
sqlite3_free(err_msg);
|
sqlite3_free(err_msg);
|
||||||
} else {
|
} else {
|
||||||
cmd->result_code = 0;
|
cmd_dat->result_code = 0;
|
||||||
rt_strncpy(cmd->result, "OK", MAX_RESULT_LEN - 1);
|
rt_strncpy(cmd_dat->result, "OK", MAX_RESULT_LEN - 1);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DB_CMD_SELECT:
|
case DB_CMD_SELECT:
|
||||||
cmd->result[0] = '\0';
|
cmd_dat->result[0] = '\0';
|
||||||
rc = sqlite3_exec(g_db, cmd->sql, callback, cmd->result, &err_msg);
|
rc = sqlite3_exec(g_db, cmd_dat->sql, callback, cmd_dat->result, &err_msg);
|
||||||
if (rc != SQLITE_OK) {
|
if (rc != SQLITE_OK) {
|
||||||
cmd->result_code = rc;
|
cmd_dat->result_code = rc;
|
||||||
rt_strncpy(cmd->result, err_msg, MAX_RESULT_LEN - 1);
|
rt_strncpy(cmd_dat->result, err_msg, MAX_RESULT_LEN - 1);
|
||||||
sqlite3_free(err_msg);
|
sqlite3_free(err_msg);
|
||||||
} else {
|
} else {
|
||||||
cmd->result_code = 0;
|
cmd_dat->result_code = 0;
|
||||||
if (cmd->result[0] == '\0')
|
if (cmd_dat->result[0] == '\0')rt_strncpy(cmd_dat->result, "No data", MAX_RESULT_LEN - 1);
|
||||||
rt_strncpy(cmd->result, "No data", MAX_RESULT_LEN - 1);
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DB_CMD_EXIT:
|
case DB_CMD_EXIT:
|
||||||
rt_strncpy(cmd->result, "Exit", MAX_RESULT_LEN - 1);
|
rt_strncpy(cmd_dat->result, "Exit", MAX_RESULT_LEN - 1);
|
||||||
cmd->result_code = 0;
|
cmd_dat->result_code = 0;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
cmd->result_code = -1;
|
cmd_dat->result_code = -1;
|
||||||
rt_strncpy(cmd->result, "Invalid command", MAX_RESULT_LEN - 1);
|
rt_strncpy(cmd_dat->result, "Invalid command", MAX_RESULT_LEN - 1);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -257,7 +276,7 @@ void db_sqlite_init_full(void)
|
|||||||
* @brief 数据库处理线程入口函数
|
* @brief 数据库处理线程入口函数
|
||||||
*/
|
*/
|
||||||
static void db_sqlite(void *parameter) {
|
static void db_sqlite(void *parameter) {
|
||||||
struct db_command cmd;
|
// struct db_command cmd;
|
||||||
rt_tick_t max_wait_ticks = rt_tick_from_millisecond(DB_MAX_WAITING_MS);
|
rt_tick_t max_wait_ticks = rt_tick_from_millisecond(DB_MAX_WAITING_MS);
|
||||||
|
|
||||||
// 检查并初始化数据库文件
|
// 检查并初始化数据库文件
|
||||||
@@ -357,9 +376,9 @@ static void db_sqlite(void *parameter) {
|
|||||||
rt_mutex_release(state_mutex);
|
rt_mutex_release(state_mutex);
|
||||||
//执行命令
|
//执行命令
|
||||||
handle_db_command(&cmd);
|
handle_db_command(&cmd);
|
||||||
|
|
||||||
//返回结果
|
//返回结果
|
||||||
if (cmd.reply_sem != RT_NULL) {
|
if (cmd.reply_sem != RT_NULL)
|
||||||
|
{
|
||||||
rt_sem_release(cmd.reply_sem);
|
rt_sem_release(cmd.reply_sem);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -402,7 +421,7 @@ rt_err_t db_send_command(enum db_cmd_type type, const char* sql, rt_int32_t time
|
|||||||
return -RT_EINVAL;
|
return -RT_EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct db_command cmd;
|
//struct db_command cmd;
|
||||||
rt_sem_t sem = rt_sem_create("db_rep", 0, RT_IPC_FLAG_FIFO);
|
rt_sem_t sem = rt_sem_create("db_rep", 0, RT_IPC_FLAG_FIFO);
|
||||||
if (sem == RT_NULL) {
|
if (sem == RT_NULL) {
|
||||||
return -RT_ENOMEM;
|
return -RT_ENOMEM;
|
||||||
@@ -437,6 +456,53 @@ rt_err_t db_send_command(enum db_cmd_type type, const char* sql, rt_int32_t time
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
rt_err_t db_send_select(enum db_cmd_type type, const char* sql, rt_int32_t timeout_ms, char *result_out)
|
||||||
|
{
|
||||||
|
if (!sql || !db_mq) {
|
||||||
|
return -RT_EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
// struct db_command cmd;
|
||||||
|
rt_sem_t sem = rt_sem_create("db_rep", 0, RT_IPC_FLAG_FIFO);
|
||||||
|
if (sem == RT_NULL) {
|
||||||
|
return -RT_ENOMEM;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 初始化命令结构体
|
||||||
|
rt_memset(&cmd, 0, sizeof(cmd));
|
||||||
|
cmd.type = type;
|
||||||
|
rt_strncpy(cmd.sql, sql, MAX_SQL_LEN - 1);
|
||||||
|
cmd.reply_sem = sem;
|
||||||
|
cmd.send_tick = rt_tick_get();
|
||||||
|
|
||||||
|
// 发送命令到数据库线程队列
|
||||||
|
if (rt_mq_send(db_mq, &cmd, sizeof(cmd)) != RT_EOK) {
|
||||||
|
rt_sem_delete(sem);
|
||||||
|
return -RT_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 计算等待 tick
|
||||||
|
rt_int32_t wait_ticks;
|
||||||
|
if (timeout_ms == RT_WAITING_FOREVER) {
|
||||||
|
wait_ticks = RT_WAITING_FOREVER;
|
||||||
|
} else if (timeout_ms <= 0) {
|
||||||
|
wait_ticks = 0;
|
||||||
|
} else {
|
||||||
|
wait_ticks = rt_tick_from_millisecond(timeout_ms);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 等待数据库线程处理完成
|
||||||
|
rt_err_t result = rt_sem_take(sem, wait_ticks);
|
||||||
|
|
||||||
|
// 如果调用者提供了 result_out 缓冲区,且是 SELECT 或需要结果,则拷贝
|
||||||
|
if (result == RT_EOK) {
|
||||||
|
rt_strncpy(result_out, cmd.result, MAX_RESULT_LEN - 1);
|
||||||
|
result_out[MAX_RESULT_LEN - 1] = '\0';
|
||||||
|
}
|
||||||
|
rt_sem_delete(sem);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
extern struct rt_memheap sram_DTCMRAM;
|
extern struct rt_memheap sram_DTCMRAM;
|
||||||
static struct rt_thread dat_sqlite_thread;
|
static struct rt_thread dat_sqlite_thread;
|
||||||
static void *dat_sqlite_stack __attribute__((aligned(4)))= RT_NULL ;
|
static void *dat_sqlite_stack __attribute__((aligned(4)))= RT_NULL ;
|
||||||
|
|||||||
@@ -116,6 +116,7 @@ void close_db_immediately(void);
|
|||||||
* @return RT_EOK 成功,RT_ETIMEOUT 超时,RT_ERROR 失败
|
* @return RT_EOK 成功,RT_ETIMEOUT 超时,RT_ERROR 失败
|
||||||
*/
|
*/
|
||||||
rt_err_t db_send_command(enum db_cmd_type type, const char* sql, rt_int32_t timeout_ms);
|
rt_err_t db_send_command(enum db_cmd_type type, const char* sql, rt_int32_t timeout_ms);
|
||||||
|
rt_err_t db_send_select(enum db_cmd_type type, const char* sql, rt_int32_t timeout_ms, char *result_out);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -458,7 +458,7 @@ int ltdc_init(void)
|
|||||||
lcdltdc.pwidth = 1024; lcdltdc.pheight = 600;
|
lcdltdc.pwidth = 1024; lcdltdc.pheight = 600;
|
||||||
lcdltdc.hsw = 20; lcdltdc.hbp = 160; lcdltdc.hfp = 160;
|
lcdltdc.hsw = 20; lcdltdc.hbp = 160; lcdltdc.hfp = 160;
|
||||||
lcdltdc.vsw = 3; lcdltdc.vbp = 23; lcdltdc.vfp = 12;
|
lcdltdc.vsw = 3; lcdltdc.vbp = 23; lcdltdc.vfp = 12;
|
||||||
ltdc_clk_set(128, 32, 8);
|
ltdc_clk_set(128, 32, 7);
|
||||||
}
|
}
|
||||||
else if (lcdid == 0X7018)
|
else if (lcdid == 0X7018)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in new issue
Block a user