EasyBuilder - Скорая помощь новичкам

Работа с панелями оператора Weintek - подключение, программирование, совмещение с ПЛК

Модераторы: kiv, 8bit, VanMo

Re: EasyBuilder - Скорая помощь новичкам

Сообщение alex1917 » 17 мар 2023, 19:49

dimensy писал(а):
Тогда для запуска макроса используйте триггер. Безопасность просто разрешает работать макросу, а когда он запуститься одной панели известно


про безопасность понял, спасибо.
с триггером для запуска макроса не все просто, пока не придумал, что можно считать этим триггером(
В "передаче данных" в разделе "уведомление" можно назначить бит, который изменит состояние в момент когда устройство _готово_ начать передачу данных, а потом изменит в момент когда эта передача _началась_, по крайней мере так понял документацию. А мне нужен бит который сигнализирует о том что передача именно _закончилась_.

Еще раз обдумал ваш вариант когда данные заполняют массив внутри макроса, все же это в моем случае не подходит, потому что непонятно где именно в LW памяти будет располагаться этот массив, и чтобы работать с ним нужно всю остальную часть макроса переделывать (что в случае второго макроса на 120 слов не так и просто).
Сейчас из считанных данных часть отображается без обработки, часть разбирается на байты, часть наоборот - преобразуется в int после маскировки определенных бит, часть сохраняется в RW памяти и так далее.
alex1917
 
Сообщения: 14
Зарегистрирован: 16 мар 2023, 17:17

Re: EasyBuilder - Скорая помощь новичкам

Сообщение dimensy » 17 мар 2023, 21:53

alex1917 писал(а):Еще раз обдумал ваш вариант когда данные заполняют массив внутри макроса, все же это в моем случае не подходит, потому что непонятно где именно в LW памяти будет располагаться этот массив, и чтобы работать с ним нужно всю остальную часть макроса переделывать (что в случае второго макроса на 120 слов не так и просто).
Сейчас из считанных данных часть отображается без обработки, часть разбирается на байты, часть наоборот - преобразуется в int после маскировки определенных бит, часть сохраняется в RW памяти и так далее.


Куда запишите, там и будет

Код: Выделить всё
SetData(Data[0], "Local HMI", LW, 0, 17)


alex1917 писал(а):с триггером для запуска макроса не все просто, пока не придумал, что можно считать этим триггером(
В "передаче данных" в разделе "уведомление" можно назначить бит, который изменит состояние в момент когда устройство _готово_ начать передачу данных, а потом изменит в момент когда эта передача _началась_, по крайней мере так понял документацию. А мне нужен бит который сигнализирует о том что передача именно _закончилась_.


Насколько я понял справку, то бит изменяется перед началом передачи (если галку поставить) и после передачи
dimensy
 
Сообщения: 208
Зарегистрирован: 14 мар 2018, 17:54

Re: EasyBuilder - Скорая помощь новичкам

Сообщение alex1917 » 17 мар 2023, 23:45

dimensy писал(а):Куда запишите, там и будет

Код: Выделить всё
SetData(Data[0], "Local HMI", LW, 0, 17)



То есть чтобы получить полностью аналогичный результат вот для этой передачи данных https://imgur.com/7ixDaoe

нужен вот такой код?
Код: Выделить всё
macro_command main()
short Data[17]
GetData(Data[0], "Mercury", 4x, 1, 17)
SetData(Data[0], "Local HMI", LW, 0, 17)
end macro_command


dimensy писал(а):
Насколько я понял справку, то бит изменяется перед началом передачи (если галку поставить) и после передачи


Notification : When enabled, the system will set the designated address ON or OFF when it’s ready for data transfer.
Follow: The notification bit will reset to its original state once the system starts data transfer

Двусмысленное какое-то описание, похоже придется экспериментировать. Можно конечно предположить что
статус "it’s ready for data transfer" означает что предыдущая передача данных завершена, но это слегка притянуто за уши
alex1917
 
Сообщения: 14
Зарегистрирован: 16 мар 2023, 17:17

Re: EasyBuilder - Скорая помощь новичкам

Сообщение dimensy » 18 мар 2023, 09:35

alex1917 писал(а):То есть чтобы получить полностью аналогичный результат вот для этой передачи данных https://imgur.com/7ixDaoe

нужен вот такой код?
Код: Выделить всё
macro_command main()
short Data[17]
GetData(Data[0], "Mercury", 4x, 1, 17)
SetData(Data[0], "Local HMI", LW, 0, 17)
end macro_command



Да
dimensy
 
Сообщения: 208
Зарегистрирован: 14 мар 2018, 17:54

Re: EasyBuilder - Скорая помощь новичкам

Сообщение alex1917 » 18 мар 2023, 11:59

dimensy писал(а):
alex1917 писал(а):То есть чтобы получить полностью аналогичный результат вот для этой передачи данных https://imgur.com/7ixDaoe

нужен вот такой код?
Код: Выделить всё
short Data[17]
GetData(Data[0], "Mercury", 4x, 1, 17)
SetData(Data[0], "Local HMI", LW, 0, 17)



Да

Спасибо, переделал прошлый макрос, добавив три строчки в начало, все, как ожидалось, работает.
Выяснил правда что проблема вообще не в этом была, весть цикл запроса и обработки данных в любом варианте короткий, около 2 мс, и ничему не мешает.
А вот modbus адаптер для электросчетчиков Меркурий от Тракт-Автоматики так устроен, что цикл опроса счетчиков крутится в нем постоянно, и нет никаких битов готовности данных, которые позволяют считать корректные данные. Поэтому когда считываешь медленные данные, все в порядке, а когда быстрые, типа текущей мощности - данные часто меняются в процессе считывания, что искажает картину.

В любом случае спасибо за советы, надеюсь они были полезны и еще кому-то из начинающих, кроме меня.
alex1917
 
Сообщения: 14
Зарегистрирован: 16 мар 2023, 17:17

Re: EasyBuilder - Скорая помощь новичкам

Сообщение alex1917 » 18 мар 2023, 18:26

Прошу еще помощи у коллективного разума.
Благодаря умным советам dimensy в итоге убрал отдельную передачу данных, оставил два макроса, которые тянут данные по modbus из счетчика, один макрос запускается раз в 200мс, второй - раз в 5000 мс. Всё работает как ожидалось, запросы посылаются именно с этими интервалами.

Добавил на панель битовый индикатор для контроля процесса, его бит ставится в 1 в начале макроса и сбрасывается в 0 в конце, вот таким простейшим кодом в начале макроса:
Код: Выделить всё
bool transfer1_fast
transfer1_fast = true //зажгли индикатор на панели в начале выполнения макроса
SetData(transfer1_fast, "Local HMI", LB, 1, 1)


и в конце макроса:
Код: Выделить всё
transfer1_fast = false//погасили индикатор на панели в конце выполнения макроса
SetData(transfer1_fast, "Local HMI", LB, 1, 1)


Вроде проще некуда, однако при добавлении этого кода индикатор мигает неравномерно, а макрос запускается не 1 раз в 200 мс, а как бог на душу положит - то через 80 мс, то через 150 и так далее. Убираю код управления этим битом - снова все в порядке, макрос запускается как часы, через 200мс.

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

В чем причина такого поведения, что я делаю не так в этот раз?
alex1917
 
Сообщения: 14
Зарегистрирован: 16 мар 2023, 17:17

Re: EasyBuilder - Скорая помощь новичкам

Сообщение dimensy » 19 мар 2023, 10:23

alex1917 писал(а):В чем причина такого поведения, что я делаю не так в этот раз?


А как вы измеряете период запуска макроса? И где вы экспериментируете - в эмуляции или на железе?
Ну и, я думаю, что это не очень хорошая идея, т.к. макрос достаточно быстро должен выполняться, панель может просто не успевать отрисовывать лампочку
dimensy
 
Сообщения: 208
Зарегистрирован: 14 мар 2018, 17:54

Re: EasyBuilder - Скорая помощь новичкам

Сообщение alex1917 » 19 мар 2023, 16:10

dimensy писал(а):
alex1917 писал(а):В чем причина такого поведения, что я делаю не так в этот раз?


А как вы измеряете период запуска макроса? И где вы экспериментируете - в эмуляции или на железе?
Ну и, я думаю, что это не очень хорошая идея, т.к. макрос достаточно быстро должен выполняться, панель может просто не успевать отрисовывать лампочку


Период запуска макроса вижу в сниффере пакетов (wireshark), там видны все пакеты бегающие по сети и их временнЫе отметки. Так что видно и запрос и ответ, и промежутки между ними.
Экспериментировал и в эмуляции и в железе, результаты совпадают.
Насчет отрисовки лампочки - проблема не в отрисовке ведь, а в том что хаотически сбивается период запуска макроса, причем в меньшую сторону (например с 200мс до 80-150 мс)
Но кстати и с отрисовкой лампочки проблем никаких - пока вместо макроса была "передача данных" с тем же периодом 200мс, то лампочка от бита "Уведомление" прекрасно мигала.
Самое непонятное почему макрос запускается чаще чем положено. Я бы понял если бы что-то не успевало выполниться и макрос перезапускался бы с бОльшим периодом, чем я задал, но то запускается-то он чаще чем положено
alex1917
 
Сообщения: 14
Зарегистрирован: 16 мар 2023, 17:17

Re: EasyBuilder - Скорая помощь новичкам

Сообщение dimensy » 19 мар 2023, 18:02

delete
dimensy
 
Сообщения: 208
Зарегистрирован: 14 мар 2018, 17:54

Re: EasyBuilder - Скорая помощь новичкам

Сообщение alex1917 » 22 мар 2023, 14:20

Кстати сейчас вообще убрал из проекта отображение этого бита, со всех экранов, а эффект не исчез.
Так что вопрос не в отрисовке кнопок, скорее какой-то глюк софта. Не должно дергание бита внутри макроса менять период запуска этого макроса
alex1917
 
Сообщения: 14
Зарегистрирован: 16 мар 2023, 17:17

Пред.След.

Вернуться в Weintek

Кто сейчас на конференции

Сейчас этот форум просматривают: Bing [Bot] и гости: 1