реклама на сайте
подробности

 
 
> мини PLC.
Jenya7
сообщение Jan 27 2016, 08:11
Сообщение #1


Профессионал
*****

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Jenya7
сообщение Jan 27 2016, 09:33
Сообщение #2


Профессионал
*****

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Jan 27 2016, 09:41
Сообщение #3


Ally
******

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



Цитата(Jenya7 @ Jan 27 2016, 11:33) *
я подумал сделать что то вроде этого


Ну ясно.
Нет у вас никакого парсинга.
Парсинг это не структуры, а динамичекеские деревья и списки.

Возьмите например парсер JSON, сейчас это очень модно и актуально, и посмотрите как делается парсинг.
В JSON кстати можете закодировать всю вашу пользовательскую программу.
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Jan 27 2016, 09:50
Сообщение #4


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Цитата(AlexandrY @ Jan 27 2016, 15:41) *
Ну ясно.
Нет у вас никакого парсинга.
Парсинг это не структуры, а динамичекеские деревья и списки.

Возьмите например парсер JSON, сейчас это очень модно и актуально, и посмотрите как делается парсинг.
В JSON кстати можете закодировать всю вашу пользовательскую программу.

а более бесполезный совет не в тему Вы бы могли мне дать? мне их так не хватает.

или давайте пообсуждаем о том как произноситься char на шести страницах.

Сообщение отредактировал Jenya7 - Jan 27 2016, 09:51
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Jan 27 2016, 10:04
Сообщение #5


Ally
******

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



Цитата(Jenya7 @ Jan 27 2016, 11:50) *
а более бесполезный совет не в тему Вы бы могли мне дать? мне их так не хватает.

или давайте пообсуждаем о том как произноситься char на шести страницах.


Я вам что-то должен? biggrin.gif
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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
|- - 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


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 03:22
Рейтинг@Mail.ru


Страница сгенерированна за 0.02208 секунд с 7
ELECTRONIX ©2004-2016