Не записываются данные в свойства объекта

Использование системы в различных ситуациях, вопросы программирования сценариев.

Модератор: immortal

Ответить
vladj
Сообщения: 5
Зарегистрирован: Пт апр 19, 2019 6:32 pm
Благодарил (а): 1 раз
Поблагодарили: 0

Не записываются данные в свойства объекта

Сообщение vladj » Пт ноя 29, 2019 9:42 pm

Добрый день.
Занялся подключением ПР200 к Majordomo.
Навеяно ютуб-каналом Юрия Р, в частности данным видео https://www.youtube.com/watch?v=eo5J8RGIpOQ&t=708s
Подсказал с алгоритмом bool_to_int и Int_to_bool в mjdm за что ему большое спасибо.
Что было сделано:
1. Создал класс ПР200
2. Добавил свойства : входы DI1-16, выходы DO1-16, регистры для этих DI, DO.
3. Создал объект ПР200. Все входы/выходы там автоматом появились.
4. Подключил ПР200 через Modbus TCP. Использовал конвертер Elfin-EW11 Modbus RTU <-> TCP. Заработало сразу, рекомендую.
5. Данные из ПР200 получаю корректно. Это регистр с данными входов в ПР в виде целочисленного числа.
6. в модуле modbus в mdjm делаю привязку этих данных с объектом ПР200 и свойством "PR200_1.DIx - Дискретные входы из регистра"
Далее столкнулся с такой проблемой.
7. При просмотре свойств объекта ПР200 в "PR200_1.DIx - Дискретные входы из регистра" (это свойство было создано в классе ПР200, присутствует текстовое описание) полученные из ПР данные не записываются.
8. Автоматически создается еще одно свойство объекта с таким же именем "PR200_1.DIx" (без описания) и данные записываются именно туда.
9. Еще раз: в свойствах объекта два свойства с одинаковым именем!!! Одно наше, другое создается автоматически. Его удаляешь, оно опять появляется.
10. При дальнейших действиях с глобальной переменной "PR200_1.DIx" ничего не происходит, поскольку данных там нет или они не те что пришло из ПР200. И полученное слово на биты разобрать не выходит.


Занимался проблемой почти весь день, не получается побороть.
(Все убивал/создавал заново несколько раз, перезагрузка модулей, apache и т.д.)
Знающие люди, посоветуйте куда копать.
Jilber
Сообщения: 684
Зарегистрирован: Ср май 03, 2017 7:41 pm
Благодарил (а): 113 раз
Поблагодарили: 107 раз

Re: Не записываются данные в свойства объекта

Сообщение Jilber » Пт ноя 29, 2019 10:05 pm

А нельзя удалить созданное вручную свойство (может там в названии где-то грамматическая ошибка или вообще русский символ затесался ?) и работать с тем, которое создалось автоматически ?
vladj
Сообщения: 5
Зарегистрирован: Пт апр 19, 2019 6:32 pm
Благодарил (а): 1 раз
Поблагодарили: 0

Re: Не записываются данные в свойства объекта

Сообщение vladj » Сб ноя 30, 2019 8:14 am

Удалить то можно, но дело в том что в настройках свойства указано при его изменении запускать метод INT_BOOL. А именно прочитать и разобрать на биты:
$in=gg('PR200_1.DIx');
echo $in; //здесь при ручном запуске значение корректное.
sg('PR200_1.DI1', $in&0b0000000000000001);
sg('PR200_1.DI2', ($in&0b0000000000000010)>>1);
sg('PR200_1.DI3', ($in&0b0000000000000100)>>2);
sg('PR200_1.DI4', ($in&0b0000000000001000)>>3);
sg('PR200_1.DI5', ($in&0b0000000000010000)>>4);
sg('PR200_1.DI6', ($in&0b0000000000100000)>>5);
sg('PR200_1.DI7', ($in&0b0000000001000000)>>6);
sg('PR200_1.DI8', ($in&0b0000000010000000)>>7);
sg('PR200_1.DI9', ($in&0b0000000100000000)>>8);
sg('PR200_1.DI10', ($in&0b0000001000000000)>>9);
sg('PR200_1.DI11', ($in&0b0000010000000000)>>10);
sg('PR200_1.DI12', ($in&0b0000100000000000)>>11);
sg('PR200_1.DI13', ($in&0b0001000000000000)>>12);
sg('PR200_1.DI14', ($in&0b0010000000000000)>>13);
sg('PR200_1.DI15', ($in&0b0100000000000000)>>14);
sg('PR200_1.DI16', ($in&0b1000000000000000)>>15);

У этого автоматически созданного свойства такой возможности нет. Он не запускает этот скрипт и биты не обновляются.
Кому интересно, выше пример как разобрать число на биты.
Аватара пользователя
xor
Сообщения: 2039
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 286 раз
Поблагодарили: 629 раз

Re: Не записываются данные в свойства объекта

Сообщение xor » Сб ноя 30, 2019 12:15 pm

vladj писал(а):Удалить то можно, но дело в том что в настройках свойства указано при его изменении запускать метод INT_BOOL. А именно прочитать и разобрать на биты:
$in=gg('PR200_1.DIx');
echo $in; //здесь при ручном запуске значение корректное.
sg('PR200_1.DI1', $in&0b0000000000000001);
sg('PR200_1.DI2', ($in&0b0000000000000010)>>1);
sg('PR200_1.DI3', ($in&0b0000000000000100)>>2);
sg('PR200_1.DI4', ($in&0b0000000000001000)>>3);
sg('PR200_1.DI5', ($in&0b0000000000010000)>>4);
sg('PR200_1.DI6', ($in&0b0000000000100000)>>5);
sg('PR200_1.DI7', ($in&0b0000000001000000)>>6);
sg('PR200_1.DI8', ($in&0b0000000010000000)>>7);
sg('PR200_1.DI9', ($in&0b0000000100000000)>>8);
sg('PR200_1.DI10', ($in&0b0000001000000000)>>9);
sg('PR200_1.DI11', ($in&0b0000010000000000)>>10);
sg('PR200_1.DI12', ($in&0b0000100000000000)>>11);
sg('PR200_1.DI13', ($in&0b0001000000000000)>>12);
sg('PR200_1.DI14', ($in&0b0010000000000000)>>13);
sg('PR200_1.DI15', ($in&0b0100000000000000)>>14);
sg('PR200_1.DI16', ($in&0b1000000000000000)>>15);

У этого автоматически созданного свойства такой возможности нет. Он не запускает этот скрипт и биты не обновляются.
Кому интересно, выше пример как разобрать число на биты.
Свойство новое создаётся только при отсутствии точного совпадения с существующим. Без скринов объектов/кода трудно давать советы. Вы то ПР пишете, то PR, то про какие-то глобальные переменные, проще картинкой показать в таком случае

Отправлено с моего Redmi 4X через Tapatalk


Jilber
Сообщения: 684
Зарегистрирован: Ср май 03, 2017 7:41 pm
Благодарил (а): 113 раз
Поблагодарили: 107 раз

Re: Не записываются данные в свойства объекта

Сообщение Jilber » Сб ноя 30, 2019 2:16 pm

vladj писал(а):
Сб ноя 30, 2019 8:14 am
Удалить то можно, но дело в том что в настройках свойства указано при его изменении запускать метод INT_BOOL.
У этого автоматически созданного свойства такой возможности нет. Он не запускает этот скрипт и биты не обновляются.
Это автоматически созданное свойство на уровне объекта ? Скопируйте его название и создайте такое же на уровне класса, тогда будет возможность запускать метод при его изменении.
vladj
Сообщения: 5
Зарегистрирован: Пт апр 19, 2019 6:32 pm
Благодарил (а): 1 раз
Поблагодарили: 0

Re: Не записываются данные в свойства объекта

Сообщение vladj » Пн дек 02, 2019 8:54 pm

Удалил объект а так же это "неправильное" свойство в классе.
Создал все заново, заработало.
Но возникла друга проблема: долго отрабатывает мажордомо изменения на устройстве ПР200.
Т.е. на ПР200 подаем на вход логическую "1", а в системе данные меняются только через 9-13 секунд. Бывает почти сразу, но в основном с задержкой.
Такой момент, если на вкладке Modbus вручную обновить данные, в системе тоже быстро отрабатывает.
Период обновления в настройках - 1 секунда.
Это самая большая печалька...
vladj
Сообщения: 5
Зарегистрирован: Пт апр 19, 2019 6:32 pm
Благодарил (а): 1 раз
Поблагодарили: 0

Re: Не записываются данные в свойства объекта

Сообщение vladj » Пн дек 16, 2019 7:08 pm

Заработало всё как надо.
Не забывайте делать рестарт модуля Modbus. )))
Ответить