Browse Source

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

master
sc 11 hours ago
parent
commit
1402105850
  1. 94
      .cproject
  2. 284
      applications/DATA/DATA_comm.c
  3. 54
      applications/DATA/DATA_uart.c
  4. 231
      applications/DATA/SC828_DATA_table.c
  5. 35
      applications/DATA/SC828_DATA_table.h
  6. 104
      applications/DATA/Variable.c
  7. 88
      applications/DATA/Variable.h
  8. 415
      applications/Language/language.c
  9. 214
      applications/Language/language.h
  10. 2
      applications/main.c

94
.cproject

@ -268,6 +268,7 @@
<tool id="ilg.gnuarmeclipse.managedbuild.cross.tool.c.compiler.1026498694" name="GNU ARM Cross C Compiler" superClass="ilg.gnuarmeclipse.managedbuild.cross.tool.c.compiler.1570350559">
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="ilg.gnuarmeclipse.managedbuild.cross.option.c.compiler.include.paths.1599109014" name="Include paths (-I)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.c.compiler.include.paths" useByScannerDiscovery="true" valueType="includePath">
<listOptionValue builtIn="false" value="&quot;${workspace_loc://${ProjName}/drivers}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/applications/Language}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/applications/DATA}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/applications/DBSQL}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/applications/RUN_LED}&quot;"/>
@ -312,6 +313,99 @@
<tool id="ilg.gnuarmeclipse.managedbuild.cross.tool.printsize.1578710235" name="GNU ARM Cross Print Size" superClass="ilg.gnuarmeclipse.managedbuild.cross.tool.printsize.1073550295"/>
</toolChain>
</folderInfo>
<folderInfo id="ilg.gnuarmeclipse.managedbuild.cross.config.elf.debug.553091094.1526079557" name="/" resourcePath="applications/Language">
<toolChain id="ilg.gnuarmeclipse.managedbuild.cross.toolchain.elf.debug.1483282483" name="ARM Cross GCC" superClass="ilg.gnuarmeclipse.managedbuild.cross.toolchain.elf.debug" unusedChildren="">
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.addtools.createflash.251260409.182158254.981703892" name="Create flash image" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.addtools.createflash.251260409.182158254"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.addtools.createlisting.1365878149.619479147.2027570750" name="Create extended listing" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.addtools.createlisting.1365878149.619479147"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.addtools.printsize.709136944.1346513839.306125495" name="Print size" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.addtools.printsize.709136944.1346513839"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.level.1986446770.452529508.261142035" name="Optimization Level" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.level.1986446770.452529508"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.messagelength.1312975261.2049716802.1038510088" name="Message length (-fmessage-length=0)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.messagelength.1312975261.2049716802"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.signedchar.1538128212.444048439.2135040743" name="'char' is signed (-fsigned-char)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.signedchar.1538128212.444048439"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.functionsections.2136804218.127758899.906926965" name="Function sections (-ffunction-sections)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.functionsections.2136804218.127758899"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.datasections.244767666.1700439127.510385645" name="Data sections (-fdata-sections)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.datasections.244767666.1700439127"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.debugging.level.1055848773.12492232.204786458" name="Debug level" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.debugging.level.1055848773.12492232"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.debugging.format.501941135.1210690277.576013787" name="Debug format" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.debugging.format.501941135.1210690277"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.toolchain.name.1696308067.916638732.1668776704" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.toolchain.name.1696308067.916638732"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.architecture.1558403188.559460621.1951017670" name="Architecture" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.architecture.1558403188.559460621"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.family.749415257.1902466141.1190440235" name="ARM family" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.family.749415257.1902466141"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.instructionset.2114153533.502713859.666760067" name="Instruction set" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.instructionset.2114153533.502713859"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.command.prefix.1600865811.873915621.1650979608" name="Prefix" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.command.prefix.1600865811.873915621"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.command.c.1109963929.1225572227.719129750" name="C compiler" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.command.c.1109963929.1225572227"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.command.cpp.1040883831.643388648.1761200159" name="C++ compiler" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.command.cpp.1040883831.643388648"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.command.ar.1678200391.668953054.2125144777" name="Archiver" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.command.ar.1678200391.668953054"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.command.objcopy.1171840296.1098989580.1016457443" name="Hex/Bin converter" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.command.objcopy.1171840296.1098989580"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.command.objdump.342604837.499020117.738287396" name="Listing generator" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.command.objdump.342604837.499020117"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.command.size.898269225.984765130.5973027" name="Size command" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.command.size.898269225.984765130"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.command.make.2016398076.508188161.420009313" name="Build command" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.command.make.2016398076.508188161"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.command.rm.1606171496.1914561574.421068922" name="Remove command" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.command.rm.1606171496.1914561574"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.toolchain.id.540792084.1986591874.855744505" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.toolchain.id.540792084.1986591874"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.architecture.430121817.1989957222.1013364890" name="Architecture" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.architecture.430121817.1989957222"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.fpu.abi.966735324.1734948804.515685761" name="Float ABI" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.fpu.abi.966735324.1734948804"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.allwarn.1381561249.62315102.1617856498" name="Enable all common warnings (-Wall)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.allwarn.1381561249.62315102"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.target.other.2041717463.1413802919.1535003661" name="Other target flags" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.target.other.2041717463.1413802919"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.fpu.unit.1463655269.1841695866.536048104" name="FPU Type" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.fpu.unit.1463655269.1841695866"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.level.208045305.1450451551" name="Optimization Level" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.level.208045305"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.messagelength.243028108.1741810442" name="Message length (-fmessage-length=0)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.messagelength.243028108"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.signedchar.832062875.1300993560" name="'char' is signed (-fsigned-char)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.signedchar.832062875"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.functionsections.1276842886.89118124" name="Function sections (-ffunction-sections)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.functionsections.1276842886"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.datasections.1667317482.122937473" name="Data sections (-fdata-sections)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.datasections.1667317482"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.debugging.level.1566045926.1568012166" name="Debug level" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.debugging.level.1566045926"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.debugging.format.1854589250.1612441145" name="Debug format" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.debugging.format.1854589250"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.addtools.createflash.1817097645.2091464790" name="Create flash image" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.addtools.createflash.1817097645"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.addtools.createlisting.271108098.1681091952" name="Create extended listing" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.addtools.createlisting.271108098"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.addtools.printsize.1970971720.619316327" name="Print size" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.addtools.printsize.1970971720"/>
<targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="ilg.gnuarmeclipse.managedbuild.cross.targetPlatform" isAbstract="false" osList="all" superClass="ilg.gnuarmeclipse.managedbuild.cross.targetPlatform"/>
<tool id="ilg.gnuarmeclipse.managedbuild.cross.tool.assembler.2003853915" name="GNU ARM Cross Assembler" superClass="ilg.gnuarmeclipse.managedbuild.cross.tool.assembler.222740011">
<inputType id="ilg.gnuarmeclipse.managedbuild.cross.tool.assembler.input.852227680" superClass="ilg.gnuarmeclipse.managedbuild.cross.tool.assembler.input"/>
</tool>
<tool id="ilg.gnuarmeclipse.managedbuild.cross.tool.c.compiler.132284989" name="GNU ARM Cross C Compiler" superClass="ilg.gnuarmeclipse.managedbuild.cross.tool.c.compiler.1026498694">
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="ilg.gnuarmeclipse.managedbuild.cross.option.c.compiler.include.paths.1869084433" name="Include paths (-I)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.c.compiler.include.paths" useByScannerDiscovery="true" valueType="includePath">
<listOptionValue builtIn="false" value="&quot;${workspace_loc://${ProjName}/drivers}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/applications/Language}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/applications/DATA}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/applications/DBSQL}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/applications/RUN_LED}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc://${ProjName}/drivers//include}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc://${ProjName}/drivers//include//config}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc://${ProjName}/libraries//CMSIS//Device//ST//STM32F4xx//Include}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc://${ProjName}/libraries//CMSIS//Include}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc://${ProjName}/libraries//CMSIS//RTOS//Template}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc://${ProjName}/libraries//STM32F4xx_HAL_Driver//Inc}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc://${ProjName}/libraries//STM32F4xx_HAL_Driver//Inc//Legacy}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc://${ProjName}/.}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc://${ProjName}/applications}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc://${ProjName}//.}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc://${ProjName}//cubemx/Inc}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc://${ProjName}//cubemx}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc://${ProjName}//packages/cJSON-v1.7.17}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc://${ProjName}//packages/sqlite-v3.19.3}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc://${ProjName}//rt-thread/components/dfs/filesystems/devfs}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc://${ProjName}//rt-thread/components/dfs/filesystems/elmfat}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc://${ProjName}//rt-thread/components/dfs/include}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc://${ProjName}//rt-thread/components/drivers/include}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc://${ProjName}//rt-thread/components/finsh}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc://${ProjName}//rt-thread/components/legacy/dfs}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc://${ProjName}//rt-thread/components/legacy}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc://${ProjName}//rt-thread/components/libc/compilers/common}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc://${ProjName}//rt-thread/components/libc/compilers/newlib}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc://${ProjName}//rt-thread/components/libc/posix/io/poll}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc://${ProjName}//rt-thread/components/libc/posix/io/stdio}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc://${ProjName}//rt-thread/components/libc/posix/ipc}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc://${ProjName}//rt-thread/include}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc://${ProjName}//rt-thread/libcpu/arm/common}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc://${ProjName}//rt-thread/libcpu/arm/cortex-m4}&quot;"/>
</option>
<inputType id="ilg.gnuarmeclipse.managedbuild.cross.tool.c.compiler.input.1219617929" superClass="ilg.gnuarmeclipse.managedbuild.cross.tool.c.compiler.input"/>
</tool>
<tool id="ilg.gnuarmeclipse.managedbuild.cross.tool.cpp.compiler.640482506" name="GNU ARM Cross C++ Compiler" superClass="ilg.gnuarmeclipse.managedbuild.cross.tool.cpp.compiler.1236763088"/>
<tool id="ilg.gnuarmeclipse.managedbuild.cross.tool.c.linker.135071252" name="Cross ARM C Linker" superClass="ilg.gnuarmeclipse.managedbuild.cross.tool.c.linker.1881909634"/>
<tool id="ilg.gnuarmeclipse.managedbuild.cross.tool.cpp.linker.667481430" name="GNU ARM Cross C++ Linker" superClass="ilg.gnuarmeclipse.managedbuild.cross.tool.cpp.linker.1116428017"/>
<tool id="ilg.gnuarmeclipse.managedbuild.cross.tool.archiver.2052730075" name="GNU ARM Cross Archiver" superClass="ilg.gnuarmeclipse.managedbuild.cross.tool.archiver.645248814"/>
<tool id="ilg.gnuarmeclipse.managedbuild.cross.tool.createflash.1384378561" name="GNU ARM Cross Create Flash Image" superClass="ilg.gnuarmeclipse.managedbuild.cross.tool.createflash.1330026241"/>
<tool id="ilg.gnuarmeclipse.managedbuild.cross.tool.createlisting.1352741334" name="GNU ARM Cross Create Listing" superClass="ilg.gnuarmeclipse.managedbuild.cross.tool.createlisting.525987628"/>
<tool id="ilg.gnuarmeclipse.managedbuild.cross.tool.printsize.874476855" name="GNU ARM Cross Print Size" superClass="ilg.gnuarmeclipse.managedbuild.cross.tool.printsize.1578710235"/>
</toolChain>
</folderInfo>
<folderInfo id="ilg.gnuarmeclipse.managedbuild.cross.config.elf.debug.553091094.1496577543" name="/" resourcePath="applications/DBSQL">
<toolChain id="ilg.gnuarmeclipse.managedbuild.cross.toolchain.elf.debug.307220578" name="ARM Cross GCC" superClass="ilg.gnuarmeclipse.managedbuild.cross.toolchain.elf.debug" unusedChildren="">
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.addtools.createflash.251260409.182158254.605770396" name="Create flash image" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.addtools.createflash.251260409.182158254"/>

284
applications/DATA/DATA_comm.c

@ -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);

54
applications/DATA/DATA_uart.c

@ -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
applications/DATA/SC828_DATA_table.c

@ -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
applications/DATA/SC828_DATA_table.h

@ -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
applications/DATA/Variable.c

@ -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
applications/DATA/Variable.h

@ -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

415
applications/Language/language.c

@ -0,0 +1,415 @@
// language.c
#include <rtthread.h>
#include <language.h>
lang_t current_lang = LANG_ZH;
// 英文字符串
static const char *text_en[STR_COUNT] = {
[STR_EMERGENCY_STOP] = "Emergency Stop",
[STR_TEMP_LOCK] = "Temperature Lock",
[STR_PRESSURE_LOCK] = "Pressure Lock",
[STR_CALL_CONFIRM] = "Call Confirm",
[STR_MANUAL] = "Manual",
[STR_FAN_START] = "Fan Start",
[STR_FAN_FAULT] = "Fan Fault",
[STR_MAIN_PUMP_FAULT] = "Main Pump Fault",
[STR_ROLL_RESET] = "Roll Reset",
[STR_FABRIC_FAULT] = "Fabric Fault",
[STR_ELEC_FAULT] = "Electrical Fault",
[STR_MATERIAL_PUMP1] = "Material Pump 1 Abnormal",
[STR_MATERIAL_PUMP2] = "Material Pump 2 Abnormal",
[STR_MATERIAL_PUMP3] = "Material Pump 3 Abnormal",
[STR_MANUAL1] = "Manual 1",
[STR_COIL_CAR1] = "Coil Car 1",
[STR_FABRIC_HEAD1] = "Fabric Head 1",
[STR_ROLL_FWD1] = "Roll Forward 1",
[STR_ROLL_REV1] = "Roll Reverse 1",
[STR_ROLL_OVERLOAD1] = "Roll Overload 1",
[STR_BLOCK_FABRIC1] = "Block Fabric 1",
[STR_MATERIAL1_HIGH] = "Material 1 High Level",
[STR_MATERIAL1_LOW] = "Material 1 Low Level",
[STR_MATERIAL1_IN] = "Material 1 In Water",
[STR_MATERIAL1_OUT] = "Material 1 Drain",
[STR_MATERIAL1_RECIRC] = "Material 1 Recirculate",
[STR_MATERIAL1_BOTTOM] = "Material 1 Bottom Level",
[STR_MATERIAL1_FILL] = "Material 1 Fill",
[STR_MATERIAL1_HEAT] = "Material 1 Heat",
[STR_MATERIAL2_HIGH] = "Material 2 High Level",
[STR_MATERIAL2_LOW] = "Material 2 Low Level",
[STR_MATERIAL2_IN] = "Material 2 In Water",
[STR_MATERIAL2_OUT] = "Material 2 Drain",
[STR_MATERIAL2_RECIRC] = "Material 2 Recirculate",
[STR_MATERIAL2_BOTTOM] = "Material 2 Bottom Level",
[STR_MATERIAL2_FILL] = "Material 2 Fill",
[STR_MATERIAL2_HEAT] = "Material 2 Heat",
[STR_MATERIAL2_STIR] = "Material 2 Stir",
[STR_MANUAL2] = "Manual 2",
[STR_COIL_CAR2] = "Coil Car 2",
[STR_FABRIC_HEAD2] = "Fabric Head 2",
[STR_ROLL_FWD2] = "Roll Forward 2",
[STR_ROLL_REV2] = "Roll Reverse 2",
[STR_ROLL_OVERLOAD2] = "Roll Overload 2",
[STR_BLOCK_FABRIC2] = "Block Fabric 2",
[STR_MANUAL3] = "Manual 3",
[STR_COIL_CAR3] = "Coil Car 3",
[STR_FABRIC_HEAD3] = "Fabric Head 3",
[STR_ROLL_FWD3] = "Roll Forward 3",
[STR_ROLL_REV3] = "Roll Reverse 3",
[STR_ROLL_OVERLOAD3] = "Roll Overload 3",
[STR_BLOCK_FABRIC3] = "Block Fabric 3",
[STR_MANUAL4] = "Manual 4",
[STR_COIL_CAR4] = "Coil Car 4",
[STR_FABRIC_HEAD4] = "Fabric Head 4",
[STR_ROLL_FWD4] = "Roll Forward 4",
[STR_ROLL_REV4] = "Roll Reverse 4",
[STR_ROLL_OVERLOAD4] = "Roll Overload 4",
[STR_BLOCK_FABRIC4] = "Block Fabric 4",
[STR_MANUAL5] = "Manual 5",
[STR_COIL_CAR5] = "Coil Car 5",
[STR_FABRIC_HEAD5] = "Fabric Head 5",
[STR_ROLL_FWD5] = "Roll Forward 5",
[STR_ROLL_REV5] = "Roll Reverse 5",
[STR_ROLL_OVERLOAD5] = "Roll Overload 5",
[STR_BLOCK_FABRIC5] = "Block Fabric 5",
[STR_MANUAL6] = "Manual 6",
[STR_COIL_CAR6] = "Coil Car 6",
[STR_FABRIC_HEAD6] = "Fabric Head 6",
[STR_ROLL_FWD6] = "Roll Forward 6",
[STR_ROLL_REV6] = "Roll Reverse 6",
[STR_ROLL_OVERLOAD6] = "Roll Overload 6",
[STR_BLOCK_FABRIC6] = "Block Fabric 6",
[STR_MATERIAL3_HIGH] = "Material 3 High Level",
[STR_MATERIAL3_LOW] = "Material 3 Low Level",
[STR_MATERIAL3_IN] = "Material 3 In Water",
[STR_MATERIAL3_OUT] = "Material 3 Drain",
[STR_MATERIAL3_RECIRC] = "Material 3 Recirculate",
[STR_MATERIAL3_BOTTOM] = "Material 3 Bottom Level",
[STR_MATERIAL3_FILL] = "Material 3 Fill",
[STR_MATERIAL3_HEAT] = "Material 3 Heat",
[STR_MATERIAL3_STIR] = "Material 3 Stir",
[STR_AIO_TEMP1] = "Temp 1",
[STR_AIO_TEMP2] = "Temp 2",
[STR_AIO_TEMP3] = "Temp 3",
[STR_AIO_TEMP4] = "Temp 4",
[STR_AIO_TEMP5] = "Temp 5",
[STR_AIO_FLOW1] = "Flow 1",
[STR_AIO_LEVEL1] = "Level 1",
[STR_AIO_LEVEL2] = "Level 2",
[STR_AIO_LEVEL3] = "Level 3",
[STR_AIO_LEVEL4] = "Level 4",
[STR_AIO_MAIN_PRESSURE] = "Main Pressure",
[STR_AIO_NOZZLE_PRESSURE] = "Nozzle Pressure",
[STR_AIO_NOZZLE_FLOW] = "Nozzle Flow",
[STR_AIO_AIR_FLOW] = "Air Flow",
[STR_AIO_POWER] = "Power",
[STR_AIO_FABRIC_CYCLE1] = "Fabric Cycle 1",
[STR_AIO_FABRIC_CYCLE2] = "Fabric Cycle 2",
[STR_AIO_FABRIC_CYCLE3] = "Fabric Cycle 3",
[STR_AIO_FABRIC_CYCLE4] = "Fabric Cycle 4",
[STR_AIO_FABRIC_CYCLE5] = "Fabric Cycle 5",
[STR_AIO_FABRIC_CYCLE6] = "Fabric Cycle 6",
[STR_AIO_PH] = "PH",
[STR_AIO_HEAT_RATIO] = "Heat Ratio",
[STR_AIO_COOL_RATIO] = "Cool Ratio",
[STR_AIO_MAIN_PUMP_SPEED] = "Main Pump Speed",
[STR_AIO_FAN_SPEED] = "Fan Speed",
[STR_AIO_FILL_RATIO1] = "Fill Ratio 1",
[STR_AIO_FILL_RATIO2] = "Fill Ratio 2",
[STR_AIO_FILL_RATIO3] = "Fill Ratio 3",
[STR_AIO_FABRIC_SWING] = "Fabric Swing",
[STR_AIO_LIFT1] = "Lift 1",
[STR_AIO_LIFT2] = "Lift 2",
[STR_AIO_LIFT3] = "Lift 3",
[STR_AIO_LIFT4] = "Lift 4",
[STR_AIO_LIFT5] = "Lift 5",
[STR_AIO_LIFT6] = "Lift 6",
[STR_RED] = "Red",
[STR_GREEN] = "Green",
[STR_YELLOW] = "Yellow",
[STR_ALARM] = "Alarm",
[STR_HAND_AUTO] = "Manual Auto",
[STR_CONFIRM] = "Confirm",
[STR_PRESSURIZE_VALVE] = "Pressurize Valve",
[STR_DEPRESSURIZE_VALVE] = "Depressurize Valve",
[STR_HEAT_UP_VALVE] = "Heat Up Valve",
[STR_COOL_DOWN_VALVE] = "Cool Down Valve",
[STR_MAIN_PUMP_START] = "Main Pump Start",
[STR_WATER_IN_1] = "Water In 1",
[STR_WATER_IN_2] = "Water In 2",
[STR_WATER_IN_3] = "Water In 3",
[STR_WATER_IN_4] = "Water In 4",
[STR_WATER_OUT_1] = "Water Out 1",
[STR_WATER_OUT_2] = "Water Out 2",
[STR_WATER_OUT_3] = "Water Out 3",
[STR_OVERFLOW_VALVE] = "Overflow Valve",
[STR_ROLL_FWD_1] = "Roll Forward 1",
[STR_ROLL_REV_1] = "Roll Reverse 1",
[STR_ROLL_FWD_2] = "Roll Forward 2",
[STR_ROLL_REV_2] = "Roll Reverse 2",
[STR_ROLL_FWD_3] = "Roll Forward 3",
[STR_ROLL_REV_3] = "Roll Reverse 3",
[STR_ROLL_FWD_4] = "Roll Forward 4",
[STR_ROLL_REV_4] = "Roll Reverse 4",
[STR_ROLL_FWD_5] = "Roll Forward 5",
[STR_ROLL_REV_5] = "Roll Reverse 5",
[STR_ROLL_FWD_6] = "Roll Forward 6",
[STR_ROLL_REV_6] = "Roll Reverse 6",
[STR_TANK1_PUMP] = "Tank 1 Pump",
[STR_TANK1_WATER_IN_1] = "Tank 1 Water In 1",
[STR_TANK1_WATER_IN_2] = "Tank 1 Water In 2",
[STR_TANK1_RETURN_WATER] = "Tank 1 Return Water",
[STR_TANK1_HEAT] = "Tank 1 Heat",
[STR_TANK1_STIRRER] = "Tank 1 Stirrer",
[STR_TANK1_STIR_VALVE] = "Tank 1 Stir Valve",
[STR_TANK1_FILL_VALVE] = "Tank 1 Fill Valve",
[STR_TANK1_BYPASS_VALVE] = "Tank 1 Bypass Valve",
[STR_TANK1_DRAIN_VALVE] = "Tank 1 Drain Valve",
[STR_TANK2_PUMP] = "Tank 2 Pump",
[STR_TANK2_WATER_IN_1] = "Tank 2 Water In 1",
[STR_TANK2_WATER_IN_2] = "Tank 2 Water In 2",
[STR_TANK2_RETURN_WATER] = "Tank 2 Return Water",
[STR_TANK2_HEAT] = "Tank 2 Heat",
[STR_TANK2_STIRRER] = "Tank 2 Stirrer",
[STR_TANK2_STIR_VALVE] = "Tank 2 Stir Valve",
[STR_TANK2_FILL_VALVE] = "Tank 2 Fill Valve",
[STR_TANK2_BYPASS_VALVE] = "Tank 2 Bypass Valve",
[STR_TANK2_DRAIN_VALVE] = "Tank 2 Drain Valve",
[STR_TANK3_PUMP] = "Tank 3 Pump",
[STR_TANK3_WATER_IN_1] = "Tank 3 Water In 1",
[STR_TANK3_WATER_IN_2] = "Tank 3 Water In 2",
[STR_TANK3_RETURN_WATER] = "Tank 3 Return Water",
[STR_TANK3_HEAT] = "Tank 3 Heat",
[STR_TANK3_STIRRER] = "Tank 3 Stirrer",
[STR_TANK3_STIR_VALVE] = "Tank 3 Stir Valve",
[STR_TANK3_FILL_VALVE] = "Tank 3 Fill Valve",
[STR_TANK3_BYPASS_VALVE] = "Tank 3 Bypass Valve",
[STR_TANK3_DRAIN_VALVE] = "Tank 3 Drain Valve",
[STR_ROLL_REV_12] = "Roll Reverse 1-2",
[STR_DRAIN_PUMP] = "Drain Pump",
[STR_HEAT_EXCHANGER_CONDENSATE] = "Heat Exchanger Condensate",
[STR_HEAT_EXCHANGER_COOLING_WATER] = "Heat Exchanger Cooling Water",
[STR_COMM_COUNTER] = "Communication Counter",
[STR_COMM_FAULT_COUNTER] = "Communication Fault Counter",
[STR_CYCLE_TEMP_RISE_SET] = "Cycle Temperature Rise Setpoint",
[STR_TEMP_CONTROL_RATIO] = "Temperature Control Ratio",
[STR_CALCULATED_TEMP] = "Calculated Temperature",
[STR_FLOW_COUNTER] = "Flow Counter",
[STR_GLOBAL_FLOW_COUNTER] = "Global Flow Counter",
[STR_NOZZLE_SETTING] = "Nozzle Setting",
[STR_MAIN_PUMP_SPEED_SET] = "Main Pump Speed Setpoint",
[STR_FAN_SPEED_SET] = "Fan Speed Setpoint",
[STR_TARGET_PH_SET] = "Target pH Setpoint",
[STR_PH_DEVICE_STATUS] = "pH Device Status"
};
// 中文字符串(UTF-8 编码)
static const char *text_zh[STR_COUNT] = {
[STR_EMERGENCY_STOP] = "\xE6\x80\xA5\xE5\x81\x9C", // "急停"
[STR_TEMP_LOCK] = "\xE6\xB8\xA9\xE5\xBA\xA6\xE9\x94\x81\xE5\xAE\x9A", // "温度锁定"
[STR_PRESSURE_LOCK] = "\xE5\x8E\x8B\xE5\x8A\x9B\xE9\x94\x81\xE5\xAE\x9A", // "压力锁定"
[STR_CALL_CONFIRM] = "\xE5\x91\xBC\xE5\x8F\xAB\xE7\xa1\xAE\xE8\xAE\xA4", // "呼叫确认"
[STR_MANUAL] = "\xE6\x89\x8B\xE5\x8A\xA8", // "手动"
[STR_FAN_START] = "\xE9\xA3\x8E\xE6\x9C\xBA\xE5\x90\xAF\xE5\x8A\xA8", // "风机启动"
[STR_FAN_FAULT] = "\xE9\xA3\x8E\xE6\x9C\xBA\xE6\x95\x85\xE9\x9A\x9C", // "风机故障"
[STR_MAIN_PUMP_FAULT] = "\xE4\xB8\xBB\xE6\xB3\xB5\xE6\x95\x85\xE9\x9A\x9C", // "主泵故障"
[STR_ROLL_RESET] = "\xE5\xB8\x83\xE8\xBD\xAE\xE9\x87\x8D\xE7\xBD\xAE", // "布轮重置"
[STR_FABRIC_FAULT] = "\xE6\x91\x86\xE5\xB8\x83\xE6\x95\x85\xE9\x9A\x9C", // "摆布故障"
[STR_ELEC_FAULT] = "\xE7\x94\xB5\xE5\x99\xA8\xE6\x95\x85\xE9\x9A\x9C", // "电器故障"
[STR_MATERIAL_PUMP1] = "\xE6\x96\x99\xE6\xB3\xB5\x31\xE5\xBC\x82\xE5\xB8\xB8", // "料泵1异常"
[STR_MATERIAL_PUMP2] = "\xE6\x96\x99\xE6\xB3\xB5\x32\xE5\xBC\x82\xE5\xB8\xB8", // "料泵2异常"
[STR_MATERIAL_PUMP3] = "\xE6\x96\x99\xE6\xB3\xB5\x33\xE5\xBC\x82\xE5\xB8\xB8", // "料泵3异常"
[STR_MANUAL1] = "\xE6\x89\x8B\xE5\x8A\xA8\x31", // "手动1"
[STR_COIL_CAR1] = "\xE7\xBA\xA0\xE8\xBD\xA6\x31", // "缠车1"
[STR_FABRIC_HEAD1] = "\xE5\xB8\x83\xE5\xA4\xB4\x31", // "布头1"
[STR_ROLL_FWD1] = "\xE5\xB8\x83\xE8\xBD\xAE\xE6\xAD\xA3\xE8\xBD\xAC\x31", // "布轮正转1"
[STR_ROLL_REV1] = "\xE5\xB8\x83\xE8\xBD\xAE\xE5\x8F\x8D\xE8\xBD\xAC\x31", // "布轮反转1"
[STR_ROLL_OVERLOAD1] = "\xE5\xB8\x83\xE8\xBD\xAE\xE8\xBF\x87\xE8\xBD\xBD\x31", // "布轮过载1"
[STR_BLOCK_FABRIC1] = "\xE5\xA0\xB5\xE5\xB8\x83\x31", // "堵布1"
[STR_MATERIAL1_HIGH] = "\xE6\x96\x99\x31\xE9\xAB\x98\xE6\xB6\xB2\xE4\xBD\x8D", // "料1高液位"
[STR_MATERIAL1_LOW] = "\xE6\x96\x99\x31\xE4\xBD\x8E\xE6\xB6\xB2\xE4\xBD\x8D", // "料1低液位"
[STR_MATERIAL1_IN] = "\xE6\x96\x99\x31\xE5\x85\xA5\xE6\xB0\xB4", // "料1入水"
[STR_MATERIAL1_OUT] = "\xE6\x96\x99\x31\xE6\x8E\x92\xE6\xB0\xB4", // "料1排水"
[STR_MATERIAL1_RECIRC] = "\xE6\x96\x99\x31\xE5\x9B\x9E\xE6\xB5\x81", // "料1回流"
[STR_MATERIAL1_BOTTOM] = "\xE6\x96\x99\x31\xE5\xBA\x95\xE6\xB6\xB2\xE4\xBD\x8D", // "料1底液位"
[STR_MATERIAL1_FILL] = "\xE6\x96\x99\x31\xE6\xB3\xA8\xE6\x96\x99", // "料1注料"
[STR_MATERIAL1_HEAT] = "\xE6\x96\x99\x31\xE5\x8A\xA0\xE7\x83\xAD", // "料1加热"
[STR_MATERIAL2_HIGH] = "\xE6\x96\x99\x32\xE9\xAB\x98\xE6\xB6\xB2\xE4\xBD\x8D", // "料2高液位"
[STR_MATERIAL2_LOW] = "\xE6\x96\x99\x32\xE4\xBD\x8E\xE6\xB6\xB2\xE4\xBD\x8D", // "料2低液位"
[STR_MATERIAL2_IN] = "\xE6\x96\x99\x32\xE5\x85\xA5\xE6\xB0\xB4", // "料2入水"
[STR_MATERIAL2_OUT] = "\xE6\x96\x99\x32\xE6\x8E\x92\xE6\xB0\xB4", // "料2排水"
[STR_MATERIAL2_RECIRC] = "\xE6\x96\x99\x32\xE5\x9B\x9E\xE6\xB5\x81", // "料2回流"
[STR_MATERIAL2_BOTTOM] = "\xE6\x96\x99\x32\xE5\xBA\x95\xE6\xB6\xB2\xE4\xBD\x8D", // "料2底液位"
[STR_MATERIAL2_FILL] = "\xE6\x96\x99\x32\xE6\xB3\xA8\xE6\x96\x99", // "料2注料"
[STR_MATERIAL2_HEAT] = "\xE6\x96\x99\x32\xE5\x8A\xA0\xE7\x83\xAD", // "料2加热"
[STR_MATERIAL2_STIR] = "\xE6\x96\x99\x32\xE6\x90\x9A\xE6\x8B\x8C", // "料2搅拌"
[STR_MANUAL2] = "\xE6\x89\x8B\xE5\x8A\xA8\x32", // "手动2"
[STR_COIL_CAR2] = "\xE7\xBA\xA0\xE8\xBD\xA6\x32", // "缠车2"
[STR_FABRIC_HEAD2] = "\xE5\xB8\x83\xE5\xA4\xB4\x32", // "布头2"
[STR_ROLL_FWD2] = "\xE5\xB8\x83\xE8\xBD\xAE\xE6\xAD\xA3\xE8\xBD\xAC\x32", // "布轮正转2"
[STR_ROLL_REV2] = "\xE5\xB8\x83\xE8\xBD\xAE\xE5\x8F\x8D\xE8\xBD\xAC\x32", // "布轮反转2"
[STR_ROLL_OVERLOAD2] = "\xE5\xB8\x83\xE8\xBD\xAE\xE8\xBF\x87\xE8\xBD\xBD\x32", // "布轮过载2"
[STR_BLOCK_FABRIC2] = "\xE5\xA0\xB5\xE5\xB8\x83\x32", // "堵布2"
[STR_MANUAL3] = "\xE6\x89\x8B\xE5\x8A\xA8\x33", // "手动3"
[STR_COIL_CAR3] = "\xE7\xBA\xA0\xE8\xBD\xA6\x33", // "缠车3"
[STR_FABRIC_HEAD3] = "\xE5\xB8\x83\xE5\xA4\xB4\x33", // "布头3"
[STR_ROLL_FWD3] = "\xE5\xB8\x83\xE8\xBD\xAE\xE6\xAD\xA3\xE8\xBD\xAC\x33", // "布轮正转3"
[STR_ROLL_REV3] = "\xE5\xB8\x83\xE8\xBD\xAE\xE5\x8F\x8D\xE8\xBD\xAC\x33", // "布轮反转3"
[STR_ROLL_OVERLOAD3] = "\xE5\xB8\x83\xE8\xBD\xAE\xE8\xBF\x87\xE8\xBD\xBD\x33", // "布轮过载3"
[STR_BLOCK_FABRIC3] = "\xE5\xA0\xB5\xE5\xB8\x83\x33", // "堵布3"
[STR_MANUAL4] = "\xE6\x89\x8B\xE5\x8A\xA8\x34", // "手动4"
[STR_COIL_CAR4] = "\xE7\xBA\xA0\xE8\xBD\xA6\x34", // "缠车4"
[STR_FABRIC_HEAD4] = "\xE5\xB8\x83\xE5\xA4\xB4\x34", // "布头4"
[STR_ROLL_FWD4] = "\xE5\xB8\x83\xE8\xBD\xAE\xE6\xAD\xA3\xE8\xBD\xAC\x34", // "布轮正转4"
[STR_ROLL_REV4] = "\xE5\xB8\x83\xE8\xBD\xAE\xE5\x8F\x8D\xE8\xBD\xAC\x34", // "布轮反转4"
[STR_ROLL_OVERLOAD4] = "\xE5\xB8\x83\xE8\xBD\xAE\xE8\xBF\x87\xE8\xBD\xBD\x34", // "布轮过载4"
[STR_BLOCK_FABRIC4] = "\xE5\xA0\xB5\xE5\xB8\x83\x34", // "堵布4"
[STR_MANUAL5] = "\xE6\x89\x8B\xE5\x8A\xA8\x35", // "手动5"
[STR_COIL_CAR5] = "\xE7\xBA\xA0\xE8\xBD\xA6\x35", // "缠车5"
[STR_FABRIC_HEAD5] = "\xE5\xB8\x83\xE5\xA4\xB4\x35", // "布头5"
[STR_ROLL_FWD5] = "\xE5\xB8\x83\xE8\xBD\xAE\xE6\xAD\xA3\xE8\xBD\xAC\x35", // "布轮正转5"
[STR_ROLL_REV5] = "\xE5\xB8\x83\xE8\xBD\xAE\xE5\x8F\x8D\xE8\xBD\xAC\x35", // "布轮反转5"
[STR_ROLL_OVERLOAD5] = "\xE5\xB8\x83\xE8\xBD\xAE\xE8\xBF\x87\xE8\xBD\xBD\x35", // "布轮过载5"
[STR_BLOCK_FABRIC5] = "\xE5\xA0\xB5\xE5\xB8\x83\x35", // "堵布5"
[STR_MANUAL6] = "\xE6\x89\x8B\xE5\x8A\xA8\x36", // "手动6"
[STR_COIL_CAR6] = "\xE7\xBA\xA0\xE8\xBD\xA6\x36", // "缠车6"
[STR_FABRIC_HEAD6] = "\xE5\xB8\x83\xE5\xA4\xB4\x36", // "布头6"
[STR_ROLL_FWD6] = "\xE5\xB8\x83\xE8\xBD\xAE\xE6\xAD\xA3\xE8\xBD\xAC\x36", // "布轮正转6"
[STR_ROLL_REV6] = "\xE5\xB8\x83\xE8\xBD\xAE\xE5\x8F\x8D\xE8\xBD\xAC\x36", // "布轮反转6"
[STR_ROLL_OVERLOAD6] = "\xE5\xB8\x83\xE8\xBD\xAE\xE8\xBF\x87\xE8\xBD\xBD\x36", // "布轮过载6"
[STR_BLOCK_FABRIC6] = "\xE5\xA0\xB5\xE5\xB8\x83\x36", // "堵布6"
[STR_MATERIAL3_HIGH] = "\xE6\x96\x99\x33\xE9\xAB\x98\xE6\xB0\xB4\xE4\xBD\x8D", // "料3高水位"
[STR_MATERIAL3_LOW] = "\xE6\x96\x99\x33\xE4\xBD\x8E\xE6\xB0\xB4\xE4\xBD\x8D", // "料3低水位"
[STR_MATERIAL3_IN] = "\xE6\x96\x99\x33\xE5\x85\xA5\xE6\xB0\xB4", // "料3入水"
[STR_MATERIAL3_OUT] = "\xE6\x96\x99\x33\xE6\x8E\x92\xE6\xB0\xB4", // "料3排水"
[STR_MATERIAL3_RECIRC] = "\xE6\x96\x99\x33\xE5\x9B\x9E\xE6\xB5\x81", // "料3回流"
[STR_MATERIAL3_BOTTOM] = "\xE6\x96\x99\x33\xE5\xBA\x95\xE6\xB0\xB4\xE4\xBD\x8D", // "料3底水位"
[STR_MATERIAL3_FILL] = "\xE6\x96\x99\x33\xE6\xB3\xA8\xE6\x96\x99", // "料3注料"
[STR_MATERIAL3_HEAT] = "\xE6\x96\x99\x33\xE5\x8A\xA0\xE7\x83\xAD", // "料3加热"
[STR_MATERIAL3_STIR] = "\xE6\x96\x99\x33\xE6\x90\x9A\xE6\x8B\x8C", // "料3搅拌"
[STR_AIO_TEMP1] = "\xE6\xB8\xA9\xE5\xBA\xA6\x31",
[STR_AIO_TEMP2] = "\xE6\xB8\xA9\xE5\xBA\xA6\x32",
[STR_AIO_TEMP3] = "\xE6\xB8\xA9\xE5\xBA\xA6\x33",
[STR_AIO_TEMP4] = "\xE6\xB8\xA9\xE5\xBA\xA6\x34",
[STR_AIO_TEMP5] = "\xE6\xB8\xA9\xE5\xBA\xA6\x35",
[STR_AIO_FLOW1] = "\xE6\xB5\x81\xE9\x87\x8F\x31",
[STR_AIO_LEVEL1] = "\xE6\xB6\xB2\xE4\xBD\x8D\x31",
[STR_AIO_LEVEL2] = "\xE6\xB6\xB2\xE4\xBD\x8D\x32",
[STR_AIO_LEVEL3] = "\xE6\xB6\xB2\xE4\xBD\x8D\x33",
[STR_AIO_LEVEL4] = "\xE6\xB6\xB2\xE4\xBD\x8D\x34",
[STR_AIO_MAIN_PRESSURE] = "\xE4\xB8\xBB\xE7\xBC\xB8\xE5\x8E\x8B\xE5\x8A\x9B",
[STR_AIO_NOZZLE_PRESSURE] = "\xE5\x96\xB7\xE5\xA4\xB4\xE5\x8E\x8B\xE5\x8A\x9B",
[STR_AIO_NOZZLE_FLOW] = "\xE5\x96\xB7\xE5\xA4\xB4\xE6\xB5\x81\xE9\x87\x8F",
[STR_AIO_AIR_FLOW] = "\xE7\xA9\xBA\xE6\xB0\x94\xE6\xB5\x81\xE9\x87\x8F",
[STR_AIO_POWER] = "\xE7\x94\xB5\xE8\x83\xBD",
[STR_AIO_FABRIC_CYCLE1] = "\xE8\xA1\x8C\xE5\xB8\x83\xE5\x91\xA8\xE6\x9C\x9F\x31",
[STR_AIO_FABRIC_CYCLE2] = "\xE8\xA1\x8C\xE5\xB8\x83\xE5\x91\xA8\xE6\x9C\x9F\x32",
[STR_AIO_FABRIC_CYCLE3] = "\xE8\xA1\x8C\xE5\xB8\x83\xE5\x91\xA8\xE6\x9C\x9F\x33",
[STR_AIO_FABRIC_CYCLE4] = "\xE8\xA1\x8C\xE5\xB8\x83\xE5\x91\xA8\xE6\x9C\x9F\x34",
[STR_AIO_FABRIC_CYCLE5] = "\xE8\xA1\x8C\xE5\xB8\x83\xE5\x91\xA8\xE6\x9C\x9F\x35",
[STR_AIO_FABRIC_CYCLE6] = "\xE8\xA1\x8C\xE5\xB8\x83\xE5\x91\xA8\xE6\x9C\x9F\x36",
[STR_AIO_PH] = "PH",
[STR_AIO_HEAT_RATIO] = "\xE5\x8D\x87\xE6\xB8\xA9\xE6\xAF\x94\xE4\xBE\x8B",
[STR_AIO_COOL_RATIO] = "\xE9\x99\x8D\xE6\xB8\xA9\xE6\xAF\x94\xE4\xBE\x8B",
[STR_AIO_MAIN_PUMP_SPEED] = "\xE4\xB8\xBB\xE6\xB3\xB5\xE9\x80\x9F\xE5\xBA\xA6",
[STR_AIO_FAN_SPEED] = "\xE9\xA3\x8E\xE6\x9C\xBA\xE9\x80\x9F\xE5\xBA\xA6",
[STR_AIO_FILL_RATIO1] = "\xE5\x8A\xA0\xE6\x96\x99\xE6\xAF\x94\xE4\xBE\x8B\x31",
[STR_AIO_FILL_RATIO2] = "\xE5\x8A\xA0\xE6\x96\x99\xE6\xAF\x94\xE4\xBE\x8B\x32",
[STR_AIO_FILL_RATIO3] = "\xE5\x8A\xA0\xE6\x96\x99\xE6\xAF\x94\xE4\xBE\x8B\x33",
[STR_AIO_FABRIC_SWING] = "\xE6\x91\x86\xE5\xB8\x83",
[STR_AIO_LIFT1] = "\xE6\x8F\x90\xE5\xB8\x83\x31",
[STR_AIO_LIFT2] = "\xE6\x8F\x90\xE5\xB8\x83\x32",
[STR_AIO_LIFT3] = "\xE6\x8F\x90\xE5\xB8\x83\x33",
[STR_AIO_LIFT4] = "\xE6\x8F\x90\xE5\xB8\x83\x34",
[STR_AIO_LIFT5] = "\xE6\x8F\x90\xE5\xB8\x83\x35",
[STR_AIO_LIFT6] = "\xE6\x8F\x90\xE5\xB8\x83\x36",
[STR_RED] = "\xe7\xba\xa2", // 红
[STR_GREEN] = "\xe7\xbb\xbf", // 绿
[STR_YELLOW] = "\xe9\xbb\x84", // 黄
[STR_ALARM] = "\xe8\xad\xa6\xe6\x8a\xa5", // 警报
[STR_HAND_AUTO] = "\xe6\x89\x8b\xe8\x87\xaa\xe5\x8a\xa8", // 手自动
[STR_CONFIRM] = "\xe7\xa1\xae\xe8\xae\xa4", // 确认
[STR_PRESSURIZE_VALVE] = "\xe5\x8a\xa0\xe5\x8e\x8b\xe9\x98\x80", // 加压阀
[STR_DEPRESSURIZE_VALVE] = "\xe6\x8e\x92\xe5\x8e\x8b\xe9\x98\x80", // 排压阀
[STR_HEAT_UP_VALVE] = "\xe5\x8d\x87\xe6\xb8\xa9\xe9\x98\x80", // 升温阀
[STR_COOL_DOWN_VALVE] = "\xe9\x99\x8d\xe6\xb8\xa9\xe9\x98\x80", // 降温阀
[STR_MAIN_PUMP_START] = "\xe4\xb8\xbb\xe6\xb3\xb5\xe5\x90\xaf\xe5\x8a\xa8", // 主泵启动
[STR_WATER_IN_1] = "\xe5\x85\xa5\xe6\xb0\xb4\x31", // 入水1
[STR_WATER_IN_2] = "\xe5\x85\xa5\xe6\xb0\xb4\x32", // 入水2
[STR_WATER_IN_3] = "\xe5\x85\xa5\xe6\xb0\xb4\x33", // 入水3
[STR_WATER_IN_4] = "\xe5\x85\xa5\xe6\xb0\xb4\x34", // 入水4
[STR_WATER_OUT_1] = "\xe6\x8e\x92\xe6\xb0\xb4\x31", // 排水1
[STR_WATER_OUT_2] = "\xe6\x8e\x92\xe6\xb0\xb4\x32", // 排水2
[STR_WATER_OUT_3] = "\xe6\x8e\x92\xe6\xb0\xb4\x33", // 排水3
[STR_OVERFLOW_VALVE] = "\xe6\xba\xa2\xe6\xb5\x81\xe9\x98\x80", // 溢流阀
[STR_ROLL_FWD_1] = "\xe5\xb8\x83\xe8\xbd\xae\xe6\xad\xa3\xe8\xbd\xac\x31", // 布轮正转1
[STR_ROLL_REV_1] = "\xe5\xb8\x83\xe8\xbd\xae\xe5\x8f\x8d\xe8\xbd\xac\x31", // 布轮反转1
[STR_ROLL_FWD_2] = "\xe5\xb8\x83\xe8\xbd\xae\xe6\xad\xa3\xe8\xbd\xac\x32", // 布轮正转2
[STR_ROLL_REV_2] = "\xe5\xb8\x83\xe8\xbd\xae\xe5\x8f\x8d\xe8\xbd\xac\x32", // 布轮反转2
[STR_ROLL_FWD_3] = "\xe5\xb8\x83\xe8\xbd\xae\xe6\xad\xa3\xe8\xbd\xac\x33", // 布轮正转3
[STR_ROLL_REV_3] = "\xe5\xb8\x83\xe8\xbd\xae\xe5\x8f\x8d\xe8\xbd\xac\x33", // 布轮反转3
[STR_ROLL_FWD_4] = "\xe5\xb8\x83\xe8\xbd\xae\xe6\xad\xa3\xe8\xbd\xac\x34", // 布轮正转4
[STR_ROLL_REV_4] = "\xe5\xb8\x83\xe8\xbd\xae\xe5\x8f\x8d\xe8\xbd\xac\x34", // 布轮反转4
[STR_ROLL_FWD_5] = "\xe5\xb8\x83\xe8\xbd\xae\xe6\xad\xa3\xe8\xbd\xac\x35", // 布轮正转5
[STR_ROLL_REV_5] = "\xe5\xb8\x83\xe8\xbd\xae\xe5\x8f\x8d\xe8\xbd\xac\x35", // 布轮反转5
[STR_ROLL_FWD_6] = "\xe5\xb8\x83\xe8\xbd\xae\xe6\xad\xa3\xe8\xbd\xac\x36", // 布轮正转6
[STR_ROLL_REV_6] = "\xe5\xb8\x83\xe8\xbd\xae\xe5\x8f\x8d\xe8\xbd\xac\x36", // 布轮反转6
[STR_TANK1_PUMP] = "\xe8\x8d\xaf\xe7\xbc\xb8\x31\xe6\xb3\xb5", // 药缸1泵
[STR_TANK1_WATER_IN_1] = "\xe8\x8d\xaf\xe7\xbc\xb8\x31\xe5\x85\xa5\xe6\xb0\xb4\x31", // 药缸1入水1
[STR_TANK1_WATER_IN_2] = "\xe8\x8d\xaf\xe7\xbc\xb8\x31\xe5\x85\xa5\xe6\xb0\xb4\x32", // 药缸1入水2
[STR_TANK1_RETURN_WATER] = "\xe8\x8d\xaf\xe7\xbc\xb8\x31\xe5\x9b\x9e\xe6\xb0\xb4", // 药缸1回水
[STR_TANK1_HEAT] = "\xe8\x8d\xaf\xe7\xbc\xb8\x31\xe5\x8a\xa0\xe7\x83\xad", // 药缸1加热
[STR_TANK1_STIRRER] = "\xe8\x8d\xaf\xe7\xbc\xb8\x31\xe6\x90\x85\xe6\x8b\x8c\xe5\x99\xa8", // 药缸1搅拌器
[STR_TANK1_STIR_VALVE] = "\xe8\x8d\xaf\xe7\xbc\xb8\x31\xe6\x90\x85\xe6\x8b\x8c\xe9\x98\x80", // 药缸1搅拌阀
[STR_TANK1_FILL_VALVE] = "\xe8\x8d\xaf\xe7\xbc\xb8\x31\xe5\x8a\xa0\xe6\x96\x99\xe9\x98\x80", // 药缸1加料阀
[STR_TANK1_BYPASS_VALVE] = "\xe8\x8d\xaf\xe7\xbc\xb8\x31\xe6\xaf\x94\xe4\xbe\x8b\xe4\xbe\xa7\xe9\x80\x9a\xe9\x98\x80", // 药缸1比例旁通阀
[STR_TANK1_DRAIN_VALVE] = "\xe8\x8d\xaf\xe7\xbc\xb8\x31\xe6\x8e\x92\xe6\xb0\xb4\xe9\x98\x80", // 药缸1排水阀
[STR_TANK2_PUMP] = "\xe8\x8d\xaf\xe7\xbc\xb8\x32\xe6\xb3\xb5", // 药缸2泵
[STR_TANK2_WATER_IN_1] = "\xe8\x8d\xaf\xe7\xbc\xb8\x32\xe5\x85\xa5\xe6\xb0\xb4\x31", // 药缸2入水1
[STR_TANK2_WATER_IN_2] = "\xe8\x8d\xaf\xe7\xbc\xb8\x32\xe5\x85\xa5\xe6\xb0\xb4\x32", // 药缸2入水2
[STR_TANK2_RETURN_WATER] = "\xe8\x8d\xaf\xe7\xbc\xb8\x32\xe5\x9b\x9e\xe6\xb0\xb4", // 药缸2回水
[STR_TANK2_HEAT] = "\xe8\x8d\xaf\xe7\xbc\xb8\x32\xe5\x8a\xa0\xe7\x83\xad", // 药缸2加热
[STR_TANK2_STIRRER] = "\xe8\x8d\xaf\xe7\xbc\xb8\x32\xe6\x90\x85\xe6\x8b\x8c\xe5\x99\xa8", // 药缸2搅拌器
[STR_TANK2_STIR_VALVE] = "\xe8\x8d\xaf\xe7\xbc\xb8\x32\xe6\x90\x85\xe6\x8b\x8c\xe9\x98\x80", // 药缸2搅拌阀
[STR_TANK2_FILL_VALVE] = "\xe8\x8d\xaf\xe7\xbc\xb8\x32\xe5\x8a\xa0\xe6\x96\x99\xe9\x98\x80", // 药缸2加料阀
[STR_TANK2_BYPASS_VALVE] = "\xe8\x8d\xaf\xe7\xbc\xb8\x32\xe6\xaf\x94\xe4\xbe\x8b\xe4\xbe\xa7\xe9\x80\x9a\xe9\x98\x80", // 药缸2比例旁通阀
[STR_TANK2_DRAIN_VALVE] = "\xe8\x8d\xaf\xe7\xbc\xb8\x32\xe6\x8e\x92\xe6\xb0\xb4\xe9\x98\x80", // 药缸2排水阀
[STR_TANK3_PUMP] = "\xe8\x8d\xaf\xe7\xbc\xb8\x33\xe6\xb3\xb5", // 药缸3泵
[STR_TANK3_WATER_IN_1] = "\xe8\x8d\xaf\xe7\xbc\xb8\x33\xe5\x85\xa5\xe6\xb0\xb4\x31", // 药缸3入水1
[STR_TANK3_WATER_IN_2] = "\xe8\x8d\xaf\xe7\xbc\xb8\x33\xe5\x85\xa5\xe6\xb0\xb4\x32", // 药缸3入水2
[STR_TANK3_RETURN_WATER] = "\xe8\x8d\xaf\xe7\xbc\xb8\x33\xe5\x9b\x9e\xe6\xb0\xb4", // 药缸3回水
[STR_TANK3_HEAT] = "\xe8\x8d\xaf\xe7\xbc\xb8\x33\xe5\x8a\xa0\xe7\x83\xad", // 药缸3加热
[STR_TANK3_STIRRER] = "\xe8\x8d\xaf\xe7\xbc\xb8\x33\xe6\x90\x85\xe6\x8b\x8c\xe5\x99\xa8", // 药缸3搅拌器
[STR_TANK3_STIR_VALVE] = "\xe8\x8d\xaf\xe7\xbc\xb8\x33\xe6\x90\x85\xe6\x8b\x8c\xe9\x98\x80", // 药缸3搅拌阀
[STR_TANK3_FILL_VALVE] = "\xe8\x8d\xaf\xe7\xbc\xb8\x33\xe5\x8a\xa0\xe6\x96\x99\xe9\x98\x80", // 药缸3加料阀
[STR_TANK3_BYPASS_VALVE] = "\xe8\x8d\xaf\xe7\xbc\xb8\x33\xe6\xaf\x94\xe4\xbe\x8b\xe4\xbe\xa7\xe9\x80\x9a\xe9\x98\x80", // 药缸3比例旁通阀
[STR_TANK3_DRAIN_VALVE] = "\xe8\x8d\xaf\xe7\xbc\xb8\x33\xe6\x8e\x92\xe6\xb0\xb4\xe9\x98\x80", // 药缸3排水阀
[STR_ROLL_REV_12] = "\xe5\xb8\x83\xe8\xbd\xae\xe5\x8f\x8d\xe8\xbd\xac\x31\x32", // 布轮反转12
[STR_DRAIN_PUMP] = "\xe6\x8e\x92\xe6\xb0\xb4\xe6\xb3\xb5", // 排水泵
[STR_HEAT_EXCHANGER_CONDENSATE] = "\xe7\x83\xad\xe4\xba\xa4\xe6\x8d\xa2\xe5\x99\xa8\xe5\x86\xb7\xe5\x87\x9d\xe6\xb0\xb4", // 热交换器冷凝水
[STR_HEAT_EXCHANGER_COOLING_WATER] = "\xe4\xba\xa4\xe6\x8d\xa2\xe5\x99\xa8\xe6\x8e\x92\xe5\x86\xb7\xe5\x8d\xb4\xe6\xb0\xb4", // 交换器排冷却水
[STR_COMM_COUNTER] = "\xE9\x80\x9A\xE8\xAE\xAF\xE8\xAE\xA1\xE6\x95\xB0\xE5\x99\xA8", // "通讯计数器"
[STR_COMM_FAULT_COUNTER] = "\xE9\x80\x9A\xE8\xAE\xAF\xE5\xBC\x82\xE5\xB8\xB8\xE8\xAE\xA1\xE6\x95\xB0\xE5\x99\xA8", // "通讯异常计数器"
[STR_CYCLE_TEMP_RISE_SET] = "\xE5\x91\xA8\xE6\x9C\x9F\xE6\xB8\xA9\xE5\x8D\x87\xE8\xAE\xBE\xE5\xAE\x9A", // "周期温升设定"
[STR_TEMP_CONTROL_RATIO] = "\xE6\xB8\xA9\xE6\x8E\xA7\xE6\xAF\x94\xE4\xBE\x8B", // "温控比例"
[STR_CALCULATED_TEMP] = "\xE8\xAE\xA1\xE7\xAE\x97\xE6\xB8\xA9\xE5\xBA\xA6", // "计算温度"
[STR_FLOW_COUNTER] = "\xE6\xB5\x81\xE9\x87\x8F\xE8\xAE\xA1\xE6\x95\xB0\xE5\x99\xA8", // "流量计数器"
[STR_GLOBAL_FLOW_COUNTER] = "\xE5\x85\xA8\xE5\xB1\x80\xE6\xB5\x81\xE9\x87\x8F\xE8\xAE\xA1\xE6\x95\xB0\xE5\x99\xA8", // "全局流量计数器"
[STR_NOZZLE_SETTING] = "\xE5\x96\xB7\xE5\xA4\xB4\xE8\xAE\xBE\xE5\xAE\x9A", // "喷头设定"
[STR_MAIN_PUMP_SPEED_SET] = "\xE4\xB8\xBB\xE6\xB3\xB5\xE9\x80\x9F\xE5\xBA\xA6\xE8\xAE\xBE\xE5\xAE\x9A", // "主泵速度设定"
[STR_FAN_SPEED_SET] = "\xE9\xA3\x8E\xE6\x9C\xBA\xE9\x80\x9F\xE5\xBA\xA6\xE8\xAE\xBE\xE5\xAE\x9A", // "风机速度设定"
[STR_TARGET_PH_SET] = "\xE7\x9B\xAE\xE6\xA0\x87PH\xE8\xAE\xBE\xE5\xAE\x9A", // "目标PH设定"
[STR_PH_DEVICE_STATUS] = "PH\xE8\xAE\xBE\xE5\xA4\x87\xE7\x8A\xB6\xE6\x80\x81" // "PH设备状态"
};
const char* lang_get_str(str_id_t id) {
if (id >= STR_COUNT) return "???";
return current_lang == LANG_ZH ? text_zh[id] : text_en[id];
}
void lang_set(lang_t lang) {
current_lang = lang;
// 可选:发送消息通知 UI 刷新
}

214
applications/Language/language.h

@ -0,0 +1,214 @@
// language.h
#ifndef APPLICATIONS_LANGUAGE_H
#define APPLICATIONS_LANGUAGE_H
typedef enum {
STR_EMERGENCY_STOP,
STR_TEMP_LOCK,
STR_PRESSURE_LOCK,
STR_CALL_CONFIRM,
STR_MANUAL,
STR_FAN_START,
STR_FAN_FAULT,
STR_MAIN_PUMP_FAULT,
STR_ROLL_RESET,
STR_FABRIC_FAULT,
STR_ELEC_FAULT,
STR_MATERIAL_PUMP1,
STR_MATERIAL_PUMP2,
STR_MATERIAL_PUMP3,
STR_MANUAL1,
STR_COIL_CAR1,
STR_FABRIC_HEAD1,
STR_ROLL_FWD1,
STR_ROLL_REV1,
STR_ROLL_OVERLOAD1,
STR_BLOCK_FABRIC1,
STR_MATERIAL1_HIGH,
STR_MATERIAL1_LOW,
STR_MATERIAL1_IN,
STR_MATERIAL1_OUT,
STR_MATERIAL1_RECIRC,
STR_MATERIAL1_BOTTOM,
STR_MATERIAL1_FILL,
STR_MATERIAL1_HEAT,
STR_MATERIAL2_HIGH,
STR_MATERIAL2_LOW,
STR_MATERIAL2_IN,
STR_MATERIAL2_OUT,
STR_MATERIAL2_RECIRC,
STR_MATERIAL2_BOTTOM,
STR_MATERIAL2_FILL,
STR_MATERIAL2_HEAT,
STR_MATERIAL2_STIR,
STR_MANUAL2,
STR_COIL_CAR2,
STR_FABRIC_HEAD2,
STR_ROLL_FWD2,
STR_ROLL_REV2,
STR_ROLL_OVERLOAD2,
STR_BLOCK_FABRIC2,
STR_MANUAL3,
STR_COIL_CAR3,
STR_FABRIC_HEAD3,
STR_ROLL_FWD3,
STR_ROLL_REV3,
STR_ROLL_OVERLOAD3,
STR_BLOCK_FABRIC3,
STR_MANUAL4,
STR_COIL_CAR4,
STR_FABRIC_HEAD4,
STR_ROLL_FWD4,
STR_ROLL_REV4,
STR_ROLL_OVERLOAD4,
STR_BLOCK_FABRIC4,
STR_MANUAL5,
STR_COIL_CAR5,
STR_FABRIC_HEAD5,
STR_ROLL_FWD5,
STR_ROLL_REV5,
STR_ROLL_OVERLOAD5,
STR_BLOCK_FABRIC5,
STR_MANUAL6,
STR_COIL_CAR6,
STR_FABRIC_HEAD6,
STR_ROLL_FWD6,
STR_ROLL_REV6,
STR_ROLL_OVERLOAD6,
STR_BLOCK_FABRIC6,
STR_MATERIAL3_HIGH,
STR_MATERIAL3_LOW,
STR_MATERIAL3_IN,
STR_MATERIAL3_OUT,
STR_MATERIAL3_RECIRC,
STR_MATERIAL3_BOTTOM,
STR_MATERIAL3_FILL,
STR_MATERIAL3_HEAT,
STR_MATERIAL3_STIR,
STR_AIO_TEMP1,
STR_AIO_TEMP2,
STR_AIO_TEMP3,
STR_AIO_TEMP4,
STR_AIO_TEMP5,
STR_AIO_FLOW1,
STR_AIO_LEVEL1,
STR_AIO_LEVEL2,
STR_AIO_LEVEL3,
STR_AIO_LEVEL4,
STR_AIO_MAIN_PRESSURE,
STR_AIO_NOZZLE_PRESSURE,
STR_AIO_NOZZLE_FLOW,
STR_AIO_AIR_FLOW,
STR_AIO_POWER,
STR_AIO_FABRIC_CYCLE1,
STR_AIO_FABRIC_CYCLE2,
STR_AIO_FABRIC_CYCLE3,
STR_AIO_FABRIC_CYCLE4,
STR_AIO_FABRIC_CYCLE5,
STR_AIO_FABRIC_CYCLE6,
STR_AIO_PH,
STR_AIO_HEAT_RATIO,
STR_AIO_COOL_RATIO,
STR_AIO_MAIN_PUMP_SPEED,
STR_AIO_FAN_SPEED,
STR_AIO_FILL_RATIO1,
STR_AIO_FILL_RATIO2,
STR_AIO_FILL_RATIO3,
STR_AIO_FABRIC_SWING,
STR_AIO_LIFT1,
STR_AIO_LIFT2,
STR_AIO_LIFT3,
STR_AIO_LIFT4,
STR_AIO_LIFT5,
STR_AIO_LIFT6,
STR_RED,
STR_GREEN,
STR_YELLOW,
STR_ALARM,
STR_HAND_AUTO,
STR_CONFIRM,
STR_PRESSURIZE_VALVE,
STR_DEPRESSURIZE_VALVE,
STR_HEAT_UP_VALVE,
STR_COOL_DOWN_VALVE,
STR_MAIN_PUMP_START,
STR_WATER_IN_1,
STR_WATER_IN_2,
STR_WATER_IN_3,
STR_WATER_IN_4,
STR_WATER_OUT_1,
STR_WATER_OUT_2,
STR_WATER_OUT_3,
STR_OVERFLOW_VALVE,
STR_ROLL_FWD_1,
STR_ROLL_REV_1,
STR_ROLL_FWD_2,
STR_ROLL_REV_2,
STR_ROLL_FWD_3,
STR_ROLL_REV_3,
STR_ROLL_FWD_4,
STR_ROLL_REV_4,
STR_ROLL_FWD_5,
STR_ROLL_REV_5,
STR_ROLL_FWD_6,
STR_ROLL_REV_6,
STR_TANK1_PUMP,
STR_TANK1_WATER_IN_1,
STR_TANK1_WATER_IN_2,
STR_TANK1_RETURN_WATER,
STR_TANK1_HEAT,
STR_TANK1_STIRRER,
STR_TANK1_STIR_VALVE,
STR_TANK1_FILL_VALVE,
STR_TANK1_BYPASS_VALVE,
STR_TANK1_DRAIN_VALVE,
STR_TANK2_PUMP,
STR_TANK2_WATER_IN_1,
STR_TANK2_WATER_IN_2,
STR_TANK2_RETURN_WATER,
STR_TANK2_HEAT,
STR_TANK2_STIRRER,
STR_TANK2_STIR_VALVE,
STR_TANK2_FILL_VALVE,
STR_TANK2_BYPASS_VALVE,
STR_TANK2_DRAIN_VALVE,
STR_TANK3_PUMP,
STR_TANK3_WATER_IN_1,
STR_TANK3_WATER_IN_2,
STR_TANK3_RETURN_WATER,
STR_TANK3_HEAT,
STR_TANK3_STIRRER,
STR_TANK3_STIR_VALVE,
STR_TANK3_FILL_VALVE,
STR_TANK3_BYPASS_VALVE,
STR_TANK3_DRAIN_VALVE,
STR_ROLL_REV_12,
STR_DRAIN_PUMP,
STR_HEAT_EXCHANGER_CONDENSATE,
STR_HEAT_EXCHANGER_COOLING_WATER,
STR_COMM_COUNTER,
STR_COMM_FAULT_COUNTER,
STR_CYCLE_TEMP_RISE_SET,
STR_TEMP_CONTROL_RATIO,
STR_CALCULATED_TEMP,
STR_FLOW_COUNTER,
STR_GLOBAL_FLOW_COUNTER,
STR_NOZZLE_SETTING,
STR_MAIN_PUMP_SPEED_SET,
STR_FAN_SPEED_SET,
STR_TARGET_PH_SET,
STR_PH_DEVICE_STATUS,
STR_COUNT // 自动计数
} str_id_t;
typedef enum {
LANG_EN,
LANG_ZH
} lang_t;
// 外部函数
const char* lang_get_str(str_id_t id);
void lang_set(lang_t lang);
extern lang_t current_lang;
#endif

2
applications/main.c

@ -15,6 +15,8 @@
#include <rtdbg.h>
#include "RUN_LED.h"
#include "DB_SQLite.h"
#include "DATA_comm.h"
#include "DATA_uart.h"
#define DBG_TAG "main"
#define DBG_LVL DBG_LOG

Loading…
Cancel
Save