Форум самогонщиков Сайт Барахолка Магазин Помощь солдатам

hdctl -- мониторинг, управление и автоматизация с помощью ПК (софт для Windows)

Форум самогонщиков Автоматика
1 2 3 4 5 6 7 8 9 5
makh Профессор Sаmara 2.1K 1.1K
Отв.80  27 Марта 17, 22:51
надо его текущее значение транслировать с контроллера, чтобы софтинка поняла, что есть такой контрол?capsolo, 27 Марта 17, 22:34
Да. И мониторинг его состояния. Если градусник, например, отвалится, или синусоида в ризетке кончится, то значение контрола будет NaN, програмно эту ситуацию можно как-то обработать.

весь экран будет забитcapsolo, 27 Марта 17, 22:34
Ну как бы да. Надо будет посмотреть, может получится в рамках имеющегося грида сообразить. При удачном раскладе завтра гляну.

Добавлено через 19ч. 45мин.:

Глянул. С полтыка не выйдет. Записал на будущее.

дисплей-объекты просто некуда присунутьmakh, 27 Марта 17, 20:39
Наверное, можно представить себе ситуацию, потребующую некоего хитрожопого интерактивного интерфейса, или какого-нибудь альтернативного графического вывода.
Видимо, можно было бы добавить программе опциональную оконность, и попользовать оное окно в какчестве контейнера для пользовательского визуала. Тоже записал.

Ну и давно хотел приделать возможность объяснить компилятору путь к некоему локальному class-path. Приходится иногда большие куски кода туда-сюда переносить и долго и мучительно править, а мог бы быть один раз написан удобный объект нужного уровня абстракции. Убого не иметь такой функционал, запилю при первой же возможности.

capsolo Профессор Зелик 5.3K 1.6K
Отв.81  29 Марта 17, 09:54
makh, Махмуд ну я решил обойти отсутствие интерфейса следующим образом: есть две rw величины - указатель и значение. Сначала указатель выставляешь в номер нужной величины - значение этой величины начинает транслироваться обратно в hdctl. Потом просто новое значение посылаешь величины, и оно применяется.
К примеру надо выставить коэффициенты PID для управления нагревом. Нумеруем у себя P-1, I-2, D-3. Указатель выставляешь в 1, в hdctl приходит текущее значение коэффициента P, прописываешь другое значение, если надо, потом указатель в 2 - "I" и так далее.
В ардуне запиливаю конструкцию switch и вперед.
Для отладки и скриптования вполне достаточно.
makh Профессор Sаmara 2.1K 1.1K
Отв.82  08 Апр. 17, 04:51
Вот, проанализировав и обобщив опыт последних лет, наколдырил коробченку, для работы с топик-софтой заточенную:

dscf3494.jpg
Dscf3494. hdctl -- мониторинг, управление и автоматизация с помощью ПК (софт для Windows). Автоматика.


Может показаться странным, но устройство сие покрывает практически все мои потребности по управлению имеющимся в наличии оборудованием, а также оставляет бескрайний простор для дальнейших экспериментов. Никаких хьюман-интерфейсов в железе, но кое-что простенькое делать оно умеет. Во первых, читает весь зоопарк используемых датчиков -- в RJ45 коннекторы выведены I2C и OneWire. Каждая ризетка управляется мощным триаком, и имеет два параметра -- период и скважность, устанавливаемые в 10 мс интервалах (полупериод от 50-ти герц). Если период установлен в ноль -- ризетка работает как PDM регулятор мощности (ака Брезенхэм, алгоритм c коррекцией постоянной составляющей спионерил у коллеги OldBean из ненавязчивой автоматизации), если период равен единице -- ризетка в режиме вкл/выкл, если период больше единицы (max 65535) -- тривиальный PWM. Т.е. любой ризеткой можно греть кубы, включать/выключать какие-то девайсы, по-разному дергать разного назначения клапанами, и т.д. -- не модифицируя фирмварь железки.

Вот, например, за полминуты присобачил ее в конфигурацию НБК, широтно-импульсно включать электромагнитный насос или клапан на подаче браги (контроллер #2), задействована одна ризетка для насоса, частота один герц (100 полупериодов от 50 Гц синусоиды), скважность 44/100, ну и пара градусников там же:

20170407_nbk.png
20170407_nbk. hdctl -- мониторинг, управление и автоматизация с помощью ПК (софт для Windows). Автоматика.


Фирмварь для любопытствующих в аттаче, там есть странные странности -- это задел для кое-какого будущего функционала, если в самом деле понадобится.
p4s6al.ino 6.7 Кб
makh Профессор Sаmara 2.1K 1.1K
Отв.83  13 Мая 17, 01:12
Пестня об экшнскрипте #1
можно несколько потоков, или колбэки какие-то?capsolo, 12 Мая 17, 21:16

Не уточняя формулировки -- да. Вот это надо иметь перед глазами, Runtime = Flash Player 9 and earlier, Product = None.

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

setTimeout / clearTimeout
import flash.utils.*;
...
var my_timeout:uint;
и затем, прочитав тут и тут
function fname ()
{
 ...
 my_timeout = setTimeout(fcallback, 1000, arg1, arg2); // вызвать методу fcallback через тысчу миллисекунд с двумя аргументами
 ...
}

function fcallback (arg1, arg2) // будет вызвана через секунду
{
 ...
 // тут можно молча закончить исполнение ветви или
 // my_timeout = setTimeout(name, delay, ... args); // продолжить секвенс
}

function fevent () // если вызов callback-методы в будущем не требуется
{
 clearTimeout(my_timeout);
 ...
}

setInterval / clearInterval
import flash.utils.*;
...
var my_interval:uint;

function fname ()
{
 ...
 my_interval = setInterval(finterval, 1000, arg); // вызывать методу finterval каждую тысчу миллисекунд c аргументом
 ...
}

function finterval (arg) // будет вызвана каждую секунду
{
 ...
 // если вызов finterval далее не требуется
 clearInterval(my_interval);
}

...
Выглядит это все как много букав, но для интенсивного использования завернуть можно в довольно компактном виде.

В основном "треде" программы надо не забывать про паралельно запущенное, и наоборот. Event-driven модель тоже можно сделать, но я уже готовый, если надо -- завтра попробую изложить.

можно несколько программ параллельно запускать. Могут они данными обмениваться?capsolo, 12 Мая 17, 21:16
Да. Увы, нет возможности запускать одну из другой. Обмен данными возможен с помощью LocalConnection. Но блин не надо оно. Недель через пять, если ниче не случится, сяду присобачу правильного функционалу к софтине. Некие мысли достаточно утряслись.

Petrovich69 Кандидат наук Тверь 451 254
Отв.84  23 Мая 17, 22:48
makh, добрый день!
Пытаюсь прикрутить свою ардуину к твоей замечательной программулине. Не коннектится устройство... Уже все перепроверил, настроил как в твоем примере. Пытаюсь вывести показания датчика давления - через монитор показания идут, HDClient  говорит что состояние девайса дисконнектед..
Помоги понять причину пож!
Скрин.jpg
Скрин.jpg hdctl -- мониторинг, управление и автоматизация с помощью ПК (софт для Windows). Автоматика.
capsolo Профессор Зелик 5.3K 1.6K
Отв.85  23 Мая 17, 22:58, через 10 мин
Петрович ты же ком порт консолью занял! Отрубайсо.Уарт в винде в эксклюзиве работает
Petrovich69 Кандидат наук Тверь 451 254
Отв.86  23 Мая 17, 23:30, через 32 мин
capsolo, щас проверю!

Добавлено через 7мин.:

Нихуа Грустный не помогло
capsolo Профессор Зелик 5.3K 1.6K
Отв.87  23 Мая 17, 23:37, через 8 мин
makh, пока трудновато мне экшнскрипт даётся Подмигивающий синтаксис не очень привычный, и философия.
Ну базовых вещей для отладки выше крыши хватает. Да и для всех наших процессов. У нас все просто Подмигивающий условия на входе - состояния на выходе

Добавлено через 2мин.:

Petrovich69, ты закрой терминалку то. И ардуину закрой - зашился уже. И Дуню перегрузи по кнопке. Порт должен быть свободным. Если ничего не помогает комп перегрузи. Контроллер работает и правильно формирует пакеты
Petrovich69 Кандидат наук Тверь 451 254
Отв.88  23 Мая 17, 23:59, через 23 мин
capsolo, Все попробовал, не помогло. Может номер порта поменять - стоит 5000. Номер сом уже менял. Не видит.
capsolo Профессор Зелик 5.3K 1.6K
Отв.89  24 Мая 17, 00:07, через 8 мин
Petrovich69, это не тот порт. Это сетевой, который 5000. Не поможет. Попробуй слезть на 9600. Я на 9600 работал без проблем. Студию ардуину не запускаешь? Только hdctl.

Добавлено через 3мин.:

Нефиговый у тебя кстати скетч по объёму. Сделай новый, который только гадит в порт любую цифру по протоколу Махмуда. Если заработает - значит проблемы с памятью
makh Профессор Sаmara 2.1K 1.1K
Отв.90  24 Мая 17, 00:41, через 35 мин
Петрович,

первое что сделай -- закрой hdctl, и посмотри в спиок процессов, если там есть serproxy.exe -- убить беспощадно, это оно порт открытым держит.

Если проблема не там, возьми какой-нить простенький терминал, PuTTY например, и вручную открой серийный порт с ардуиной.

Т.е. убедись в том, что
1. Номер порта (COM#) правильный
2. Baudrate правильный (тот что в Serial.begin)
3. Ардуина посылает данные
4. Порт можно закрыть и снова открыть

Если при всем вышеизложенном, и с идентичными настройками, софтина скажет дисконнект, то попробуй:
1. запустить hdctl от суперюзера, или как оно там на винде
2. погасить антивир, и, возможно,
3. виндовый фаервол -- может кто-то из них не дает поднять локальный TCP-сервер или соединиться с ним

Да, кстати, ты одну ардуину подключаешь? Для второй надо любой другой уникальный номер TCP-порта писать, вот тут:

serial.png
Serial. hdctl -- мониторинг, управление и автоматизация с помощью ПК (софт для Windows). Автоматика.


Больше никаких идей с полтыка в голову не приходит.
makh Профессор Sаmara 2.1K 1.1K
Отв.91  24 Мая 17, 04:04
синтаксис не очень привычныйcapsolo, 23 Мая 17, 23:37
Да ладно ) Неужто есть еще на свете люди, которым не приходилось ковыряться в жабаскрипте? ,)
и философияcapsolo, 23 Мая 17, 23:37
О да.
hdctl -- мониторинг, управление и автоматизация с помощью ПК (софт для Windows)
hdctl -- мониторинг, управление и автоматизация с помощью ПК (софт для Windows). Автоматика.
Я с ним довольно долго и плотно работал, с самого начала, с пятой версии плеера. Бровзерные фронтенды большей частью, в т.ч. игры, ну и некоторое время для мобилов. На мой вкус, реализация объектной/событийной модели довольно милая и гуманоидная. И по-своему лаконичная. Ну а многое там просто Исторически Так Сложилось™ .)
Petrovich69 Кандидат наук Тверь 451 254
Отв.92  24 Мая 17, 16:02
Петрович,

первое что сделай -- закрой hdctl, и посмотри в спиок процессов, если там есть serproxy.exe -- убить беспощадно, это оно порт открытым держит.

Если проблема не там, возьми какой-нить простенький терминал, PuTTY например, и вручную открой серийный порт с ардуиной.

Т.е. убедись в том, что
1. Номер порта (COM#) правильный
2. Baudrate правильный (тот что в Serial.begin)
3. Ардуина посылает данные
4. Порт можно закрыть и снова открыть

Если при всем вышеизложенном, и с идентичными настройками, софтина скажет дисконнект, то попробуй:
1. запустить hdctl от суперюзера, или как оно там на винде
2. погасить антивир, и, возможно,
3. виндовый фаервол -- может кто-то из них не дает поднять локальный TCP-сервер или соединиться с ним

Да, кстати, ты одну ардуину подключаешь? Для второй надо любой другой уникальный номер TCP-порта писать, вот тут:makh, 24 Мая 17, 00:41
По пунктам.
Закрыл, посмотрел, нет.
Поставил COM Port Toolkit
1. Правильный
2. Правильный. Изначально делал как было в скетче 9600, поменял везде на 115200 - на мониторе все так и так проходит, hdctl не видит.
3. Посылает. Проверено. В скриншоте видно что посылает данные датчика давления в мм с идентификатором в виде:{P<0}..{P<61}..{
4. Можно. Проверил. Из другой софтины работает

1. Запускаю с правами админа - не помогает.
2. В антивир (Касперский) ввел исключение - не помогло. Выключил - не помогло.
3. Фаервол - аналогично.

Поставил все свежие заплатки. Изменил совместимость на ХР. НИФУЯ...

Куда копать коллеги? Может в дескрипторах ошибка?
Вот код:
#ifdef MONITOR //5350
void my_monitor()
{
static unsigned long  tc = 0;
unsigned long t = millis();
if (tc <= t) //
 {
       tc += REPORT_INTERVAL; // сохраняем время начала следующего цикла измерений

   Serial.print('{' );  // выводим токен начала отчета
   {  
     Serial.print('P' ); // идентификатор устройства
     Serial.print('<' ); // выводим токен типа устройства  
     Serial.print(U_MPX5010/10); // выводим давление в мм
  //   Serial.print(' ' );
   }
   Serial.println('}' );  // токен конца отчета
 }
}
#endif


Скрин2.jpg
Скрин2.jpg hdctl -- мониторинг, управление и автоматизация с помощью ПК (софт для Windows). Автоматика.
capsolo Профессор Зелик 5.3K 1.6K
Отв.93  24 Мая 17, 16:21, через 20 мин
Petrovich69, у меня пробельчик в коде перед закрытием фигурной скобки. попробуй себе тоже поставить
output="{temp1<";
output=output+temp[0];
output=output+" temp2<";
output=output+temp[1];
output=output+" }";
Serial.println(output);
Petrovich69 Кандидат наук Тверь 451 254
Отв.94  24 Мая 17, 16:33, через 12 мин
capsolo, попробую добавить. Раньше он был - закоментил.

Добавлено через 12мин.:

capsolo, переписал, не помогло.
По терминалу теперь так выдает:
{P<64 }
{P<64 }
{P<60 }
{P<61 }
{P<62 }
capsolo Профессор Зелик 5.3K 1.6K
Отв.95  24 Мая 17, 16:53, через 21 мин
Увеличивай Report interval и report timeout в hdctl. Сначала намного. Например 10 и 20. Чтобы узнать как часто у тебя показания идут и как часто можно снимать показания используй millis.
Когда коннектишься у тебя пишет Connecting... а потом Disconnected?
Petrovich69 Кандидат наук Тверь 451 254
Отв.96  24 Мая 17, 18:04
Увеличивай Report interval и report timeout в hdctl. Сначала намного. Например 10 и 20. Чтобы узнать как часто у тебя показания идут и как часто можно снимать показания используй millis.capsolo, 24 Мая 17, 16:53
Пробовал 2-4, 10-20.
millis стояло 1000, изменил на 500 - 2 раза в секунду передача данных.
Не видит данные с порта. Менял СОМ2 на СОМ1 - остальные порты заняты.
makh Профессор Sаmara 2.1K 1.1K
Отв.97  24 Мая 17, 22:11
Petrovich69, давай еще попытку сделаем понять где проблема.

В установочной директории программы есть директория serproxy, в которой находится исполняемый файл serproxy.exe; создай в этой директории текстовый файл serproxy.cfg со следующим содержимым, исправив под свою конфигурацию номер COM-порта и его скорость:
newlines_to_nils=false
comm_ports=1
comm_baud=9600
comm_databits=8
comm_stopbits=1
comm_parity=none
timeout=300
net_port1=5000
И запусти serproxy.exe. Если не вывалится с информацией об ошибке, то запусти виндовый telnet, и открой локальный порт 5000:

telnet.png hdctl -- мониторинг, управление и автоматизация с помощью ПК (софт для Windows)
telnet.png hdctl -- мониторинг, управление и автоматизация с помощью ПК (софт для Windows). Автоматика.


serproxy.exe должен отреагировать вот так,

serproxy.1.png hdctl -- мониторинг, управление и автоматизация с помощью ПК (софт для Windows)
serproxy.1.png hdctl -- мониторинг, управление и автоматизация с помощью ПК (софт для Windows). Автоматика.


а телнет-клиент должен начать показывать передаваемые ардуиной данные. Вот давай убедимся, что в этой части у нас все работает четко.
Petrovich69 Кандидат наук Тверь 451 254
Отв.98  24 Мая 17, 22:13, через 2 мин
Щас...

Добавлено через 8мин.:

Похоже serproxy.exe не запускается. Мелькает черное окошко и все. В диспетчере задач процесса этого не вижу.
capsolo Профессор Зелик 5.3K 1.6K
Отв.99  24 Мая 17, 22:25, через 13 мин
Petrovich69, фигасе приколдобило. А если консолью в эту серпроксю зайти и из командной строки Ее запустить она что скажет?