Страница 16 из 80

Разработки ecoins

Добавлено: 04.08.2019{, 13:31}
Rovki
bsn писал(а):
04.08.2019{, 12:41}
ecoins писал(а):
04.08.2019{, 11:25}
Это неплохо для исследовательских стендов
Не только для стендов.
Это неплохо для систем Умного Дома. Когда, к примеру в помещении размещён простейший контроллер, большинство его ног уже задействовано под иное оборудование. А ему ещё нужно собирать и температурные данные из нескольких точек, возможно и из соседних помещений. Далее он может передавать собранную инфу на более производительный контроллер верхнего уровня. При расстояниях в несколько десятков метров, 1-Wire, на трёх проводах прокинутых последовательно по всем точкам - работает великолепно. При опросе данных раз в минуту или ещё реже, сбоев не наблюдается. Проблема с первоначальной идентификацией - разовая. Настроил и забыл.
ecoins писал(а):
04.08.2019{, 11:25}
подключение сети 1-Wire - это всегда антенны индустриальных помех
Как и все провода на входе. Некоторые не подключают внешний подтягивающий резистор, обходятся внутренним подтягивающим. Соответственно шунтирующее сопротивление сети, десятки килоом - помехам вольготно, но как сообщают, в домашних условиях и того достаточно, и всё работает. При подключении стандартного внешнего подтягивающего R=4,7k - проблем обычно не возникает. Я экспериментировал с внешним R=1k, всё прекрасно работает. А шунт в 1k хорошо гасит окружающие помехи.
ecoins писал(а):
04.08.2019{, 11:25}
Это очень и очень вандала не защищенная система
Если вандал - который с ломом, то да. "Против лома - нет приёма" Точно также вандал разрушит и всё остальное. Но если решён вопрос с защитой от проникновения к вам вандала - то нет проблем, проложил три проводка - и получил вечную бесперебойную работу.
ecoins писал(а):
04.08.2019{, 11:25}
Наше направление - сеть беспроводных сенсоров и устройств. Широко использовали ZigBee
Поиграться ребятишкам с быстрым беспроводным подключением - видимо ZigBee самое то. Или для тех кому неохота проводки тянуть и дизайново прикрывать их кабель каналами - тоже удобно.
Но в датчиках с радиоудлиннителями придётся постоянно помнить о заряде батареек. По закону подлости, сядут в самый ответственный момент, особенно если на морозе. Лично видел как тянули для радиоудлинителей провода подпитки - но ведь тогда теряется весь смысл беспроводности.
Кроме того, уже писал, повторюсь: пройдёт мимо, пусть не вандал с ломом, а некий "шутник" с такой игрушкой: https://14bytes.ru/glushilka-wifi/ и ляжет вся ваша ZigBee хоть на стенде, хоть в Умном Доме, хоть на промышленном объекте. А проводную сеть дистанционно и бесконтактно положить - это ещё нужно сильно постараться.
В промышленности используют проводной канал RS485 с опторазвязкой и километровый отрезок не проблема в цеху .кроме интерфейса важен еще протокол передачи данных (например модбас) или отсутсвие оного.
Когда говорят беспроводные датчики это относится к каналу передачи данных ,а не питания .А питание можен быть как автономным (АКБ) так и сетевым.

Разработки ecoins

Добавлено: 04.08.2019{, 14:33}
WZV
Согласен с bsn во всех пунктах. Вот уже больше года работает бесперебойно несколько веток, метров по двадцать каждая. На каждой ветке штук по десять датчиков DS18B20. Контроллер Arduino Mega2560.

Разработки ecoins

Добавлено: 04.08.2019{, 17:44}
ecoins
Интересное обсуждение.
Относительно ZigBee. Не готов согласиться. Занимаются этим у нас не дети - ставили на промышленных объектах. ZigBee - это отдельная тема, агитировать за этот тип связи сейчас не готов, есть технические решения интереснее.
Относительно длинных линий на 1-Wire. Длинные линии работают - но монтаж по комнатам, или по офису? Для нас это отдельная проблема проложить по помещениям провода к датчикам в нужных точках. Так делается для адресной пожарной сигнализации, но там и условия приемлемые - идет себе линия по потолку, и идет. К слову эти датчики и температуру в помещениях меряют.
Если подытожить - выбор решения зависит от предпочтения проектировщика и собственника системы.
Относительно сети беспроводных датчиков - это тема действительно нас сейчас занимает, к сожалению время пока другим занято.
------------------------------------
WZV писал(а):
04.08.2019{, 14:33}
Вот уже больше года работает бесперебойно несколько веток, метров по двадцать каждая. На каждой ветке штук по десять датчиков DS18B20. Контроллер Arduino Mega2560.
Было бы интересно посмотреть проект, если он на FLProg.

Разработки ecoins

Добавлено: 04.08.2019{, 18:08}
tolochko
По поводу 1WIRE
С этим протоколом работаю около 6 лет
Правда без участия контроллеров на базе компьютера
Есть такая программа Бенукс
Линия достигали 200м причем шла рядом с проводами досветки в теплице все работало
Для нормальной работы на длинных линиях нужно чтобы была подтяжка не только к земле
но и к плюсу
У 1 WIRE есть специализированная микросхема DS2480 которая работает через COM порт
Или использовать 2 пина контроллера люди делают

Разработки ecoins

Добавлено: 04.08.2019{, 18:14}
ecoins
tolochko писал(а):
04.08.2019{, 18:08}
Линия достигали 200м причем шла рядом с проводами досветки в теплице все работало
Убедительный и красивый пример.
Было бы хорошо подобные примеры на FLProg посмотреть, если они у кого-нибудь есть.

Разработки ecoins

Добавлено: 04.08.2019{, 19:17}
Rovki
Да.... , правильней говорить об интерфейсе ,а не протоколе 1WIRE

Отправлено спустя 1 минуту 13 секунд:
Rovki писал(а):
04.08.2019{, 19:17}
Да.... , правильней говорить об интерфейсе ,а не протоколе 1WIRE
Ну и конечно хорошо бы глянуть проект с несколькими десятками устройств на шине ,как у вас в ФЛ :smile427:

Разработки ecoins

Добавлено: 04.08.2019{, 20:33}
Dryundel
ecoins писал(а):
04.08.2019{, 11:25}
Одно время мы много с ней работали.
Наше мнение об иллюзорности этого решения:
Отчасти соглашусь с Вами.
Но шина 1-Wire, весьма любима пользователями, как мне кажется, Вы успели заметить.

Разработки ecoins

Добавлено: 04.08.2019{, 20:38}
Rovki
Dryundel писал(а):
04.08.2019{, 20:33}
ecoins писал(а):
04.08.2019{, 11:25}
Одно время мы много с ней работали.
Наше мнение об иллюзорности этого решения:
Отчасти соглашусь с Вами.
Но шина 1-Wire, весьма любима пользователями, как мне кажется, Вы успели заметить.
Нормальная шина ,но в ардуино она имеет программную реализацию ...и как следствие возможны тормоза ...

Разработки ecoins

Добавлено: 04.08.2019{, 22:07}
Dryundel
Немого критики.

1. Ветка разрослась и пора бы решить с админом вопрос о создании раздела ибо кожу, мед, навоз и гвозди на одной полке держать не гоже. А с учетом того что все разрабатываемые блоки еще весьма сырые, то если не под каждый блок, то хотя бы под группу хорошо было бы вести свою тему.
2. В наборе блоков последнего релиза присутствуют блоки не работающие с последними библиотеками. Понять с какими библиотеками они работают не представляется возможным. Это совсем не хорошо.

Теперь по существу.
Есть целая линейка блоков работы с LCD HD44780 вроде бы здорово но...
Работать с ними не удобно по крайней мере по двум причинам:
1. У всех блоков отсутствует функция очистки кроме конечно самого блока очистки. Почему бы не сделать ее принудительно или опционно.
2. В блоках есть вход En который предполагается подключать к выходу control блока управления, соответственно для того что бы управлять включением/выключением блока надо как то управлять сигналом control, к примеру доп. блока "И" почему бы не добавить вход control, тогда входом En можно будет управлять так же как в стандартном блоке при условии что функция очистки будет встроена.

Разработки ecoins

Добавлено: 04.08.2019{, 23:12}
ecoins
Dryundel писал(а):
04.08.2019{, 22:07}
1. У всех блоков отсутствует функция очистки кроме конечно самого блока очистки. Почему бы не сделать ее принудительно или опционно.
Это не совсем так. Достаточно указать длину=0, и будет очистка от параметра до конца строки.
---
Уже не первый раз упоминается вход EN как для очистки. Так сделано в стандартном блоке. Но это дело привычки. Мы пытались минимизировать число входов на блоках.
А можно пример применения, когда нужно стереть что-то или полностью?

Разработки ecoins

Добавлено: 05.08.2019{, 02:19}
neangel
ecoins писал(а):
01.08.2019{, 18:00}
----
Действительно - описание счетчика оказалось урезано. В новых версиях добавим.
Пока смотрите описание здесь:
БЛОК СЧЕТЧИКА
Счетчик считает в диапазоне от -32768 до +32767.
При первом включении или при rst=1, начальное значение счетчика сбрасывается
до значения "НАЧАЛЬНОЕ ЗНАЧЕНИЕ" (диапазоне от -32768 до +32767, default=0).
Счетчик считает с шагом, определяемый
значением "ШАГ ИЗМЕНЕНИЯ СЧЕТЧИКА" (диапазоне от -32768 до +32767, default=1).
Входные параметры:
rst - сброс текущего значения до параметра значения " НАЧАЛЬНОЕ ЗНАЧЕНИЕ.
mode :
'S' - пила. Если шаг >0, увеличение до верхней границы и сразу с возвратом к нижней границе.
Если шаг <0, уменьшение до нижней границы и сразу с возвратом к верхней границе.
'T' - треугольник. Если шаг >0, увеличение до верхней границы, затем уменьшение к нижней границе.
Если шаг <0, уменьшение до нижней границы, затем увеличение к верхней границе.
'L' - лимит. Если шаг >0, увеличение до верхней границы и останавливает счет.
Если шаг <0, уменьшение до нижней границы и останавливает счет.
'C' - предел. Если шаг >0, увеличение до 32767 и останавливает счет.
Если шаг <0, уменьшение до -32768 и останавливает счет.
top - верхняя граница;
bottom - нижняя граница.
----------------------------------------------------------
ecoins@mail.ru 01.08.19
И вновь я с вашим счётчиком.
Это не счётчик, а генератор чисел с частотой 67 Герц.
Которые он начинает генерировать как вы описали при ext = 1

Обманщики.

Разработки ecoins

Добавлено: 05.08.2019{, 07:32}
ecoins
Счетчик очень простой и в библиотеке выглядит следующим образом:
Код счетчика C++Показать
//---------------------------------------------------------------------------------------
// СЧЕТЧИК
// 'S' - пила. Если шаг >0, увеличение до верхней границы и сразу с возвратом к нижней границе
// Если шаг <0, уменьшение до нижней границы и сразу с возратом к верхней границе
// 'T' - треугольник. Если шаг >0, увеличение до верхней границы, затем уменьшение к нижней границе
// Если шаг <0, уменьшение до нижней границы, затем увеличение к верхней границе
// 'L' - лимит. Если шаг >0, увеличение до верхней границы и останавливает счет.
// Если шаг <0, уменьшение до нижней границы и останавливает счет.
// 'C' - предел.Если шаг >0, увеличение до 32767 и останавливает счет.
// Если шаг <0, уменьшение до -32768 и останавливает счет.
//---------------------------------------------------------------------------------------
void RT_HW_TASK:: counter(RT_HW_TASK_COUNTER_ID &id){
if(!id.init) return;
switch( id.mode ) {
default: //-----неизвестный режим - будет отрабатывать режим S
//-----пила
case 'S': if(id.delta>0) {if(id.cnt==id.top) {id.cnt=id.bottom;} else {id.cnt=id.cnt+id.delta; if (id.cnt>id.top) {id.cnt=id.top; }}} //пила+:увеличение до верхней границы с возвратом к нижней границе
if(id.delta<0) {if(id.cnt==id.bottom) {id.cnt=id.top;} else {id.cnt=id.cnt+id.delta; if (id.cnt<id.bottom) {id.cnt=id.bottom;}}} //пила-:уменьшение до нижней границы с возратом к верхней границе
break;
//-----треугольник
case 'T': if(id.cnt==id.top) id.direct=false;
if(id.cnt==id.bottom) id.direct=true;
if(id.direct==true) {id.cnt=id.cnt+id.delta; if (id.cnt>id.top) id.cnt=id.top;}
else {id.cnt=id.cnt-id.delta; if (id.cnt<id.bottom) id.cnt=id.bottom;}
break;
//----движение до установленного предела
case 'L': if(id.delta>0) {id.cnt=id.cnt+id.delta; if (id.cnt>id.top) id.cnt=id.top;} //предел+: увеличение до верхней границы;
if(id.delta<0) {id.cnt=id.cnt+id.delta; if (id.cnt<id.bottom) id.cnt=id.bottom;} //предел-: уменьшение до нижней границы;
break;
//----Движение до 32767 или до -32768
case 'C': id.cnt=id.cnt+id.delta;
if(id.delta>0) {if(id.cnt> 32767) id.cnt= 32767;}
if(id.delta<0) {if(id.cnt< -32768) id.cnt=-32768;}
break;
}}
Проверяли все режимы и активно используем в проектах, особенно для целей отладки.
Если вход ext=1, то счетчик считает при каждом вхождении.
Он у Вас считает, но возможно Вы иным образом интерпретируете полученные результаты. Возможно еще, что в проекте у Вас что-то тормозит. Пришлите проект.
Попробуйте счетчик отдельно с выводом на консоль и поэкспериментируйте с параметрами и входами.

Разработки ecoins

Добавлено: 05.08.2019{, 09:10}
Dryundel
ecoins писал(а):
04.08.2019{, 23:12}
Мы пытались минимизировать число входов на блоках.
А можно пример применения, когда нужно стереть что-то или полностью?
Минимизирование числов входов это не всегда хорошо. Можно вообще минимизировать до С+ а можно еще дальше пойти. И каков тогда смысл FBD ? По итогу мы будем имеем кучу минимизированных блоков которые надо будет составить в пазл вместо применения одного функционального блока. В результате минимизации входов имеем максимизацию количества блоков в плате.
ecoins писал(а):
04.08.2019{, 23:12}
Так сделано в стандартном блоке. Но это дело привычки.

Не стоит бороться с привычками. Как говориться лучшее - враг хорошего.
ecoins писал(а):
04.08.2019{, 23:12}
А можно пример применения, когда нужно стереть что-то или полностью?
Пример: Делаем меню. При переходе из пункта в пункт этого меню на дисплее должна отображаться разная информация. В стандартном варианте снял сигнал с блока и перевел на другой блок этот сигнал и все. В вашем варианте надо во первых как то снимать сигнал с En а это дополнительный блок, а потом еще и очищать тот кусок дисплея который он занимал,а это еще один блок. Итого вместо одного блока имеем три и каждый надо настроить и не запутаться. В этом примере нужен и вход En и очистка, иначе сталкиваемся с доп.заморочками.
ecoins писал(а):
04.08.2019{, 23:12}
Это не совсем так. Достаточно указать длину=0, и будет очистка от параметра до конца строки.
А где это прописано? Пользователю надо догадаться? Но я как то и этого не заметил. К примеру использовав блок вывода текта по номеру, с параметром длины "0" и выравниванием по центру, при снятии сигнала с En , имеем на дисплее не стертое последнее значение. (проверено)
В принципе в стандартном блоке похоже так и сделано стирание до конца строки. Но раз уж вы сделали в блоках возможность ограничения вывода длины, то почему бы не сделать опционально еще и очистку этого же предела? По принципу "Поел - убери за собой".

Отправлено спустя 22 минуты 9 секунд:
ecoins писал(а):
05.08.2019{, 07:32}
Счетчик очень простой и в библиотеке выглядит следующим образом:
К стати по поводу счетчика:
Для минимизации количества входов, вход mode логично было бы убрать в параметры, а вход ext логично было бы назвать En (в силу привычки, для стандартизации, ну или как будет угодно)

Разработки ecoins

Добавлено: 05.08.2019{, 10:31}
ecoins
Dryundel писал(а):
05.08.2019{, 09:32}
К стати по поводу счетчика:
Для минимизации количества входов, вход mode логично было бы убрать в параметры, а вход ext логично было бы назвать En (в силу привычки, для стандартизации, ну или как будет угодно
ecoins рассматривает свои блоки как конструктор под разные предпочтения. Со временем они будут включены в стандартное применение или нет - решит разработчик FLProg. У него с его инструментами гораздо больше возможностей по оформлению блоков.
В самом пользовательском блоке только одна строка на исполнении:
//--------------------------------БЛОК СЧЕТЧИК-------------------------------------------
if(rst) {id.init=false;} if(ext) { if(!id.init) RT_HW_Task.setCounterID(id, mode , ШАГ ИЗМЕНЕНИЯ СЧЕТЧИКА , top , bot , НАЧАЛЬНОЕ ЗНАЧЕНИЕ ); RT_HW_Task.counter(id); } val =id.cnt;
Пользователь может самостоятельно скомбинировать нужную конфигурацию.
Относительно ext и EN. Мы осознанно пытаемся уходить от использования наименование входа EN, когда это связано с разрешающим событием. "Событие" в терминологии ecoins, это значение (bool, int) которое становится не нулевым на один цикл loop.
Иногда запрет на работу блока (EN) и событие (event или чтобы короче используем ext) совпадают. Как в случае со счетчиком.

Разработки ecoins

Добавлено: 05.08.2019{, 10:50}
ecoins
Упрощенная версия счетчика. Вход назвал En (событие) - это немного отличаться будет от EN(запрет исполнения блока).
У счетчика только три входа: En - счет, top - верхняя граница, bottom - нижняя граница.
Доступны три параметра пользователя:
1) режим работы счетчика (S,T,L,C) - по умолчанию =S (пила);
2) шаг изменения счетчика - по умолчанию =1;
2) начальное значение счетчика - по умолчанию =0.
RTcntS_счетчик_упрощенный_(CODE).ubi
(27.69 КБ) 75 скачиваний
p.s. В новом блоке уточнил описание.

Разработки ecoins

Добавлено: 05.08.2019{, 11:42}
ecoins
А как убрать сообщение? Не нашел опции.

Разработки ecoins

Добавлено: 05.08.2019{, 11:45}
ecoins
Dryundel писал(а):
05.08.2019{, 09:32}
ecoins писал(а): ↑Вчера{, 20:12}
А можно пример применения, когда нужно стереть что-то или полностью?
Пример: Делаем меню. При переходе из пункта в пункт этого меню на дисплее должна отображаться разная информация. В стандартном варианте снял сигнал с блока и перевел на другой блок этот сигнал и все. В вашем варианте надо во первых как то снимать сигнал с En а это дополнительный блок, а потом еще и очищать тот кусок дисплея который он занимал,а это еще один блок. Итого вместо одного блока имеем три и каждый надо настроить и не запутаться. В этом примере нужен и вход En и очистка, иначе сталкиваемся с доп.заморочками.
Вопрос: Нужно очистить дисплей весь, и при этом работающие блоки кто-то заблокирует, а новые кто-то включит? Это ведь можно сделать и сейчас, установив после lcd.begin блок AND или мультиплексор.
Из описания блока:
Вход: EN - разрешение работы. Через этот вход также достигается снижение затрат процессорного времени;
val - переменная в формате int16_t (int)
НОМЕР ДИСПЛЕЯ - обращается к инициализированному блоку RTlcdBegin с таким же номером;
КОЛОНКА - номер колонки;
СТРОКА - номер строки;
ДЛИНА - разрешенная длина выводимого поля. Если =0, выводит до конца строки;
ПЕРИОД - (мс) период изменения символа на дисплее;
ВЫРАВНИВАНИЕ - выравнивание текста в поле: N - без выравнивания, L -влево, С -по центру, R -вправо;
То есть сейчас указав в блоке lcd.srting 1 колонку и 1 строку, длину 0, на входе " ", можно стереть 1-ю строку.
---Можно добавить вход конечно очистки. Надо обдумать. Или сделать отдельно блок очистки строки.

Разработки ecoins

Добавлено: 05.08.2019{, 11:56}
Dryundel
ecoins писал(а):
05.08.2019{, 10:50}
У счетчика только три входа: En - счет, top - верхняя граница, bottom - нижняя граница.
Ну почему же Вы перебарщиваете?
Зачем шаг изменения счетчика и начальное значение счетчика убрали в параметры?

Выход Шаг изменения счетчика необходим при организации инкрементных ускорений, а начальное значение счетчика необходимо для ввода этого значения из EEPROM в случае настраиваемых девайсов.

Отправлено спустя 4 минуты 19 секунд:
ecoins писал(а):
05.08.2019{, 11:45}
Вопрос: Нужно очистить дисплей весь, и при этом работающие блоки кто-то заблокирует, а новые кто-то включит?
Зачем весь? Если блок что то нацарапал на дисплее так пусть он только это и очистит. Я же писал, по принципу "поел убери за собой". А для очистки всего дисплея к стати блока вроде и нет. А не плохо бы.

Разработки ecoins

Добавлено: 05.08.2019{, 12:32}
ecoins
Dryundel писал(а):
05.08.2019{, 12:00}
Зачем весь? Если блок что то нацарапал на дисплее так пусть он только это и очистит. Я же писал, по принципу "поел убери за собой". А для очистки всего дисплея к стати блока вроде и нет. А не плохо бы.
По дисплею соберется набор предложений и библиотеку с блоками доработаю. По очистке дисплея и выключение подсветки учту.

Разработки ecoins

Добавлено: 05.08.2019{, 12:53}
ecoins
Версия счетчика со всеми внешними параметрами - на паука стал похож :smile469: .
======================================================
БЛОК СЧЕТЧИКА С ВНЕШНИМИ ПАРАМЕТРАМИ
Входы:
En - разрешение счета.Счетчик считает, когда на входе En событие (=1 на один цикл loop).
Если En=1 всегда, то он считает при каждом вхождении.
rst - сброс. Устанавливается значение выхода=begin и начинается новый счет.
step - шаг изменения (int). Может быть положительным и отрицательным. =0 - не считает.
mode - режим работы счетчика (S,T,L,C) - по умолчанию =S (пила).
top - верхняя граница,
bottom - нижняя граница.

Счетчик считает в диапазоне от -32768 до +32767.

При первом включении начальное и после rst=1 значение счетчика сбрасывается до begin .
РЕЖИМ РАБОТЫ СЧEТЧИКА :
'S' - пила. Если шаг >0, увеличение до верхней границы и сразу с возвратом к нижней границе.
Если шаг <0, уменьшение до нижней границы и сразу с возвратом к верхней границе.
'T' - треугольник. Если шаг >0, увеличение до верхней границы, затем уменьшение к нижней границе.
Если шаг <0, уменьшение до нижней границы, затем увеличение к верхней границе.
'L' - лимит. Если шаг >0, увеличение до верхней границы и останавливает счет.
Если шаг <0, уменьшение до нижней границы и останавливает счет.
'C' - предел. Если шаг >0, увеличение до 32767 и останавливает счет.
Если шаг <0, уменьшение до -32768 и останавливает счет.
----------------------------------------------------------
ecoins@mail.ru 05.08.19