📄 rtuconf.cpp
字号:
#include "sc_cfg.h"
#include "common.h"
#include "extern.h"
#define TYPE "TYPE"
#define AD_BASE "AD_BASE"
#define DIO1_BASE "DIO1_BASE"
#define DIO2_BASE "DIO2_BASE"
#define SIO1_BASE "SIO1_BASE"
#define SIO2_BASE "SIO2_BASE"
#define SIO1_TOTAL "SIO1_TOTAL"
#define SIO2_TOTAL "SIO2_TOTAL"
#define SIO1_INT "SIO1_INT"
#define SIO2_INT "SIO2_INT"
#define SETCOM "SET_COM"
#define PROTOCOM "PROTOCOL_COM"
#define CHK_TM_PORT "CHECK_TIME_PORT"
#define DO_YK_PORT "DO_YK_PORT"
#define YK_ESC_TM "YK_ESCAPE_TIME"
#define BD_YX "BOARD_YX"
#define BD_YC "BOARD_YC"
#define BD_YM "BOARD_YM"
#define BD_YK "BOARD_YK"
#define SUM_YX "TOTAL_YX"
#define SUM_YC "TOTAL_YC"
#define SUM_YM "TOTAL_YM"
#define SUM_YK "TOTAL_YK"
#define is_it(x) if (!strcmp(name,x))
#define is_it_n(x,y) if (!strncmp(name,x,y))
PortSet_t PortSet[MAX_PORT];
INT8U ProtocolSet[MAX_PORT][PROTOCOL_SET_SIZE];
YxDefine_t far YxDefine[MAX_YX_LIMIT];
YcDefine_t far YcDefine[MAX_YC_LIMIT];
YmDefine_t far YmDefine[MAX_YM_LIMIT];
YkDefine_t far YkDefine[MAX_YK_LIMIT];
INT8U plattype;
INT16U _adbase;
INT16U _dio1base;
INT16U _dio2base;
INT16U _sio1base;
INT16U _sio2base;
INT8U _sio1total;
INT8U _sio2total;
INT8U _sio1int;
INT8U _sio2int;
INT8U _CheckTimePort;
INT8U _DoYkPort;
INT8U _YkEscapeTime;
INT16U _TotalBDYx;
INT16U _TotalBDYc;
INT16U _TotalBDYm;
INT16U _TotalBDYk;
INT16U _TotalYx;
INT16U _TotalYc;
INT16U _TotalYm;
INT16U _TotalYk;
void LoadConfig(void);
static void LoadYxConfig(void);
static void LoadYcConfig(void);
static void LoadYmConfig(void);
static void LoadYkConfig(void);
static void LoadRTUConfig(void);
static void TranslateSingle(FILE *fp);
static void TranslateYx(FILE *fp, YxDefine_t *matrix);
static void TranslateYc(FILE *fp, YcDefine_t *matrix);
static void TranslateYm(FILE *fp, YmDefine_t *matrix);
static void TranslateYk(FILE *fp, YkDefine_t *matrix);
static void set_values(char *name, char *value, int ncount);
PortSet_t *GetPortSet(INT8U portno)
{
if (portno >= MAX_PORT) ErrorExit("get portno exceed limit");
return (&PortSet[portno]);
}
INT16U GetTotalYxNum()
{
return _TotalYx;
}
INT16U GetTotalYcNum()
{
return _TotalYc;
}
INT16U GetTotalYmNum()
{
return _TotalYm;
}
INT16U GetTotalYkNum()
{
return _TotalYk;
}
YxDefine_t *GetYxDefine(int index)
{
if (index >= MAX_YX_LIMIT) ErrorExit("get yx define exceed limit");
return &(YxDefine[index]);
}
YcDefine_t *GetYcDefine(int index)
{
if (index >= MAX_YC_LIMIT) ErrorExit("get yc define exceed limit");
return &(YcDefine[index]);
}
YmDefine_t *GetYmDefine(int index)
{
if (index >= MAX_YM_LIMIT) ErrorExit("get ym define exceed limit");
return &(YmDefine[index]);
}
YkDefine_t *GetYkDefine(int index)
{
if (index >= MAX_YK_LIMIT) ErrorExit("get yk define exceed limit");
return &(YkDefine[index]);
}
INT8U GetProtocolSet(INT8U portno, int index)
{
if (portno >= MAX_PORT || index >= PROTOCOL_SET_SIZE)
ErrorExit("get protocol set exceed limit");
return ProtocolSet[portno][index];
}
static void set_values(char *name, char *value, int ncount)
{
int portno;
strupr(name);
is_it(TYPE) plattype = atoi(value);
else is_it(AD_BASE) sscanf(value, "%x", &_adbase);
else is_it(DIO1_BASE) sscanf(value, "%x", &_dio1base);
else is_it(DIO2_BASE) sscanf(value, "%x", &_dio2base);
else is_it(SIO1_BASE) sscanf(value, "%x", &_sio1base);
else is_it(SIO2_BASE) sscanf(value, "%x", &_sio2base);
else is_it(SIO1_TOTAL) _sio1total = atoi(value);
else is_it(SIO2_TOTAL) _sio2total = atoi(value);
else is_it(SIO1_INT)
_sio1int = atoi(value);
else is_it(SIO2_INT)
_sio2int = atoi(value);
else is_it(CHK_TM_PORT) _CheckTimePort = atoi(value);
else is_it(DO_YK_PORT) _DoYkPort = atoi(value);
else is_it(YK_ESC_TM) _YkEscapeTime = atoi(value);
else is_it(BD_YX) _TotalBDYx = atoi(value);
else is_it(BD_YC) _TotalBDYc = atoi(value);
else is_it(BD_YM) _TotalBDYm = atoi(value);
else is_it(BD_YK) _TotalBDYk = atoi(value);
else is_it(SUM_YX) _TotalYx = atoi(value);
else is_it(SUM_YC) _TotalYc = atoi(value);
else is_it(SUM_YM) _TotalYm = atoi(value);
else is_it(SUM_YK) _TotalYk = atoi(value);
else is_it_n(SETCOM, 7) {
portno = atoi(&name[7]) - 1;
if (portno < 0 || portno >= MAX_PORT) {
ErrorExit("port is unknown");
}
switch (ncount) {
case 0:
PortSet[portno].Baud = atoi(value); break;
case 1:
PortSet[portno].DataBit = atoi(value); break;
case 2:
PortSet[portno].StopBit = atoi(value); break;
case 3:
PortSet[portno].Parity = atoi(value); break;
case 4:
PortSet[portno].isWork = atoi(value); break;
case 5:
PortSet[portno].Protocol = atoi(value); break;
case 6:
PortSet[portno].DevStartAddr = atoi(value); break;
case 7:
PortSet[portno].DevEndAddr = atoi(value); break;
}
}
else is_it_n(PROTOCOM, 12) {
portno = atoi(&name[12]) - 1;
if (portno < 0 || portno >= MAX_PORT) {
ErrorExit("port is unknown");
}
if (ncount >= PROTOCOL_SET_SIZE) {
ErrorExit("protocol set too much item");
}
ProtocolSet[portno][ncount] = atoi(value);
}
}
static void TranslateSingle(FILE *fp)
{
char name[40];
char value[80], ch[2];
int mode, ncount;
*name = *value = mode = ch[1] = ncount = 0;
while (fread(ch, 1, 1, fp) == 1) {
switch (*ch) {
case ' ':
case '\t':
break;
case '=':
if (!mode) mode = 1;
break;
case '\"':
case '#':
case ';':
mode = 2;
break;
case ',':
if (*name && *value)
set_values(name, value, ncount);
*value = 0;
ncount++;
break;
case '\n':
case '\r':
if (*name && *value)
set_values(name, value, ncount);
*name = *value = mode = ncount = 0;
break;
default:
switch (mode) {
case 0 :
strcat(name, ch);
break;
case 1 :
strcat(value, ch);
break;
}
break;
}
}
}
static void TranslateYx(FILE *fp, YxDefine_t *matrix)
{
char value[80], ch[2];
int mode, sequence;
*value = mode = ch[1] = 0;
while (fread(ch, 1, 1, fp) == 1) {
switch (*ch) {
case ' ':
case '\t':
break;
case '\"':
case '#':
case ';':
mode = 2; /* commerce */
break;
case '\n':
case '\r':
if (mode == 0) {
sequence = atoi(value);
if (sequence < MAX_YX_LIMIT) {
sscanf(value, "%*u,%u,%u,%u,%u,%u,%u", &matrix[sequence].portno, &matrix[sequence].devno,
&matrix[sequence].type, &matrix[sequence].info, &matrix[sequence].reset,&matrix[sequence].channel);
if (matrix[sequence].reset) matrix[sequence].reset = TRUE;
else matrix[sequence].reset = FALSE;
}
}
*value = mode = 0;
break;
default:
if (mode == 0) strcat(value, ch);
break;
}
}
}
static void TranslateYc(FILE *fp, YcDefine_t *matrix)
{
char value[80], ch[2];
int mode, sequence;
*value = mode = ch[1] = 0;
while (fread(ch, 1, 1, fp) == 1) {
switch (*ch) {
case ' ':
case '\t':
break;
case '\"':
case '#':
case ';':
mode = 2; /* commerce */
break;
case '\n':
case '\r':
if (mode == 0) {
sequence = atoi(value);
if (sequence < MAX_YC_LIMIT) {
sscanf(value, "%*u,%u,%u,%u,%u,%u", &matrix[sequence].portno, &matrix[sequence].devno,
&matrix[sequence].type, &matrix[sequence].info, &matrix[sequence].order);
}
}
*value = mode = 0;
break;
default:
if (mode == 0) strcat(value, ch);
break;
}
}
}
static void TranslateYm(FILE *fp, YmDefine_t *matrix)
{
char value[80], ch[2];
int mode, sequence;
*value = mode = ch[1] = 0;
while (fread(ch, 1, 1, fp) == 1) {
switch (*ch) {
case ' ':
case '\t':
break;
case '\"':
case '#':
case ';':
mode = 2; /* commerce */
break;
case '\n':
case '\r':
if (mode == 0) {
sequence = atoi(value);
if (sequence < MAX_YM_LIMIT) {
sscanf(value, "%*u,%u,%u,%u,%u,%u", &matrix[sequence].portno, &matrix[sequence].devno,
&matrix[sequence].type, &matrix[sequence].info, &matrix[sequence].datalen);
}
}
*value = mode = 0;
break;
default:
if (mode == 0) strcat(value, ch);
break;
}
}
}
static void TranslateYk(FILE *fp, YkDefine_t *matrix)
{
char value[80], ch[2];
int mode, sequence;
*value = mode = ch[1] = 0;
while (fread(ch, 1, 1, fp) == 1) {
switch (*ch) {
case ' ':
case '\t':
break;
case '\"':
case '#':
case ';':
mode = 2; /* commerce */
break;
case '\n':
case '\r':
if (mode == 0) {
sequence = atoi(value);
if (sequence < MAX_YK_LIMIT) {
sscanf(value, "%*u,%u,%u,%u,%u", &matrix[sequence].portno,
&matrix[sequence].devno, &matrix[sequence].type, &matrix[sequence].info);
}
}
*value = mode = 0;
break;
default:
if (mode == 0) strcat(value, ch);
break;
}
}
}
void LoadConfig(void)
{
LoadRTUConfig();
LoadYxConfig();
LoadYcConfig();
LoadYmConfig();
LoadYkConfig();
}
static void LoadRTUConfig(void)
{
FILE *fp;
if ((fp = fopen("rtuset.cfg", "rt")) == NULL) {
ErrorExit("can't open rtuset.cfg");
}
TranslateSingle(fp);
fclose(fp);
}
static void LoadYxConfig(void)
{
FILE *fp;
if ((fp = fopen("yxtable.cfg", "rt")) == NULL) {
ErrorExit("can't open yxtable.cfg");
}
TranslateYx(fp, YxDefine);
fclose(fp);
}
static void LoadYcConfig(void)
{
FILE *fp;
if ((fp = fopen("yctable.cfg", "rt")) == NULL) {
ErrorExit("can't open yctable.cfg");
}
TranslateYc(fp, YcDefine);
fclose(fp);
}
static void LoadYmConfig(void)
{
FILE *fp;
if ((fp = fopen("ymtable.cfg", "rt")) == NULL) {
ErrorExit("can't open ymtable.cfg");
}
TranslateYm(fp, YmDefine);
fclose(fp);
}
static void LoadYkConfig(void)
{
FILE *fp;
if ((fp = fopen("yktable.cfg", "rt")) == NULL) {
ErrorExit("can't open yktable.cfg");
}
TranslateYk(fp, YkDefine);
fclose(fp);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -