Здравствуйте в этой теме хотел поговорить о совместной работе пк и контроллера по RS485. Задача следующая пояснить как организовать список команд в контроллере которые выполняли бы определенные действия после посылки через терминал Имя этой команды. и получение ответа в конце выполнения. Для начало привожу пример кода
/************************Сравнение массивов************/
bit ArrayCompare (char x[10], char ref[10] ) {
//
char i=0;
char bt=1;
if (x!=0) {
while (ref[i] != '\0') {
if (x[i]==ref[i]) bt=1&&bt;
else bt=0&&bt;
i++;
}
}
if (bt) return 1 ;
if(bt!=1)return 0;
}
/*********** сравниваемые переменные***************** */
char VariableCompare (char x [50]) {
char Bstp=0;
const char
vari[30]={"|WRITE||READ|!"}; команды которые которые доступны через терминал
char numComm=0;
char ty[10];
char i=0;
do {
if (vari[i]=='|' && vari[i+1]=='|') { если || то +1 к счетчику
numComm++;
}
if (vari[i]=='|' && vari[i+1]!='|') { если |W (короче если после символа | появляется текст то присвоить этот тест строковому массиву ty[10])
i++;
while (vari[i]!='|'){
ty[10]=vari[i];
i++;
}
}
if (vari[i]=='\0'){ если |! конец архива команд вернет 255
Bstp=1;
numComm=255;
}
i++;
}while (ArrayCompare(x[10], ty[10]) || Bstp ); Пока Сравниваемые массивы (тобиш одна из команд контроллера и команда терминала не совпадут или не дастигнут конец массива команд делать выше сказанную хренатень. )))
return numComm;
}
он не совсем правильно работает .
Логика следующая я получил какую то текстовю переменную (команду) например "WRITE" из буфера при запуске функциии Variable Compare эту текстовую команду я должен найти в "vari[30]" при этом команды в строковом массиве разделены || а конец массива |! сравнивать естественно я должен по буквам начиная с 2 символа в массиве |WRITE||READ|! также должен быть счетчик команд. если команда WRITE есть то возвращает 1 если команда READ есть то возвращает 2 то есть || при переходе этих двух символов счетчик должен увеличиваться на 1 и если сравнение удачно то вернет 2. Может быть кто то по другому делал . все варианты принимаются
Раздел: Алгоритмы
/************************Сравнение массивов************/
bit ArrayCompare (char x[10], char ref[10] ) {
//
char i=0;
char bt=1;
if (x!=0) {
while (ref[i] != '\0') {
if (x[i]==ref[i]) bt=1&&bt;
else bt=0&&bt;
i++;
}
}
if (bt) return 1 ;
if(bt!=1)return 0;
}
/*********** сравниваемые переменные***************** */
char VariableCompare (char x [50]) {
char Bstp=0;
const char
vari[30]={"|WRITE||READ|!"}; команды которые которые доступны через терминал
char numComm=0;
char ty[10];
char i=0;
do {
if (vari[i]=='|' && vari[i+1]=='|') { если || то +1 к счетчику
numComm++;
}
if (vari[i]=='|' && vari[i+1]!='|') { если |W (короче если после символа | появляется текст то присвоить этот тест строковому массиву ty[10])
i++;
while (vari[i]!='|'){
ty[10]=vari[i];
i++;
}
}
if (vari[i]=='\0'){ если |! конец архива команд вернет 255
Bstp=1;
numComm=255;
}
i++;
}while (ArrayCompare(x[10], ty[10]) || Bstp ); Пока Сравниваемые массивы (тобиш одна из команд контроллера и команда терминала не совпадут или не дастигнут конец массива команд делать выше сказанную хренатень. )))
return numComm;
}
он не совсем правильно работает .
Логика следующая я получил какую то текстовю переменную (команду) например "WRITE" из буфера при запуске функциии Variable Compare эту текстовую команду я должен найти в "vari[30]" при этом команды в строковом массиве разделены || а конец массива |! сравнивать естественно я должен по буквам начиная с 2 символа в массиве |WRITE||READ|! также должен быть счетчик команд. если команда WRITE есть то возвращает 1 если команда READ есть то возвращает 2 то есть || при переходе этих двух символов счетчик должен увеличиваться на 1 и если сравнение удачно то вернет 2. Может быть кто то по другому делал . все варианты принимаются
Раздел: Алгоритмы