添加语言部分,添加数据解析部分,添加io状态表部分

This commit is contained in:
sc committed 2025-10-21 17:07:54 +08:00
1 parent 9f9c96d650
commit 1402105850
10 files changed
+1499 -22

No files matched your search

+281 -3
View File
@@ -9,7 +9,15 @@
*/
/* DATA_comm.c */
#include <rtthread.h>
#include "cjson.h"
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "string.h"
#include "data_comm.h"
#include "language.h"
#include "Variable.h"
#include "SC828_DATA_table.h"
rt_mq_t proc_mq;
@@ -25,7 +33,13 @@ void proc_thread_entry(void *parameter)
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);
@@ -39,6 +53,270 @@ void proc_thread_entry(void *parameter)
}
}
// 变量
char *json_buffer=NULL;
uint8_t cjson_falg=0;//是否解析cjson
/**
* 截取两个指定子串之间的内容
* @param src 源字符串
* @param start 起始子串
* @param end 结束子串
* @param buf 目标缓冲区
* @param buf_len 缓冲区大小
* @return 成功返回 0,失败返回 -1
*/
int extract_between(const char *src, const char *start, const char *end, char *buf, size_t buf_len)
{
const char *p1, *p2;
size_t len;
p1 = strstr(src, start);
if (!p1) return -1;
p1 += strlen(start); // 跳过起始子串
p2 = strstr(p1, end);
if (!p2) return -1;
len = p2 - p1;
if (len >= buf_len) len = buf_len - 1;
memcpy(buf, p1, len);
buf[len] = '\0';
return 0;
}
// 提取字符串并安全拷贝
#define GET_STRING(dst, obj, key, size) do { \
cJSON* _item = cJSON_GetObjectItem(obj, key); \
if (cJSON_IsString(_item) && _item->valuestring != NULL) { \
strncpy(dst, _item->valuestring, (size) - 1); \
(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分析 =====
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);
json_buffer=NULL;
}
if(strlen(json_str)>4){
cjson_falg=1;
//判断json解析是否成功
if(!root)
{
printf("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) {
printf("Processing:SC812\n");
}
else if (strcmp(api, "SC813") == 0) {
printf("Processing:SC813\n");
}
else if (strcmp(api, "SC820") == 0) {
printf("Processing:SC820\n");
}
else if (strcmp(api, "SC821") == 0) {
printf("Processing:SC821\n");
}
else if (strcmp(api, "SC822") == 0) {
printf("Processing:SC822\n");
}
else if (strcmp(api, "SC827") == 0) {
printf("Processing:SC827\n");
}
else if (strcmp(api, "SC828") == 0) {
printf("Processing:SC828\n");
}
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();
// 添加 IO 编号
cJSON_AddItemToObject(item, "P", cJSON_CreateNumber(dio_table[i].pin));
// 添加默认值
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) {
printf("Processing:SC855\n");
}
else if (strcmp(api, "SC859") == 0) {
printf("Processing:SC859\n");
}
else if (strcmp(api, "SC861") == 0) {
printf("Processing:SC861\n");
}
else if (strcmp(api, "SC862") == 0) {
printf("Processing:SC862\n");
}
else {}
//printf(dat);
json_buffer=cJSON_PrintUnformatted(dat);
cJSON_Delete(root);
cJSON_Delete(dat);
// return json_buffer;
}
int data_comm_init(void)
{
proc_mq = rt_mq_create("proc_mq", sizeof(struct proc_request*), 5, RT_IPC_FLAG_FIFO);
@@ -48,8 +326,8 @@ int data_comm_init(void)
return -1;
}
rt_thread_t tid = rt_thread_create("proc", proc_thread_entry, RT_NULL,
2048, 20, 10);
rt_thread_t tid = rt_thread_create("data_comm", proc_thread_entry, RT_NULL,
1024*16, 20, 10);
if (tid != RT_NULL)
{
rt_thread_startup(tid);
+35 -19
View File
@@ -19,7 +19,7 @@
static rt_device_t serial;
// DMA 接收缓冲区
static rt_uint8_t dma_rx_buffer[DMA_RX_BUF_SIZE];
//static rt_uint8_t dma_rx_buffer[DMA_RX_BUF_SIZE];
// 环形缓冲区(暂存未完整报文)
static struct rt_ringbuffer rx_rb;
@@ -74,9 +74,15 @@ void uart_thread_entry(void *parameter)
{
// 处理接收到的数据(提取完整行)
while ((len = get_line(input, sizeof(input))) > 0)
{
rt_kprintf("Received: %.*s\n", len, input);
{ // 调试:打印每个字节
/* rt_kprintf("Len=%d, Data: ", len);
for (int i = 0; i < len; i++) {
rt_kprintf("[%02X '%c'] ", input[i],
(input[i] >= 32 && input[i] < 127) ? input[i] : '.');
}
rt_kprintf("\n");
rt_kprintf("Received: [%.*s]\n", len, input);*/
// 动态分配请求结构体(见之前完整代码)
struct proc_request *req = rt_malloc(sizeof(struct proc_request));
if (!req) continue;
@@ -112,33 +118,43 @@ void uart_thread_entry(void *parameter)
// DMA 接收回调
static rt_err_t uart_rx_ind(rt_device_t dev, rt_size_t size)
{
rt_ringbuffer_put(&rx_rb, (const rt_uint8_t*)dma_rx_buffer, size);
rt_sem_release(&rx_sem); // 通知线程处理
return RT_EOK;
rt_uint8_t temp[64];
rt_size_t read_size;
// 从设备读取数据(驱动内部有 DMA buffer)
while (size > 0)
{
read_size = rt_device_read(dev, 0, temp, (size > 64) ? 64 : size);
if (read_size > 0) {
rt_ringbuffer_put(&rx_rb, temp, read_size);
// 调试:打印实际读到的数据
/* for (int i = 0; i < read_size; i++) {
rt_kprintf("RX: 0x%02X '%c'\n", temp[i],
(temp[i] >= 32 && temp[i] < 127) ? temp[i] : '.');
}*/
}
size -= read_size;
}
rt_sem_release(&rx_sem);
return RT_EOK;
}
// 从环形缓冲区提取一行
static int get_line(char *buf, int maxlen)
{
int i = 0;
char ch;
while (rt_ringbuffer_getchar(&rx_rb, &ch) == 1)
{
if (ch == '\n' || ch == '\r') {
if (i > 0) break;
continue;
int len = rt_ringbuffer_get(&rx_rb, (rt_uint8_t*)buf, maxlen - 1);
if (len > 0) {
buf[len] = '\0';
return len;
}
if (i < maxlen - 1) buf[i++] = ch;
}
buf[i] = '\0';
return i > 0 ? i : 0;
return 0;
}
// 启动 UART 线程
int start_uart_thread(void)
{
rt_thread_t tid = rt_thread_create("uart_rx", uart_thread_entry, RT_NULL,
rt_thread_t tid = rt_thread_create("data_uart", uart_thread_entry, RT_NULL,
4096, // 栈大小:4KB
25, // 优先级
10); // 时间片
+231
View File
@@ -0,0 +1,231 @@
#include "SC828_DATA_table.h"
// 系统数据状态表(表格)
IO_State_DATA data_table[] = {
{1001, 0, STR_COMM_COUNTER},
{1002, 0, STR_COMM_FAULT_COUNTER},
{1003, 0, STR_CYCLE_TEMP_RISE_SET},
{1004, 0, STR_TEMP_CONTROL_RATIO},
{1005, 0, STR_CALCULATED_TEMP},
{1006, 0, STR_FLOW_COUNTER},
{1007, 0, STR_GLOBAL_FLOW_COUNTER},
{1008, 0, STR_NOZZLE_SETTING},
{1009, 0, STR_MAIN_PUMP_SPEED_SET},
{1010, 0, STR_FAN_SPEED_SET},
{1011, 0, STR_TARGET_PH_SET},
{1012, 0, STR_PH_DEVICE_STATUS}
};
// DIO状态表(表格)
IO_State_DIO dio_table[] = {
{2001, 0, STR_EMERGENCY_STOP},
{2002, 0, STR_TEMP_LOCK},
{2003, 0, STR_PRESSURE_LOCK},
{2004, 0, STR_CALL_CONFIRM},
{2005, 0, STR_MANUAL},
{2006, 0, STR_FAN_START},
{2007, 0, STR_FAN_FAULT},
{2008, 0, STR_MAIN_PUMP_FAULT},
{2009, 0, STR_ROLL_RESET},
{2010, 0, STR_FABRIC_FAULT},
{2011, 0, STR_ELEC_FAULT},
{2012, 0, STR_MATERIAL_PUMP1},
{2013, 0, STR_MATERIAL_PUMP2},
{2014, 0, STR_MATERIAL_PUMP3},
{2015, 0, STR_MANUAL1},
{2016, 0, STR_COIL_CAR1},
{2017, 0, STR_FABRIC_HEAD1},
{2018, 0, STR_ROLL_FWD1},
{2019, 0, STR_ROLL_REV1},
{2020, 0, STR_ROLL_OVERLOAD1},
{2021, 0, STR_BLOCK_FABRIC1},
{2022, 0, STR_MATERIAL1_HIGH},
{2023, 0, STR_MATERIAL1_LOW},
{2024, 0, STR_MATERIAL1_IN},
{2025, 0, STR_MATERIAL1_OUT},
{2026, 0, STR_MATERIAL1_RECIRC},
{2027, 0, STR_MATERIAL1_BOTTOM},
{2028, 0, STR_MATERIAL1_FILL},
{2029, 0, STR_MATERIAL1_HEAT},
{2030, 0, STR_MATERIAL2_HIGH},
{2031, 0, STR_MATERIAL2_LOW},
{2032, 0, STR_MATERIAL2_IN},
{2033, 0, STR_MATERIAL2_OUT},
{2034, 0, STR_MATERIAL2_RECIRC},
{2035, 0, STR_MATERIAL2_BOTTOM},
{2036, 0, STR_MATERIAL2_FILL},
{2037, 0, STR_MATERIAL2_HEAT},
{2038, 0, STR_MATERIAL2_STIR},
{2039, 0, STR_MANUAL2},
{2040, 0, STR_COIL_CAR2},
{2041, 0, STR_FABRIC_HEAD2},
{2042, 0, STR_ROLL_FWD2},
{2043, 0, STR_ROLL_REV2},
{2044, 0, STR_ROLL_OVERLOAD2},
{2045, 0, STR_BLOCK_FABRIC2},
{2046, 0, STR_MANUAL3},
{2047, 0, STR_COIL_CAR3},
{2048, 0, STR_FABRIC_HEAD3},
{2049, 0, STR_ROLL_FWD3},
{2050, 0, STR_ROLL_REV3},
{2051, 0, STR_ROLL_OVERLOAD3},
{2052, 0, STR_BLOCK_FABRIC3},
{2053, 0, STR_MANUAL4},
{2054, 0, STR_COIL_CAR4},
{2055, 0, STR_FABRIC_HEAD4},
{2056, 0, STR_ROLL_FWD4},
{2057, 0, STR_ROLL_REV4},
{2058, 0, STR_ROLL_OVERLOAD4},
{2059, 0, STR_BLOCK_FABRIC4},
{2060, 0, STR_MANUAL5},
{2061, 0, STR_COIL_CAR5},
{2062, 0, STR_FABRIC_HEAD5},
{2063, 0, STR_ROLL_FWD5},
{2064, 0, STR_ROLL_REV5},
{2065, 0, STR_ROLL_OVERLOAD5},
{2066, 0, STR_BLOCK_FABRIC5},
{2067, 0, STR_MANUAL6},
{2068, 0, STR_COIL_CAR6},
{2069, 0, STR_FABRIC_HEAD6},
{2070, 0, STR_ROLL_FWD6},
{2071, 0, STR_ROLL_REV6},
{2072, 0, STR_ROLL_OVERLOAD6},
{2073, 0, STR_BLOCK_FABRIC6},
{2074, 0, STR_MATERIAL3_HIGH},
{2075, 0, STR_MATERIAL3_LOW},
{2076, 0, STR_MATERIAL3_IN},
{2077, 0, STR_MATERIAL3_OUT},
{2078, 0, STR_MATERIAL3_RECIRC},
{2079, 0, STR_MATERIAL3_BOTTOM},
{2080, 0, STR_MATERIAL3_FILL},
{2081, 0, STR_MATERIAL3_HEAT},
{2082, 0, STR_MATERIAL3_STIR},
// --- DIO 输出(3001~3066)---
{3001, 0, STR_RED}, // 红
{3002, 0, STR_GREEN}, // 绿
{3003, 0, STR_YELLOW}, // 黄
{3004, 0, STR_ALARM}, // 警报
{3005, 0, STR_HAND_AUTO}, // 手自动
{3006, 0, STR_CONFIRM}, // 确认
{3007, 0, STR_PRESSURIZE_VALVE}, // 加压阀
{3008, 0, STR_DEPRESSURIZE_VALVE}, // 排压阀
{3009, 0, STR_HEAT_UP_VALVE}, // 升温阀
{3010, 0, STR_COOL_DOWN_VALVE}, // 降温阀
{3011, 0, STR_MAIN_PUMP_START}, // 主泵启动
{3012, 0, STR_FAN_START}, // 风机启动
{3013, 0, STR_WATER_IN_1}, // 入水1
{3014, 0, STR_WATER_IN_2}, // 入水2
{3015, 0, STR_WATER_IN_3}, // 入水3
{3016, 0, STR_WATER_IN_4}, // 入水4
{3017, 0, STR_WATER_OUT_1}, // 排水1
{3018, 0, STR_WATER_OUT_2}, // 排水2
{3019, 0, STR_WATER_OUT_3}, // 排水3
{3020, 0, STR_OVERFLOW_VALVE}, // 溢流阀
{3021, 0, STR_ROLL_FWD_1}, // 布轮正转1
{3022, 0, STR_ROLL_REV_1}, // 布轮反转1
{3023, 0, STR_ROLL_FWD_2}, // 布轮正转2
{3024, 0, STR_ROLL_REV_2}, // 布轮反转2
{3025, 0, STR_ROLL_FWD_3}, // 布轮正转3
{3026, 0, STR_ROLL_REV_3}, // 布轮反转3
{3027, 0, STR_ROLL_FWD_4}, // 布轮正转4
{3028, 0, STR_ROLL_REV_4}, // 布轮反转4
{3029, 0, STR_ROLL_FWD_5}, // 布轮正转5
{3030, 0, STR_ROLL_REV_5}, // 布轮反转5
{3031, 0, STR_ROLL_FWD_6}, // 布轮正转6
{3032, 0, STR_ROLL_REV_6}, // 布轮反转6
{3033, 0, STR_TANK1_PUMP}, // 药缸1泵
{3034, 0, STR_TANK1_WATER_IN_1}, // 药缸1入水1
{3035, 0, STR_TANK1_WATER_IN_2}, // 药缸1入水2
{3036, 0, STR_TANK1_RETURN_WATER}, // 药缸1回水
{3037, 0, STR_TANK1_HEAT}, // 药缸1加热
{3038, 0, STR_TANK1_STIRRER}, // 药缸1搅拌器
{3039, 0, STR_TANK1_STIR_VALVE}, // 药缸1搅拌阀
{3040, 0, STR_TANK1_FILL_VALVE}, // 药缸1加料阀
{3041, 0, STR_TANK1_BYPASS_VALVE}, // 药缸1比例旁通阀
{3042, 0, STR_TANK1_DRAIN_VALVE}, // 药缸1排水阀
{3043, 0, STR_TANK2_PUMP}, // 药缸2泵
{3044, 0, STR_TANK2_WATER_IN_1}, // 药缸2入水1
{3045, 0, STR_TANK2_WATER_IN_2}, // 药缸2入水2
{3046, 0, STR_TANK2_RETURN_WATER}, // 药缸2回水
{3047, 0, STR_TANK2_HEAT}, // 药缸2加热
{3048, 0, STR_TANK2_STIRRER}, // 药缸2搅拌器
{3049, 0, STR_TANK2_STIR_VALVE}, // 药缸2搅拌阀
{3050, 0, STR_TANK2_FILL_VALVE}, // 药缸2加料阀
{3051, 0, STR_TANK2_BYPASS_VALVE}, // 药缸2比例旁通阀
{3052, 0, STR_TANK2_DRAIN_VALVE}, // 药缸2排水阀
{3053, 0, STR_TANK3_PUMP}, // 药缸3泵
{3054, 0, STR_TANK3_WATER_IN_1}, // 药缸3入水1
{3055, 0, STR_TANK3_WATER_IN_2}, // 药缸3入水2
{3056, 0, STR_TANK3_RETURN_WATER}, // 药缸3回水
{3057, 0, STR_TANK3_HEAT}, // 药缸3加热
{3058, 0, STR_TANK3_STIRRER}, // 药缸3搅拌器
{3059, 0, STR_TANK3_STIR_VALVE}, // 药缸3搅拌阀
{3060, 0, STR_TANK3_FILL_VALVE}, // 药缸3加料阀
{3061, 0, STR_TANK3_BYPASS_VALVE}, // 药缸3比例旁通阀
{3062, 0, STR_TANK3_DRAIN_VALVE}, // 药缸3排水阀
{3063, 0, STR_ROLL_REV_12}, // 布轮反转12
{3064, 0, STR_DRAIN_PUMP}, // 排水泵
{3065, 0, STR_HEAT_EXCHANGER_CONDENSATE}, // 热交换器冷凝水
{3066, 0, STR_HEAT_EXCHANGER_COOLING_WATER}, // 交换器排冷却水
};
//AIO状态表
IO_State_AIO aio_table[] = {
// --- AIO 输入(4001~4022)---
{4001, 0, STR_AIO_TEMP1},
{4002, 0, STR_AIO_TEMP2},
{4003, 0, STR_AIO_TEMP3},
{4004, 0, STR_AIO_TEMP4},
{4005, 0, STR_AIO_TEMP5},
{4006, 0, STR_AIO_FLOW1},
{4007, 0, STR_AIO_LEVEL1},
{4008, 0, STR_AIO_LEVEL2},
{4009, 0, STR_AIO_LEVEL3},
{4010, 0, STR_AIO_LEVEL4},
{4011, 0, STR_AIO_MAIN_PRESSURE},
{4012, 0, STR_AIO_NOZZLE_PRESSURE},
{4013, 0, STR_AIO_NOZZLE_FLOW},
{4014, 0, STR_AIO_AIR_FLOW},
{4015, 0, STR_AIO_POWER},
{4016, 0, STR_AIO_FABRIC_CYCLE1},
{4017, 0, STR_AIO_FABRIC_CYCLE2},
{4018, 0, STR_AIO_FABRIC_CYCLE3},
{4019, 0, STR_AIO_FABRIC_CYCLE4},
{4020, 0, STR_AIO_FABRIC_CYCLE5},
{4021, 0, STR_AIO_FABRIC_CYCLE6},
{4022, 0, STR_AIO_PH},
// --- AO 输出(5001~5014)---
{5001, 0, STR_AIO_HEAT_RATIO},
{5002, 0, STR_AIO_COOL_RATIO},
{5003, 0, STR_AIO_MAIN_PUMP_SPEED},
{5004, 0, STR_AIO_FAN_SPEED},
{5005, 0, STR_AIO_FILL_RATIO1},
{5006, 0, STR_AIO_FILL_RATIO2},
{5007, 0, STR_AIO_FILL_RATIO3},
{5008, 0, STR_AIO_FABRIC_SWING},
{5009, 0, STR_AIO_LIFT1},
{5010, 0, STR_AIO_LIFT2},
{5011, 0, STR_AIO_LIFT3},
{5012, 0, STR_AIO_LIFT4},
{5013, 0, STR_AIO_LIFT5},
{5014, 0, STR_AIO_LIFT6}
};
const unsigned char DIO_TABLE_SIZE = sizeof(dio_table) / sizeof(dio_table[0]);
const unsigned char AIO_TABLE_SIZE = sizeof(aio_table) / sizeof(aio_table[0]);
const unsigned char DATA_TABLE_SIZE = sizeof(data_table) / sizeof(data_table[0]);
void DATA_Table_Init(){
for(int i=0;i<DIO_TABLE_SIZE;i++)
{
dio_table[i].current_state = 0;
}
for(int i=0;i<AIO_TABLE_SIZE;i++)
{
aio_table[i].current_Value = 0;
}
for(int i=0;i<DATA_TABLE_SIZE;i++)
{
data_table[i].current_data = 0;
}
}
+35
View File
@@ -0,0 +1,35 @@
#ifndef APPLICATIONS_SC828_DATA_Table_H
#define APPLICATIONS_SC828_DATA_Table_H
#include "stdbool.h"
#include "language.h"
// IO状态结构体(可扩展)
typedef struct {
int pin; // PLCID
unsigned char current_state; // 当前电平:0=低,1=高
str_id_t name; // 名称(可选,用于调试)
} IO_State_DIO;
typedef struct {
int pin; // PLCID
unsigned char current_Value; // 当前状态
str_id_t name; // 名称(可选,用于调试)
} IO_State_AIO;
typedef struct {
int pin; // PLCID
int current_data; // 当前状态
str_id_t name; // 名称(可选,用于调试)
} IO_State_DATA;
extern IO_State_DIO dio_table[];
extern IO_State_AIO aio_table[];
extern IO_State_DATA data_table[];
extern const unsigned char DIO_TABLE_SIZE;
extern const unsigned char AIO_TABLE_SIZE;
extern const unsigned char DATA_TABLE_SIZE;
void DATA_Table_Init(void);//
#endif
+104
View File
@@ -0,0 +1,104 @@
#include <rtthread.h>
#include <string.h>
// ===== 实际定义 =====
// 动态数据缓冲区(初始化为 NULL,后续分配)
char *DATA_dat = NULL;
char *DATA_machins = NULL;
char DATA_api[5];
char *machine_name = "Q109";
char machine_ID[3] = "23";
// 状态标志
char MACHINE_ERR = 0;
char MACHINE_LOCK = 0;
char MACHINE_CALL = 0;
char MACHINE_USER = 0;
// 字符串变量(RAM 中可修改)
char Work[15];
char Dye[15];
char Process[50];
char Message[40];
char Step[60];
char Info[30];
// 整型变量
unsigned int Redye = 0;
unsigned int UserInfoStart = 900;
unsigned int RUN = 0;
unsigned int STEPID = 0;
// 浮点变量
float MTT = 0.0f;
float MTL = 0.0f;
float MTH = 6.0f; // 默认目标温度
float MST = 0.0f;
float MUT = 0.0f;
float STTA = 0.0f;
float STLA = 0.0f;
float STTB = 0.0f;
float STLB = 0.0f;
float STTC = 0.0f;
float STLC = 0.0f;
// 控制输出
unsigned int Pump = 0;
unsigned int TC = 0;
unsigned int Fan = 0;
unsigned int Pull = 0;
unsigned int Swing = 0;
unsigned int STA = 0;
unsigned int STB = 0;
unsigned int STC = 0;
unsigned int Time = 0;
unsigned int StepN = 0;
unsigned int P6 = 0;
unsigned int P7 = 0;
unsigned int P8 = 0;
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;
// 步骤编号字符串
char StepID[3];
char SIDS1[3];
char SIDS2[3];
char SIDS3[3];
// ===== 初始化函数 =====
void init_global_vars(void) {
strcpy(Work, "Work Order");
strcpy(Dye, "Work Order");
strcpy(Process, "Process");
strcpy(Message, "Message");
strcpy(Step, "STEP");
strcpy(Info, "user");
strcpy(StepID, "000");
strcpy(SIDS1, "000");
strcpy(SIDS2, "000");
strcpy(SIDS3, "000");
}
+88
View File
@@ -0,0 +1,88 @@
#ifndef APPLICATIONS_Variable_H
#define APPLICATIONS_Variable_H
#include "stdbool.h"
// ===== 字符串变量 =====
extern char *DATA_dat;
extern char *DATA_machins;
extern char DATA_api[5];
extern char *machine_name;
extern char machine_ID[3];
// ===== 布尔变量 =====
extern char MACHINE_ERR;
extern char MACHINE_LOCK;
extern char MACHINE_CALL;
extern char MACHINE_USER;
// ===== 字符串 =====
extern char Work[15];
extern char Dye[15];
extern char Process[50];
extern char Message[40];
extern char Step[60];
extern char Info[30];
// ===== 整数变量 =====
extern unsigned int Redye;
extern unsigned int UserInfoStart;
extern unsigned int RUN;
extern unsigned int STEPID;
extern unsigned int Pump;
extern unsigned int TC;
extern unsigned int Fan;
extern unsigned int Pull;
extern unsigned int Swing;
extern unsigned int STA;
extern unsigned int STB;
extern unsigned int STC;
extern unsigned int Time;
extern unsigned int StepN;
extern unsigned int P6;
extern unsigned int P7;
extern unsigned int P8;
extern unsigned int P9;
extern unsigned int P10;
// ===== 浮点数变量 =====
extern float MTT;
extern float MTL;
extern float MTH;
extern float MST;
extern float MUT;
extern float STTA;
extern float STLA;
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 char StepID[3];
extern char SIDS1[3];
extern char SIDS2[3];
extern char SIDS3[3];
void init_global_vars(void);
#endif