27 МОСКОВСКАЯ ВСТРЕЧА
Форум самогонщиков Сайт Барахолка Магазин 27 МОСКОВСКАЯ ВСТРЕЧА

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

Форум самогонщиков Автоматика
1 2 3 4 5 6 7 ... 9 4
POLE Научный сотрудник Питер 2.6K 1.2K
Отв.60  09 Февр. 17, 08:32
Давай пока в ардуину коррекции градусников забьем. И давление. А какой сенсор?makh, 09 Февр. 17, 01:03
ОК. Выловил с форума МастерКИТа инфу под их девайс: поправочные коэффициенты A, B, C для каждого датчика, температура пересчитывается по формуле : T'=A*T^2 + B*T + C, где T - температура датчика, T' - отображаемая температура. По умолчанию A=0, B=1, C=0. Эти коэффициенты хранятся в ini-файле и индивидуальны для каждого датчика Dallas"
Датчик давления аналоговый дифференциальный МРХV7002.

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

И еще.
Необходимо будет вносить поправку по температуре показаний датчика давления по формуле S20  =  S - (0,158850330 + 0,011048403*S - 0,000137384*S^2 + 0,000000303*S^3) * (T - 20) предполагается, что S20 - спиртуозность приведенное к 20 гр. S - текущее значение спиртуозности, Т - текущая температура.
Если взять за основу показания первого датчика температуры, то с показаниями датчика давления сложнее. Там рабочим будет диапазон грубо из 5кПа - 2, а то и меньше.
Как дельту показаний датчика давления скорректировать по температуре??? Может пока без корректировки?
MPXV7002.pdf 227.8 Кб
makh Профессор Sаmara 2.1K 1K
Отв.61  09 Февр. 17, 23:18
POLE, приветствую.

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

Еще к отличиям показаний градусников -- медные провода, которыми градусники подключены, любят удивительным образом водить туда-сюда тепло и тем самым портить показания. Можно рекомендовать по возможности наматывать полметра и более кабеля на ту же железку, в которой градусник, и прятать его под ту же теплоизоляцию. По опыту они заметно начинают дуреть выше 70-80-ти цельсиев, ниже обычно разница в пределах одной единицы АЦП.

И не забудь посмотреть на картинку номер два в AN1646.

текущее значение спиртуозностиPOLE, 09 Февр. 17, 07:32
Э.. а откуда? Вывести из давления? ИМХО лучше на данном этапе не писать такую фигню в ардуину, лучше в софте с выводом в консоль для начала поиграться. Ибо неоднозначно и экспериментально, проще будет на высокоуровневом языке, с прецизионными 64-битными плавучками. Подключишь к железке, увидишь цифры, попробуем получить из них объемные проценты, а там и до коррекции по температуре дело дойдет. А как будет понятный рабочий алгоритм -- можно будет и в ардуину запихать.
POLE Научный сотрудник Питер 2.6K 1.2K
Отв.62  10 Февр. 17, 10:29
makh большое спасибо!
Начинаю разбираться.
Еще к отличиям показаний градусников -- медные провода, которыми градусники подключены, любят удивительным образом водить туда-сюда тепло и тем самым портить показания. Можно рекомендовать по возможности наматывать полметра и более кабеля на ту же железку, в которой градусник, и прятать его под ту же теплоизоляцию. По опыту они заметно начинают дуреть выше 70-80-ти цельсиев, ниже обычно разница в пределах одной единицы АЦП.makh, 09 Февр. 17, 23:18
Принимаем к сведению. Поскольку работать планируется в районе 20С, то пока городить не буду.
И не забудь посмотреть на картинку номер дваmakh, 09 Февр. 17, 23:18
У меня датчик уже сидит на платке с кондерами и сопротивлением. Китайцы постарались)
Э.. а откуда? Вывести из давления? ИМХО лучше на данном этапе не писать такую фигню в ардуину, лучше в софте с выводом в консоль для начала поиграться.makh, 09 Февр. 17, 23:18
ну и я про тоже)

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

makh, привет. Небольшой отчет по первым пробам и софту.
Итак собрал в кучу 4 далласовских датчика и 1 датчик диф давления MPXV7002 на ячейку с тремя чашками для замера дельты температуры при испарении. Датчик диф давления измеряет разницу между столбом воды и столбом дистиллята (модельного спирт-водн раствора) в U-образнике.
Загрузил скетч. Установил 4 термодатчика. С термокоррекцией пока не разобрался (куда и чего вписывать). Прошил скетч в ардуино уно. Загрузил софтинку, создал новую папку, вывел графики на экран (экрана мало
hdctl -- мониторинг, управление и автоматизация с помощью ПК (софт для Windows)
hdctl -- мониторинг, управление и автоматизация с помощью ПК (софт для Windows). Автоматика.
). Все пишет.
Залил столбы водой и дистиллятом. Пошли изменения.
Но что-то с давлением непонятки. На сухую показывает циферки такой разрядности - примерно 36,82. После заполнения ячейки показывало близко к нулю. Потом при заливке растворов с разной крепостью стало выдавать повышение давления (рисунки) аж за 1198,12 единиц по воде (как бы разница между отдельным столбом воды и столбом воды в U-образнике). Оно как бы показывает зависимость давления от крепости (нелинейную как и должно быть). И термодатчики отрабатывают дельты.  
Но пока рано говорить о нормальной работе. Нужно ячейку конструктивно доработать чуток.
А вот что с давлением делать? В том смысле, что дельта значений не линейная. Явно нужно спрямление (по полиному) и приведение к нулевым показаниям.
Немного переделаю ячейку и повторю на модельных растворах. Там посмотрим, что нужно поправить.


Начало.jpg
Начало.jpg hdctl -- мониторинг, управление и автоматизация с помощью ПК (софт для Windows). Автоматика.
Середина.jpg
Середина.jpg hdctl -- мониторинг, управление и автоматизация с помощью ПК (софт для Windows). Автоматика.
makh Профессор Sаmara 2.1K 1K
Отв.63  13 Февр. 17, 20:29
с давлением непонятки. На сухую показывает циферки такой разрядности - примерно 36,82POLE, 10 Февр. 17, 10:29
На 139-й строчке есть вывод реального значения середины измеряемого диапазона, нуля в нашем случае. При одинаковом давлении на обоих портах надо посмотреть на выдаваемую между отчетами цифру в серийном терминале ардуины, и написать эту цифру в шестую строчку, там где #define MPX_ADC_ZERO. Так получим ноль.

Ну а васче цифры как бы есть. Только что-то с ними не так, или я что-то не так понял. На одном порту датчика столб воды, на втором столб спирта, так? Почему же тогда увеличиваются показания с понижением крепости спирта? Такая картина должна была бы быть, если на одном порту водно-спиртовой столб, а на втором атмосфера. Или где я туплю?

Ну и еще чтоб экран не фотографировать, научись пользоваться клавишей PrintScreen, обычно она как-то покороче называется, но из этого набора букв. Копирует весь экран, или комбинация Alt-PrintScreen  только активное окно. А потом просто вставляешь картинку из буфера в тот софт, которым фотки редактируешь. Ну и по правому клику на график его сохранить в виде картинки можно из контекстного меню.
POLE Научный сотрудник Питер 2.6K 1.2K
Отв.64  13 Февр. 17, 20:35, через 7 мин
На 139-й строчкеmakh, 13 Февр. 17, 20:29
спасибо проверю.
Почему же тогда увеличиваются показания с понижением крепости спирта?makh, 13 Февр. 17, 20:29
и у меня вопросы. Думал что за счет капиллярного эффекта, но нет. Там не выше 1,5 см поднялось при столбе в 53 см. Поищу найду ответ.
Ну и еще чтоб экран не фотографировать, научись пользоваться клавишей PrintScreenmakh, 13 Февр. 17, 20:29
да умею. но мне с телефоном быстрее чем через флешку. Но согласен, что плохо видно))). Буду скринить экран.


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

Почему же тогда увеличиваются показания с понижением крепости спирта? Такая картина должна была бы быть, если на одном порту водно-спиртовой столб, а на втором атмосфера.makh, 13 Февр. 17, 20:29
немного подумал. Впечатление такое, что ноль сместился на уровень 383,45 где-то. Повторяемость была. Я пробовал в обратную идти с повышением крепости. Значения становились ниже. Но... закончился спирт исходной концентрации))) И в трубки попало стекловолокно. Пришлось остановить насос(((
makh Профессор Sаmara 2.1K 1K
Отв.65  13 Февр. 17, 21:17, через 42 мин
Впечатление такое, что ноль сместился на уровень 383,45 где-тоPOLE, 13 Февр. 17, 20:35
Э... это ж почти 0.4 вольта, по даташиту середина диапазона может быть 2.25 - 2.75 вольт. Т.е. скорее всего где-то что-то подперло один из портов.

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

Вообще, конечно же, неоднократно случалось получить неожиданные цифры, и пользоваться ими не разбираясь особо, почему выглядят так а не иначе. Ключевое слово тут повторяемость, да .)
POLE Научный сотрудник Питер 2.6K 1.2K
Отв.66  14 Февр. 17, 09:01
makh, я по скетчу не понял логику преобразований вольт с датчика в цифры. Поясни неразумеющему плз как и что. Хочу понять откуда разрядность на графике вплоть до 1200,00.
ИМХО связка аналоговый диф датчик и АЦП Ардуины работает нормально.
Ключевое слово тут повторяемостьmakh, 13 Февр. 17, 21:17
точно!
makh Профессор Sаmara 2.1K 1K
Отв.67  14 Февр. 17, 15:01
POLE, приветствую.
Цифра получилась следующим образом -- согласно даташиту 1 вольт = 1 КПа, так вывел в милливольтах, они же паскали в данном случае, строчка 178.
POLE Научный сотрудник Питер 2.6K 1.2K
Отв.68  14 Февр. 17, 18:15
Цифра получилась следующим образом -- согласно даташиту 1 вольт = 1 КПа, так вывел в милливольтах, они же паскали в данном случае, строчка 178.makh, 14 Февр. 17, 15:01
уже сообразил по показаниям датчика.
Провел небольшой эксперимент результаты интересные.
Шуба давления скачет в пределах =/- 2,5 единицы (что неплохо)
Плюсовая камера показывает давление стационарного водного столба в 57 см.
Минусовая камера показывает давление двух столбов дистиллята в 57 см кажд (восходящего и нисходящего). Поэтому когда показания при включенном и выключенном насосе разнятся.
При изменении концентрации раствора почему-то уходим в минусовые показания. Вероятно из-за частичного заполнения подводящих трубок к датчику давления (в начале эксперимента они были пустые, после эксперимента обе заполнены на 1,5 см).
Шуба датчика давления пустая ячейка.jpg
Шуба датчика давления пустая ячейка.jpg hdctl -- мониторинг, управление и автоматизация с помощью ПК (софт для Windows). Автоматика.
Предел по  давлению.jpg
Предел по давлению.jpg hdctl -- мониторинг, управление и автоматизация с помощью ПК (софт для Windows). Автоматика.
Предел по - давлению.jpg
Предел по - давлению.jpg hdctl -- мониторинг, управление и автоматизация с помощью ПК (софт для Windows). Автоматика.
Ноль по давлению пустая ячейка.jpg
Ноль по давлению пустая ячейка.jpg hdctl -- мониторинг, управление и автоматизация с помощью ПК (софт для Windows). Автоматика.
Давление при заполненной  столб воды 57 см.jpg
Давление при заполненной столб воды 57 см.jpg hdctl -- мониторинг, управление и автоматизация с помощью ПК (софт для Windows). Автоматика.
20170214_динамика давления.jpg
20170214_динамика давления.jpg hdctl -- мониторинг, управление и автоматизация с помощью ПК (софт для Windows). Автоматика.
makh Профессор Sаmara 2.1K 1K
Отв.69  14 Февр. 17, 19:24
POLE, большая просьба -- последний график с шубой -- дай ему в настройках Legend = Extend, и сохрани без уменьшения из контекстного меню по правому клику на график. Ну и если вкладывать картинки в сообщение из галлереи, без изменения размеров, то форумный движок не будет пережимать ее деструктивным JPEG, будет все четко и хорошо видно, при том что картинка по размерам (filesize) будет меньше.

А вообще болтанка с насосом некрасивенько выглядит, не совсем представляю себе как малой кровью победить.
Причина, как с полтыка представляется, в динамическом сопротивлении трубок, с большим диаметром эффект должен быть менее выраженным, ИМХО.

Если есть возможность, попробуй так подключить:
dp.9.png hdctl -- мониторинг, управление и автоматизация с помощью ПК (софт для Windows)
dp.9.png hdctl -- мониторинг, управление и автоматизация с помощью ПК (софт для Windows). Автоматика.

Для полуметра трубы датчик немного не тот, конечно, но в вопрос о влиянии потока на показания внесет некоторую ясность, по идее.
POLE Научный сотрудник Питер 2.6K 1.2K
Отв.70  14 Февр. 17, 19:33, через 9 мин
дай ему в настройках Legend = Extend, и сохрани без уменьшения из контекстного меню по правому клику на график.makh, 14 Февр. 17, 19:24
завтра буду по новой прогонять ячейку. Все сделаю и сохраню как нужно.
болтанка с насосом некрасивенько выглядит, не совсем представляю себе как малой кровью победить.makh, 14 Февр. 17, 19:24
Сам предложил
Если есть возможность, попробуй так подключить:makh, 14 Февр. 17, 19:24
Я думаю, что можно и по другому включить датчик и убрать "болтанку". Болтанка с насосом не единственное зло. Кстати насос гнал сильно (струйка до 1 л/час).
Больше склоняюсь к абс датчику давления, тогда не будет заполнения подводящих к датчику трубок и ноль плавать не будет.
makh Профессор Sаmara 2.1K 1K
Отв.71  14 Февр. 17, 19:37, через 5 мин
Можно еще поровнять шум дополнительно, типа мерять не при выдаче отчета, а постоянно, с вычислением скользящего среднего в рамках секунды или полусекунды, например. Дописать, или пока пофик?
POLE Научный сотрудник Питер 2.6K 1.2K
Отв.72  14 Февр. 17, 22:16
Дописать, или пока пофик?makh, 14 Февр. 17, 19:37
пока не нужно. Решу проблемки с плаванием нуля и влиянием потока (болтанка насоса) потом подумаем что нужно.
Руди говорит, что трубки к датчику нужно горизонтально выровнять, чтобы нуль не плыл.

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

Кое-что получил.
Стабилизацию нуля на датчике диф давления не получишь. Нужен датчик абс давления прицепленный прямо к трубке.
Проблема "болтанки насоса" в том что при подаче повышается уровень на 1-1,5 см. При растворе разной плотности уровень разный. Решение стабилизации высоты столба в байпасной линии. Но мне не нравится - ячейка будет запаздывать. По твоей схеме пока не включал. Думаем да и крепкий спирт закончился)))
С температурой и дельтами пока разбираюсь. Есть надежды на стабильную картинку изменения состава дистиллята.
Pres_20170215_155717 с пояснениями.png
Pres_20170215_155717 с пояснениями.png hdctl -- мониторинг, управление и автоматизация с помощью ПК (софт для Windows). Автоматика.
Pres_20170215_155717.png
Pres_20170215_155717.png hdctl -- мониторинг, управление и автоматизация с помощью ПК (софт для Windows). Автоматика.
capsolo Профессор Зелик 5.3K 1.6K
Отв.73  27 Марта 17, 12:43
makh, Махмуд привет. Со считыванием показаний все более-менее ясно. Как к примеру запилить управление клапаном? Мне надо передавать ардуне период,время открытия и уставку по температуре, а так же включать-выключать стабилизацию (закрытие клапана при залете на уставку). По сути заслать в ардуню три вещественных величины и буля одного.
Так...на первый вопрос я себе ответил вот этим файлом
http://hdc.hol.es/hdctl/docs/protocol.html
А теперь можно ли при помощи скрипта (где про него почитать?) вывести красивый диалог, куда все эти параметры можно было бы забивать (типа кнопкой сенд отсылать)
И на второй вопрос я себе ответилю Actionscript. И все же приведи пожалуйста пример кода, который показывает диалог и каждый вызов смотрит не была ли в диалоге нажата кнопка Send, чтобы послать данные с диалога.
makh Профессор Sаmara 2.1K 1K
Отв.74  27 Марта 17, 19:50
capsolo, приветствую.

На самом деле по-разному можно. В конвенционном варианте как-то так:

1. ардуина в отчете посылает эти четыре величины, как read-write, и умеет также принимать для них управляющие сообщения вида VAR=VALUE_DECIMAL (для булей нуль-адын).
2. конфигурируем эти четыре периферийника в софтине, логи к ним врядли, а вот тип данных обязательно, и диапазон допустимых значений скорее всего тоже.
3. для ручного управления вытаскиваем на десктоп т.н. мониторы (Ctrl-M), там будут органы управления соответствующие типу данных.
4. для програмного управления создаем и начинаем писать программу. В песочнице будут достпны read-write аксессоры, одноименные с именами вышеописанных периферийников.

Если лениво, то можно в отчете ардуинки ничего на эту тему не выводить, научить ее получать произвольного формата управляющее сообщение, и при програмном управлении воспользоваться фунцией write(connection_id, message), где connection_id есть название контроллера, а message есть строковая репрезентация управляющего сообщения.

Как програмить. Долгая песня, но буду краток. Язык -- actionscript 3,  как уже упоминалось. Это высокоуровневый объектный ECMA-язык для флэшплеера. Ссылка на документацию в первом сообщении, но можно сразу начать писать как будто на жабаскрипте, и все получится, с определенной правдоподобностью.

В коде обязательно должна присутствовать метода init(), она вызывается первой при запуске программы. Тут можно провести некую первичную конфигурацию, например установить значение переменной heartbeat, задающей частоту вызова управляющих методов. Т.е. управляющие методы (возможно кроме последней или аварийных), должны возвращать референцию на метод, который будет вызван следующим через heartbeat миллисекунд. Вот по-быстрому твой случай, если правильно его понимаю:

function init()
{
  heartbeat = 1000;

  PERIOD = 123;    // представим себе что есть такие аксессоры, задаем период,
  PULSE = 10;      // скважность,
  TEMPSET = 78.3;  // уставку температуры,
  STAB = 0;        // режим стабилизации.

  return wait_over; // следующий метод, будет вызван через heartbeat мс
}

function wait_over() // ждем залет
{
  if (T_COL <= TEMPSET) return wait_over; // усё нормально, вызовем снова через heartbeat мс
  STAB = 1; // иначе включаем режим стабилизации,
  print('Залет, блять!'); // печатаем че-нить в консоль,
  return wait_stab; // и следующим будет работать обработчик залетного состояния
}

function wait_stab() // ждем стабилизации
{
  if (T_COL > TEMPSET) return wait_stab; // все еще залет, ...
  STAB = 0; // иначе выключаем срежим стабилизации и
  print('Стабильна, нах!'); // печатаем че-нить в консоль,
  return wait_over; // возвращаемся в режим ожидания залета
}

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

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

Блин, столько букав написал, а ты разобрался .)
capsolo Профессор Зелик 5.3K 1.6K
Отв.75  27 Марта 17, 19:54, через 5 мин
makh, пока не совсем. Пытаюсь текстбокс вывести - ругается. Причем в какой-то кривой кодировке Грустный

Код такой:
var t1:TextField;
var tf:TextFormat;
function init()
{
t1 = new TextField();
t1.x = 20;
t1.y = 20;
t1.width = 150;
t1.height = 30;
t1.text = "Hello, world!";
tf = new TextFormat( "Arial", 20, 0x000000, true );
t1.setTextFormat( tf );
addChild( t1 );
}

Ругается, что не знает ничего про TextField.

...\program\HelloWorld.as(14): col: 8 Error: Тип не найден или не является константой времени компиляции: TextField.
var t1:TextField;

UPD и здесь я разобрался. Надо импортировать классы. Теперь только на AddChild ругается
makh Профессор Sаmara 2.1K 1K
Отв.76  27 Марта 17, 20:09, через 15 мин
Вывести диалог с полями ввода с помощью скрипта не выйдет. Есть диалог типа жабаскриптского alert(), с возможностью выбора кнопок OK/YES/NO/CANCEL и последующей обработкой пользовательского клика. Блокирующий исполнение программы. Видимо не то, что ты хочешь. "Мониторы" точно не годятся для Send? Там будут соответствующие типу данных поля ввода и прочие кнопки.

не знает ничего про TextFieldcapsolo, 27 Марта 17, 18:54
import flash.text.*;
Но не надо в данном случае работать с дисплей-объектами, программа не DisplayObjectContainer, вывод из программы возможен только в консоль с помощью print() и в COM/TCP порты с помощью write() или посредством read-write аксессоров.
capsolo Профессор Зелик 5.3K 1.6K
Отв.77  27 Марта 17, 20:17, через 9 мин
"Мониторы" точно не годятся для Send?makh, 27 Марта 17, 20:09
Я понял. Это "типа" ActionScript с указанным тобой в комментариях набором функций. попробую разобраться с мониторами.
То есть кроме вот этого
/ SCOPE DEFINITIONS
/*
   methods:
      print(message);
      write(connection_id, message);
      alert(message, title=null, color=-1, close_handler=null,
         button_flags=ALERT_OK, default_button=ALERT_OK);
      play(sound_id);

   accessors:
      [rw] heartbeat

   const:
      dummy (connection id)
      ALERT_YES (button flags)
      ALERT_NO (button flags)
      ALERT_OK (button flags)
      ALERT_CANCEL (button flags)
      SOUND_BASSO (sound id)
      .....
      SOUND_TADA (sound id)
*/
можно ничего не пытаться пробовать
makh Профессор Sаmara 2.1K 1K
Отв.78  27 Марта 17, 20:39, через 22 мин
Программа суть класс от абстрактного Object с несколькими встроенными методами и набором констант и аксессоров. При запуске анализируется, запускается в песочнице, вызывается init() ну и т.д. Пользовать весь зоопарк средств экшнскрипта нихто не запрещает, но дисплей-объекты просто некуда присунуть, например. А вот HTTP запрос послать, например, очень даже можно:

import flash.net.*;
import flash.events.*;

var ldr:URLLoader;

function init()
{
 ldr = new URLLoader;
 ldr.load(new URLRequest('http://google.com/'));
 ldr.addEventListener(Event.COMPLETE, ldr_complete);

 return loop;
}

function ldr_complete(event)
{
 print(event.target.data); // исходник странички типа
}

function loop() { return loop; }
capsolo Профессор Зелик 5.3K 1.6K
Отв.79  27 Марта 17, 22:34
makh, правильно я понимаю, что чтобы добавить контрол надо его текущее значение транслировать с контроллера, чтобы софтинка поняла, что есть такой контрол?
И еще вопрос можно ли сделать сводный контрол, в котором (по аналогии с графиком) можно было бы показывать и скрывать управляющие величины и задавать им значение в соответствии с типом? Что то вроде флексгрида с кнопкой применения. Я так понял что для отдельных величин можно окошки вывести, но если величин 20 весь экран будет забит.
Я бы сам сделал если было бы куда выводить.