|
мини PLC. |
|
|
|
Jan 27 2016, 08:11
|
Профессионал
    
Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075

|
я хочу програмировать задачи - состояния на выходе в зависимости от условий на входе. этакий мини Programmable Logic Controller. для примера код Код // условие на входе If (temp > 30 && hum > 80 || input1 ==1) { // условие на выходе output2 = 1; } Где temp, hum - глобальные переменные но задаваемые пользователем через теринал. пользователь програмирует такое условие следующим образом. Код task 1 param 1 temp > 30 AND task 1 param 2 hum > 80 OR task 1 in 1 1 task 1 out 2 1 или так Код task 1 param 1 temp > 30 task 1 param 2 hum > 80 task 1 in 1 1 task 1 param 1 AND param 2 OR in 1 task 1 out 2 1 и я это сохраняю и потом проверяю и если условие выполняется - включаю\выключаю нужные выходы. вопрос есть ли какие то готовые библиотеки а-ля-PLC?
Сообщение отредактировал Jenya7 - Jan 27 2016, 08:18
|
|
|
|
|
 |
Ответов
|
Jan 27 2016, 09:33
|
Профессионал
    
Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075

|
я подумал сделать что то вроде этого создал структуру для параметров, входов и выходов. CODE struct sTaskParams { float *var; //var compare limit float limit; uint8_t compare; //0 = '==', 1 = '>', 2 = '<', 3 = '>=', 4 = '<=', 5 = '!=' uint8_t logicGate; //0=and, 1=or uint8_t enable; };
struct sTaskDigInput { uint8_t enable; uint8_t inNum; uint8_t inState; uint8_t logicGate; };
struct sTaskOutput { uint8_t enable; uint8_t outNum; uint8_t outState; };
struct sTaskCondition { uint8_t result; uint8_t logic; }; потом создал задачу в которой жестко задал 10 параметров 8 входов и 8 выходов. Код struct sDailyTask { uint8_t enable; //ON/OFF uint8_t state; uint32_t condIdx; struct sTaskParam taskParams[MAX_PARAMS]; struct sTaskDigInput taskDigInputs[MAX_DIG_INPUTS]; struct sTaskOutput taskOutputs[MAX_OUTPUTS]; struct sTaskCondition taskCondition[MAX_CONDITIONS]; }; ну и массив из 10 задач. Код struct sDailyTask dailyTask[MAX_TASKS]; в принципе если логика идет подряд Код param1 && param2 || input1 то так я понимаю как обработать условие проверяю параметры Код uint32_t TASKER_ChekParameters(uint32_t task_num) { uint32_t glob_cond=0; for (int i = 0; i < sizeof(dailyTask[task_num].taskParams); i++) { if (dailyTask[task_num].taskParams[i].enable) { dailyTask[task_num].taskCondition[dailyTask[task_num].condIdx].result = TASKER_EvaluateParamCondition(dailyTasktask_num].taskParams[i].variable, dailyTask[task_num].taskParams[i].limit, dailyTask[task_num].taskParams[i].compare);
dailyTask[task_num].taskCondition[dailyTask[task_num].condIdx].logic = dailyTask[task_num].taskParams[i].logicGate; dailyTask[task_num].condIdx++; } } проверяю входы Код uint32_t TASKER_CheckInputs(uint32_t task_num) { int size = sizeof(dailyTask[task_num].taskDigInputs); for (int i = 0; i < size; i++) { if (dailyTask[task_num].taskDigInputs[i].enable) { dailyTask[task_num].taskCondition[dailyTask[task_num].condIdx].result = TASKER_EvaluateInputCondition(dailyTask[task_num].taskDigInputs[i].inNum, dailyTask[task_num].taskDigInputs[i].inState); dailyTask[task_num].taskCondition[dailyTask[task_num].condIdx].logic = dailyTask[task_num].taskDigInputs[i].logicGate;
dailyTask[task_num].condIdx++; } } return 0; } потом смотрю общий результат всех входных условий Код uint32_t TASKER_EvaluateTaskCondition(uint32_t task_num) { uint32_t result=0; TASKER_ChekParameters(task_num); TASK_CheckInputs(task_num);
for (int i = 0; i < dailyTask[task_num].condIdx; i++) { if (dailyTask[task_num].taskCondition[i].logic == OR) result |= dailyTask[task_num].taskCondition[i].result; else if (dailyTask[task_num].taskCondition[i].logic == AND) result &= dailyTask[task_num].taskCondition[i].result; }
return result; } но если условие более заковыристое Код (param1 && input1) || (param2 && (input2 || input3)) вот тут я не могу додуматься как создать структуру которая будет хранить логические связи.
Сообщение отредактировал Herz - Jan 27 2016, 14:02
|
|
|
|
|
Jan 27 2016, 09:41
|

Ally
     
Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050

|
Цитата(Jenya7 @ Jan 27 2016, 11:33)  я подумал сделать что то вроде этого Ну ясно. Нет у вас никакого парсинга. Парсинг это не структуры, а динамичекеские деревья и списки. Возьмите например парсер JSON, сейчас это очень модно и актуально, и посмотрите как делается парсинг. В JSON кстати можете закодировать всю вашу пользовательскую программу.
|
|
|
|
Сообщений в этой теме
Jenya7 мини PLC. Jan 27 2016, 08:11 _pv вам скорее всего сюда для начала:
http://electroni... Jan 27 2016, 08:26 Jenya7 Цитата(_pv @ Jan 27 2016, 14:26) вам скор... Jan 27 2016, 09:10  AlexandrY Цитата(Jenya7 @ Jan 27 2016, 11:10) распа... Jan 27 2016, 09:16  iosifk Цитата(Jenya7 @ Jan 27 2016, 12:10) распа... Jan 27 2016, 11:05 AlexandrY Цитата(Jenya7 @ Jan 27 2016, 10:11) вопро... Jan 27 2016, 09:06  Jenya7 Цитата(AlexandrY @ Jan 27 2016, 15:41) Ну... Jan 27 2016, 09:50   AlexandrY Цитата(Jenya7 @ Jan 27 2016, 11:50) а бол... Jan 27 2016, 10:04 RabidRabbit Цитата(Jenya7 @ Jan 27 2016, 12:33) но ес... Jan 27 2016, 10:02  Jenya7 Цитата(RabidRabbit @ Jan 27 2016, 16:02) ... Jan 27 2016, 10:12   RabidRabbit задействуйте фантазию
как пример: для каждой стр... Jan 27 2016, 10:17  jcxz Цитата(RabidRabbit @ Jan 27 2016, 16:02) ... Jan 28 2016, 06:06 arhiv6 ТС, думаю Вам нужно копать в сторону парсеров мате... Jan 27 2016, 10:14 Jenya7 Цитата(arhiv6 @ Jan 27 2016, 16:14) ТС, д... Jan 27 2016, 10:24  RabidRabbit Цитата(Jenya7 @ Jan 27 2016, 13:24) вопро... Jan 27 2016, 10:36 smalcom Цитатав микроконтролере!
вы шутите так?
вы пр... Jan 27 2016, 10:39 arhiv6 Цитата(Jenya7 @ Jan 27 2016, 16:24) ну ра... Jan 27 2016, 10:40 =AK= Цитата(Jenya7 @ Jan 27 2016, 18:41) я хоч... Jan 27 2016, 11:04 Jenya7 Цитата(=AK= @ Jan 27 2016, 17:04) Ваша за... Jan 27 2016, 12:14  Herz Цитата(Jenya7 @ Jan 27 2016, 14:14) от ва... Jan 27 2016, 14:11   Jenya7 Цитата(Herz @ Jan 27 2016, 20:11) Автор... Jan 27 2016, 14:27    arhiv6 Цитата(Jenya7 @ Jan 27 2016, 20:27) а поч... Jan 27 2016, 14:35     Jenya7 Цитата(arhiv6 @ Jan 27 2016, 20:35) Можно... Jan 27 2016, 15:06      Kopa Тут уже советовали посмотреть варианты реализации ... Jan 27 2016, 15:52       Jenya7 Цитата(Kopa @ Jan 27 2016, 21:52) Тут уже... Jan 27 2016, 16:15        Kopa Цитата(Jenya7 @ Jan 27 2016, 18:57) Желез... Jan 27 2016, 16:22      adnega Цитата(Jenya7 @ Jan 27 2016, 18:06) о... Jan 28 2016, 07:42       Jenya7 честно говоря я мало что понял. Jan 28 2016, 07:54        adnega Цитата(Jenya7 @ Jan 28 2016, 10:54) честн... Jan 28 2016, 08:50        adnega Цитата(Jenya7 @ Jan 28 2016, 10:54) честн... Jan 28 2016, 09:34         Jenya7 да. это интересно.
но условие (param1 && i... Jan 28 2016, 09:52          adnega Цитата(Jenya7 @ Jan 28 2016, 12:52) да. э... Jan 28 2016, 10:43           Jenya7 Цитата(adnega @ Jan 28 2016, 15:43) При и... Jan 28 2016, 11:22         =AK= Цитата(adnega @ Jan 28 2016, 20:04) Из зн... Jan 28 2016, 20:41          Kopa Цитата(=AK= @ Jan 29 2016, 00:41) Окончат... Jan 28 2016, 21:36           =AK= Цитата(Kopa @ Jan 29 2016, 08:06) Кросс Ф... Jan 28 2016, 22:27            Kopa Цитата(=AK= @ Jan 29 2016, 02:27) Ну да. ... Jan 28 2016, 22:46             Огурцов был бы весьма интересен проект под шарп
и причем, ... Jan 29 2016, 02:44              Dog Pawlowa Одно не пойму - если автор не знает, чего он хочет... Jan 29 2016, 02:58               =AK= Цитата(Dog Pawlowa @ Jan 29 2016, 13:28) ... Jan 29 2016, 07:59       jcxz Цитата(adnega @ Jan 28 2016, 13:42) Компи... Jan 28 2016, 09:19        iosifk Цитата(jcxz @ Jan 28 2016, 12:19) Мой ком... Jan 28 2016, 09:23    demiurg_spb http://www.beremiz.org Jan 27 2016, 14:46 XVR ТС изобрел велосипед с квадратными колесами и на л... Jan 27 2016, 12:23 iosifk Цитата(XVR @ Jan 27 2016, 15:23) ТС изобр... Jan 27 2016, 12:38  Jenya7 Цитата(iosifk @ Jan 27 2016, 18:38) Вот т... Jan 27 2016, 12:44   iosifk Цитата(Jenya7 @ Jan 27 2016, 15:44) я пре... Jan 27 2016, 13:05    Jenya7 Цитата(iosifk @ Jan 27 2016, 19:05) Вот т... Jan 27 2016, 13:22     iosifk Цитата(Jenya7 @ Jan 27 2016, 16:22) я хоч... Jan 27 2016, 14:20     syoma Цитата(Jenya7 @ Jan 27 2016, 15:22) я хоч... Jan 27 2016, 14:41 XVR 'Сложные логические группировки' в простой... Jan 27 2016, 13:47 sigmaN Warning:
Цитатаподумали бы не иначе докторскую н... Jan 27 2016, 14:34 Jenya7 Цитата(sigmaN @ Jan 27 2016, 20:34) Warni... Jan 27 2016, 14:35 smalcom Цитатато нам осталось? - увязать логику? - И с эти... Jan 27 2016, 16:35 Jenya7 Цитата(smalcom @ Jan 27 2016, 22:35) ну д... Jan 27 2016, 16:43  Kopa Цитата(Jenya7 @ Jan 27 2016, 19:43) задач... Jan 27 2016, 16:55   Jenya7 Цитата(Kopa @ Jan 27 2016, 22:55) Выбирай... Jan 27 2016, 16:57 Огурцов если парсер у вас есть, то сядьте и напишите за ве... Jan 27 2016, 16:46 Jenya7 Цитата(Огурцов @ Jan 27 2016, 22:46) если... Jan 27 2016, 16:54  Огурцов Цитата(Jenya7 @ Jan 27 2016, 16:54) вы по... Jan 27 2016, 16:58   Jenya7 Цитата(Огурцов @ Jan 27 2016, 22:58) и чт... Jan 27 2016, 17:05    Kopa Цитата(Jenya7 @ Jan 27 2016, 20:05) с ним... Jan 27 2016, 17:20    Огурцов Цитата(Jenya7 @ Jan 27 2016, 18:05) их на... Jan 27 2016, 17:26     Jenya7 Цитата(Огурцов @ Jan 27 2016, 23:26) в см... Jan 27 2016, 19:37      Kopa Цитата(Jenya7 @ Jan 27 2016, 22:37) совет... Jan 27 2016, 19:50       syoma Цитата(Kopa @ Jan 27 2016, 22:50) P.S. До... Jan 27 2016, 20:07        Jenya7 Цитата(syoma @ Jan 28 2016, 02:07) Самое ... Jan 27 2016, 20:12         syoma Цитата(Jenya7 @ Jan 27 2016, 23:12) ну ра... Jan 28 2016, 05:26          Jenya7 Цитата(syoma @ Jan 28 2016, 10:26) Я вам ... Jan 28 2016, 06:08           jcxz Цитата(Jenya7 @ Jan 28 2016, 12:08) у мен... Jan 28 2016, 06:18            Jenya7 Цитата(jcxz @ Jan 28 2016, 11:18) Самое н... Jan 28 2016, 07:14           syoma Цитата(Jenya7 @ Jan 28 2016, 08:08) мне б... Jan 28 2016, 07:57            iosifk Цитата(syoma @ Jan 28 2016, 10:57) . По-м... Jan 28 2016, 09:02      _pv Цитата(Jenya7 @ Jan 28 2016, 02:37) в смы... Jan 27 2016, 21:56      Огурцов Цитата(Jenya7 @ Jan 27 2016, 20:37) в смы... Jan 28 2016, 01:25 smalcom Цитатазадача действительно плевая. для сильных спе... Jan 28 2016, 00:21 sigmaN И это еще Огурцов реально по-Божески заряжает. Так... Jan 28 2016, 02:07 Огурцов казалось бы причём тут зарядка, это ж чисто на пив... Jan 28 2016, 02:57 k155la3 Судя по "постановке задачи" ТС, это похо... Jan 28 2016, 07:31 syoma adnega, неужели в наше время, микропроцессорные ре... Jan 28 2016, 11:06 adnega Цитата(syoma @ Jan 28 2016, 14:06) adnega... Jan 28 2016, 12:41 syoma Цитатаоличное решение проблемы. я восхищен, не поб... Jan 28 2016, 11:31 syoma ЦитатаВот Изаграф ему бы наверное подошел, но толь... Jan 29 2016, 10:52
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|