Все работает, все переносится)
Перенес таким образом систему с ББ Debian на нетбук с WIN 10, потом на RaspberryPI3, потом на BananaPi M2U. робит везде.
После переноса нужно время (до нескольких часов для автоматической подгрузки всех модулей).
Все работает, все переносится)
Перенес таким образом систему с ББ Debian на нетбук с WIN 10, потом на RaspberryPI3, потом на BananaPi M2U. робит везде.
После переноса нужно время (до нескольких часов для автоматической подгрузки всех модулей).
Мне кажется не настолько FBD проще чем Blockly, чтобы городить отдельный драйвер, тем более гибкость последнего гораздо выше.
Вы попробуйте Blockly, в части логических цепей он достаточно примитивен и понятен.
Вы спрашивайте, тут достаточно быстро ответят (гораздо быстрее чем создастся новый драйвер)
Это лично мое мнение, никому не навязываю. Может и стоит подумать над добавлением языков МЭК 61131-3..
хотя в чистом виде они тут не пойдут, т.к. они для RTOS
У меня реализовано немного по другому.
На сервере, в кроне, каждые 30 секунд генерится "0" в MQTT топик "status" для списка беспроводных девайсов. (по очереди, с небольшой задержкой друг относительно друга)
Все MQTT девайсы, получая "status" не зависимо от его содержания, отправляют свой status "1" на сервер.
Сервер все запоминает, и так по кругу).
но предидущая версия с парсингом может быть проще… если разбирать список не лень
Добрый день.
Кроме всего прочего, посмотрите в сторону микроволновых датчиков движения.
Для них стеклянная перегородка не препятствие.
Не Обязательно после первого пункта драйвера сами пот тянутся.
P.S. Если та же машина, то просто переписать папку. Если имя машины поменялось, то после копирования написать "iobroker host self" `
перенес машину с win10 на чистый linux.
Папка скопирована, права выданы. После перезагрузки в настройках драйверов - список обновился, в списке установки драйверов указано что они не установлены. Соответственно и не работают. Вручную установил каждый через терминал с SU, но не запускаются все равно. Из вебморды установить модули не могу. не ставит, ошибка. Не знаю как еще объяснить… Может где прав iobroker-y не хватает. Не знаю где прописать.
node 6.11.5
npm 3.10.10
решено - переставил js-controller, admin..
вроде все получилось.
разбил по-символьно, засунул в массив.
получилось как то так:
! ````
var bin16;
var length1;
var data = [];
createState('MOV.FLT',0);
createState('MOV.KUH',0);
createState('MOV.KOR',0);
createState('MOV.BDR',0);
createState('MOV.DET',0);
createState('MOV.VAN',0);
createState('MOV.TLT',0);
createState('MOV.PRH',0);
! schedule("*/15 * * * * *", function () {
! bin16 = getState("modbus.0.holdingRegisters.56411_MOV_FLT").val.toString(2); // получаем из ячейки modbus 2-х байтное слово и переводим в двоичное представление, слово типа "1010011101"
! length1 = 6;
while (length1>=0) { // обнуляем весь массив для того чтоб не было undefined при массиве размером меньше 6
data[length1]=0;
length1--;
}
! switch (parseInt (bin16)) {
! case 0: //если ключевой бит снят то все обнуляем
setState("javascript.0.MOV.FLT", 0);
setState("javascript.0.MOV.KUH"/MOV.KUH/, 0);
setState("javascript.0.MOV.KOR"/MOV.KOR/, 0);
setState("javascript.0.MOV.BDR"/MOV.BDR/, 0);
setState("javascript.0.MOV.DET"/MOV.DET/, 0);
setState("javascript.0.MOV.VAN"/MOV.VAN/, 0);
setState("javascript.0.MOV.TLT"/MOV.TLT/, 0);
setState("javascript.0.MOV.PRH"/MOV.PRH/, 0);
break;
! case 1: // если установлен только ключевой бит то отмечаем только его
setState("javascript.0.MOV.FLT", 1);
setState("javascript.0.MOV.KUH"/MOV.KUH/, 0);
setState("javascript.0.MOV.KOR"/MOV.KOR/, 0);
setState("javascript.0.MOV.BDR"/MOV.BDR/, 0);
setState("javascript.0.MOV.DET"/MOV.DET/, 0);
setState("javascript.0.MOV.VAN"/MOV.VAN/, 0);
setState("javascript.0.MOV.TLT"/MOV.TLT/, 0);
setState("javascript.0.MOV.PRH"/MOV.PRH/, 0);
break;
default: // во всех других случаях разбираем бинарное старшее слово
length1 = (bin16.length)-9;
while (length1>=0) { //5 и меньше
data[length1] = parseInt (bin16.charAt(length1),2); // пишем в массив побитно (с 9-го бита слова вверх)
length1--;
}
setState("javascript.0.MOV.FLT", 1);
setState("javascript.0.MOV.KUH"/*MOV.KUH*/, data[0]);
setState("javascript.0.MOV.KOR"/*MOV.KOR*/, data[1]);
setState("javascript.0.MOV.BDR"/*MOV.BDR*/, data[2]);
setState("javascript.0.MOV.DET"/*MOV.DET*/, data[3]);
setState("javascript.0.MOV.VAN"/*MOV.VAN*/, data[4]);
setState("javascript.0.MOV.TLT"/*MOV.TLT*/, data[5]);
setState("javascript.0.MOV.PRH"/*MOV.PRH*/, data[6]);
}
! });
не сильно оптимально, но работает)
Читаю просто, двухбайтное слово через modbus TCP с контроллера.
Благодарю, щас раскурю ссылку.
Добрый день.
К сожалению Beckhoff дает считать с себя данные только словами, а это 16 бит.
Читаю из Remanent области и для получения 50 бит данных разбазаривать 100 байт совсем не комильфо, когда можно считать одним словом булевы данные по целому разделу.
в JS не силен, курил булевы операции но так и не понял как правильно перевести число в двоичный вид и раскидать данные по отдельным переменным… точнее так: как правильно сделать побитовый сдвиг и "&" с маской...
А есть возможность перенести с WIN системы все на raspberry?
Сейчас отлаживаю и проверяю просто в виртуалке на WIN ноуте, при инсталляции все будет на SoC.