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

 
 
> мини 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
Ответов
=AK=
сообщение Jan 27 2016, 11:04
Сообщение #2


pontificator
******

Группа: Свой
Сообщений: 3 055
Регистрация: 8-02-05
Из: страны Оз
Пользователь №: 2 483



Цитата(Jenya7 @ Jan 27 2016, 18:41) *
я хочу програмировать задачи - состояния на выходе в зависимости от условий на входе. этакий мини Programmable Logic Controller.
...
и я это сохраняю и потом проверяю и если условие выполняется - включаю\выключаю нужные выходы. вопрос есть ли какие то готовые библиотеки а-ля-PLC?


Ваша задача не имеет никакого отношения к PLC, это полная чушь.

То, что вы тут накалякали, в принципе может быть реализовано путем создания некого скриптового языка. Тем не менее для грамотного решения , вам придется озаботиться и БНФ, и парсингом, и интерпретатором. Однако поскольку вы демонстрируете чрезвычайно низкий уровень знаний и очень много гонора, то шансы на то, что вы сподобитесь решить эту задачу "в общем виде", исчезающе малы.

Один из грамотных вариантов решения, который вам может оказаться посильным, таков: освойте язык Форт, поставьте Форт-систему на вашу целевую платформу и задайте для пользователя словарь только с определенными вами Форт словами, а все остальные Форт слова сделайте недоступными для пользователя. При этом парсингом займется Форт система, правда, синтаксис псевдо-языка будет с обратной польской записью. При желании и это можно изменить, да только вряд ли нужно.
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Jan 27 2016, 12:14
Сообщение #3


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

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



Цитата(=AK= @ Jan 27 2016, 17:04) *
Ваша задача не имеет никакого отношения к PLC, это полная чушь.

То, что вы тут накалякали, в принципе может быть реализовано путем создания некого скриптового языка. Тем не менее для грамотного решения , вам придется озаботиться и БНФ, и парсингом, и интерпретатором. Однако поскольку вы демонстрируете чрезвычайно низкий уровень знаний и очень много гонора, то шансы на то, что вы сподобитесь решить эту задачу "в общем виде", исчезающе малы.

Один из грамотных вариантов решения, который вам может оказаться посильным, таков: освойте язык Форт, поставьте Форт-систему на вашу целевую платформу и задайте для пользователя словарь только с определенными вами Форт словами, а все остальные Форт слова сделайте недоступными для пользователя. При этом парсингом займется Форт система, правда, синтаксис псевдо-языка будет с обратной польской записью. При желании и это можно изменить, да только вряд ли нужно.

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


Цитата(arhiv6 @ Jan 27 2016, 16:40) *
Так не надо выделять место в памяти для хранения всех лексем поотдельности - они уже есть в исходной строке, парсер динамически её обрабатывает. Грубо говоря, нужно выделить место для хранения одной лексемы:
Код
char *expr; //Указатель на обрабатываемую строку
char token[80]; //Лексема

Там в статье всё расписано + приведён полностью рабочий код. Вам достаточно в нем заменить пару функций на свои.

это очень смелое заявление. таких заявлений я могу каждый день выдавать пачками.

Цитата(iosifk @ Jan 27 2016, 17:05) *
Можно сделать не компилятор, и интерпретатор. Тогда ничего "хранить" не надо выполнение делается при обработке строк... Правда это "медленнее", чем если сначала откомпилировать, а потом исполнять "переваренный" код... Но зато проще сделать программу обработки.
Вообще если сделать два вида исходных строк, то дело будет значительно проще реализовать.
1. "Арифметические строки" - введите "внутренние переменные", где "входы" или "внутренние переменные" проверяются на "больше-меньше" или "+/-" и результат этих действий превращается в битовые переменные
2. "Логические строки" в которых обрабатываются "битовые переменные"

Ну и Форт-система это тоже вариант....

извините но - тоже пачками.
Go to the top of the page
 
+Quote Post
Herz
сообщение Jan 27 2016, 14:11
Сообщение #4


Гуру
******

Группа: Модераторы
Сообщений: 10 983
Регистрация: 23-11-05
Пользователь №: 11 287



Цитата(Jenya7 @ Jan 27 2016, 14:14) *
от вашей демонстрации грандиозных знаний с тоже нех..илым апломбом толку мало.
таких советов я могу каждый день выдавать пачками.

это очень смелое заявление. таких заявлений я могу каждый день выдавать пачками.

извините но - тоже пачками.

Автор! Попробуйте прислушаться к советам и не хамить. Я совершенно не понимаю, откуда возьмётся желание искать приемлемое для Вас решение, разжёвывать и класть в рот при такой "благодарности".
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Jan 27 2016, 14:27
Сообщение #5


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

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



Цитата(Herz @ Jan 27 2016, 20:11) *
Автор! Попробуйте прислушаться к советам и не хамить. Я совершенно не понимаю, откуда возьмётся желание искать приемлемое для Вас решение, разжёвывать и класть в рот при такой "благодарности".

я ни в коем случае не хочу никого оскорбить и приношу свои категорические извинения.
просто я за конструктивные решения. если бы вы слышали какие я советы даю когда мы с ребятами выходим покурить - подумали бы не иначе докторскую недавно защитил.


Цитата(iosifk @ Jan 27 2016, 20:20) *
Ей бо глухой...
Вы же почему-то сваливаете в одну кучу компиляцию исходников и исполняемую программу. На самом деле Вам надо сделать 2 программы. Одну - для превращения сложной командной строки исходника в более простой набор команд. Что-то вроде "RISC", когда каждая простейшая команда выполняет только одно действие. Либо устанавливает переменную или таймер, либо логически обрабатывает переменную. Ну и вторая часть - будет в контроллере, она и будет выполнять эти простейшие действия. И парсер там будет примитивный...
Вы посмотрите мои статьи о битовом контроллере...


а почему так нельзя?
Код
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(dailyTask[task_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_EvaluateParamCondition(float *val, float val_lim, uint32_t compare)
{
    switch (compare)
    {
        case 0: return (*val == val_lim); break;
        case 1: return (*val > val_lim);  break;
        case 2: return (*val < val_lim);  break;
        case 3: return (*val >= val_lim); break;
        case 4: return (*val <= val_lim); break;
        case 5: return (*val != val_lim); break;
        default : return 2;
    }
}

что я могу сказать. работает. быстро. четко. конечно интенсивный дебагинг я еще не делал но...
элементарная структура. 10 строк кода.

Сообщение отредактировал Jenya7 - Jan 27 2016, 14:34
Go to the top of the page
 
+Quote Post
arhiv6
сообщение Jan 27 2016, 14:35
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 633
Регистрация: 21-05-10
Из: Томск
Пользователь №: 57 423



Цитата(Jenya7 @ Jan 27 2016, 20:27) *
а почему так нельзя?

Можно, но такой вариант сложно масштабируем. Если делать в таком виде, то как Вы представляете себе решение для вашего же примера: (param1 && input1) || (param2 && (input2 || input3)) ?



--------------------
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Jan 27 2016, 15:06
Сообщение #7


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

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



Цитата(arhiv6 @ Jan 27 2016, 20:35) *
Можно, но такой вариант сложно масштабируем. Если делать в таком виде, то как Вы представляете себе решение для вашего же примера: (param1 && input1) || (param2 && (input2 || input3)) ?

о! вот в этом вся загвоздка! вот это я и пытаюсь решить. не то чобы я был зациклен на моей имплиментации. просто других альтернатив нет пока.
я думал сделать такую структуру
Код
struct sGroupResults
{
    uint8_t result;
    uint8_t resLogic;

};
struct sConditionGroup
{
    struct sGroupResults groupResults[10];
    uint8_t groupLogic;

};

struct sTaskCondition
{
    struct sConditionGroup condGroup[MAX_COND_GROUPS];
};

и тогда условие
Код
(param1 && input1) || (param2 && (input2 || input3))

расположиться так
Код
sTaskCondition.condGroup[0].groupResults[0].result = param 1;
sTaskCondition.condGroup[0].groupResults[0].resLogic = AND;
sTaskCondition.condGroup[0].groupResults[1].result = input 1;
sTaskCondition.condGroup[0].groupResults[1].resLogic = NONE;
sTaskCondition.condGroup[0].groupLogic = OR;

sTaskCondition.condGroup[1].groupResults[0].result = param 2;
sTaskCondition.condGroup[1].groupResults[0].resLogic = NONE;
sTaskCondition.condGroup[1].groupLogic = AND;

sTaskCondition.condGroup[2].groupResults[0].result = input 2;
sTaskCondition.condGroup[2].groupResults[0].resLogic = OR;
sTaskCondition.condGroup[2].groupResults[1].result = input 3;
sTaskCondition.condGroup[2].groupResults[1].resLogic = NONE;
sTaskCondition.condGroup[2].groupLogic= NONE;

вопрос как в проверке условий объяснить что sTaskCondition.condGroup[0]. groupResults[0].result это param 1

Сообщение отредактировал Jenya7 - Jan 27 2016, 15:27
Go to the top of the page
 
+Quote Post
adnega
сообщение Jan 28 2016, 07:42
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(Jenya7 @ Jan 27 2016, 18:06) *
о! вот в этом вся загвоздка! вот это я и пытаюсь решить. не то чобы я был зациклен на моей имплиментации. просто других альтернатив нет пока.
я думал сделать такую структуру

При разработке своего контроллера я подумал побольше и сделал так.
Любая логическая функция из N переменных описывается таблицей истинности из 2^N строк.
Если переменные пронумерованы, то и на результат можно ссылаться числом.
Например, для 5 переменных имеем 32 результата.
Зная значения всех 5 переменных, мы можем получить номер бита в 32-битном хранилище результата.

В байткодах это выгладит так:

TABLE5(result_value)
VAR0
VAR1
VAR2
VAR3
VAR4
GETRESULT

Компилятор должен преобразовать сложное логическое выражение к таблице истинности и получить правильный resul_value.
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Jan 28 2016, 07:54
Сообщение #9


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

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



честно говоря я мало что понял.

Сообщение отредактировал Herz - Jan 28 2016, 22:34
Причина редактирования: Избыточное цитирование
Go to the top of the page
 
+Quote Post
adnega
сообщение Jan 28 2016, 09:34
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(Jenya7 @ Jan 28 2016, 10:54) *
честно говоря я мало что понял.

Утверждается, что (param1 && input1) || (param2 && (input2 || input3)) соответствует таблица истинности из вложенного файла.
Из значений переменных собираем индекс:
n = (param1 << 4) + (param2 << 3) + (input1 << 2) + (input 2 << 1) + (input3 << 0);
Затем получаем результат:
((0xFEF0EE00) >> n) & 1
Т.е. для вычисления (param1 && input1) || (param2 && (input2 || input3)) нам достаточно знать одно волшебное 32-битное число 0xFEF0EE00.
Причем, для меня важным моментом было время вычисления логической функции любой сложности из максимум 5 переменных.
При таком подходе оно фиксировано и минимально (не зависит от вида функции и от значений переменных).
А самое главное, легко описывается байт-кодом и элементарно вычисляется.

Теперь понятно?
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Jan 28 2016, 09:52
Сообщение #11


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

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



да. это интересно.
но условие (param1 && input1) || (param2 && (input2 || input3)) не статическое, оно может поменяться на скажем (param2 || input3) && (param4 || (input5 || input6))
или скажем переменных будет больше 5

ааа...понимаю.. с ростом параметров наша таблица серьезно вырастает…
да. это круто. интересный подход. а как мы заполняем результат функции в true table - 0xFEF0EE00?

Сообщение отредактировал Herz - Jan 28 2016, 22:35
Go to the top of the page
 
+Quote Post
adnega
сообщение Jan 28 2016, 10:43
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(Jenya7 @ Jan 28 2016, 12:52) *
да. это интересно.
но условие (param1 && input1) || (param2 && (input2 || input3)) не статическое, оно может поменяться на скажем (param2 || input3) && (param4 || (input5 || input6))
или скажем переменных будет больше 5

ааа...понимаю.. с ростом параметров наша таблица серьезно вырастает…
да. это круто. интересный подход. а как мы заполняем результат функции в true table - 0xFEF0EE00?

При изменении условия меняется и результат.
Как вы по условию будете получать "магическое число" - это ваши проблемы. Главное, что это возможно.
В моем случае исходный текст компилятором преобразуется в байт код, и в задачи компилятора входит данное преобразование.

Насчет логических условий с бОльшим числом переменных могу сказать, что я за долгие годы с такими не встречался (максимум 4).
Но кто сказал, что таблицы нельзя каскадировать? wink.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
- - Jenya7   я подумал сделать что то вроде этого создал структ...   Jan 27 2016, 09:33
|- - AlexandrY   Цитата(Jenya7 @ Jan 27 2016, 11:33) я под...   Jan 27 2016, 09:41
||- - 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
||- - 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 28 2016, 10:54) честн...   Jan 28 2016, 08:50
||||- - 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 Текстовая версия Сейчас: 19th July 2025 - 12:32
Рейтинг@Mail.ru


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