添加语言部分,添加数据解析部分,添加io状态表部分
This commit is contained in:
1 parent
9f9c96d650
commit
1402105850
10 files changed
+1499
-22
No files matched your search
@@ -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);
|
||||
|
||||
@@ -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); // 时间片
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
@@ -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");
|
||||
}
|
||||
@@ -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
|
||||
Reference in new issue
Block a user