Посмотрите пример:
https://forge.codesys.com/svn/prj,co...anager.project
В PLC_PRG см. вызовы AlarmManager.g_AlarmHandler.GetActiveAlarms и получение интерфейса клиентов перед ними.
Посмотрите пример:
https://forge.codesys.com/svn/prj,co...anager.project
В PLC_PRG см. вызовы AlarmManager.g_AlarmHandler.GetActiveAlarms и получение интерфейса клиентов перед ними.
СODESYS V3.5: Repository Archive V3.5 SP4 (необходим для старых СПК) / Раздел CDS V3.5 на сайте
Форум: Вопросы и ответы / Визуализация / Настройка обмена с другими устройствами
Web-панель ВП110 / Modbus-индикатор СМИ2-М
Telegram: @JuneSmellsLikeBlood | e-mail: e.kislov@owen.ru | oscat.ru | Как обратиться в техподдержку?
Как отлаживать ошибки | Отладка проектов в CODESYS V3.5 | XY problem | Как правильно задавать вопросы | AnyDesk
Добрый день. Подскажите, пожалуйста, как можно изменить число подключаемых клиентов по ModBus TCP при использовании библиотеки OwenCommunication?
СODESYS V3.5: Repository Archive V3.5 SP4 (необходим для старых СПК) / Раздел CDS V3.5 на сайте
Форум: Вопросы и ответы / Визуализация / Настройка обмена с другими устройствами
Web-панель ВП110 / Modbus-индикатор СМИ2-М
Telegram: @JuneSmellsLikeBlood | e-mail: e.kislov@owen.ru | oscat.ru | Как обратиться в техподдержку?
Как отлаживать ошибки | Отладка проектов в CODESYS V3.5 | XY problem | Как правильно задавать вопросы | AnyDesk
Добрый день.
Подскажите пожалуйста, в CoDeSys 3.5 SP14 P3+ наблюдались ли проблемы с функцией TEST_AND_SET ?
В проекте активно используется синхронизация многопоточного доступа, и возникают ситуации, похожие на некорректное срабатывание TEST_AND_SET .
Использую эту функцию таким образом:
Или это у меня ошибка?Код:SleepTime := TIME(); REPEAT IsWLocked := SEL(IsWLocked = TRUE, TEST_AND_SET(WDataDefender) = 0, TRUE); IsRLocked := SEL(IsRLocked = TRUE, TEST_AND_SET(RDataDefender) = 0, TRUE); UNTIL ((TIME() - SleepTime) > DataLockWaitTime) OR_ELSE ((IsWLocked AND IsRLocked) = TRUE) END_REPEAT IF (IsWLocked AND IsRLocked) = TRUE THEN // Тут работа с "защищёнными" данными END_IF IF IsRLocked = TRUE THEN RDataDefender := 0; END_IF IF IsWLocked = TRUE THEN WDataDefender := 0; END_IF
Добрый день.
Сочувствую.В проекте активно используется синхронизация многопоточного доступа
Какое именно поведение TEST_AND_SET вы считает корректным, а какое - нет?и возникают ситуации, похожие на некорректное срабатывание TEST_AND_SET .
СODESYS V3.5: Repository Archive V3.5 SP4 (необходим для старых СПК) / Раздел CDS V3.5 на сайте
Форум: Вопросы и ответы / Визуализация / Настройка обмена с другими устройствами
Web-панель ВП110 / Modbus-индикатор СМИ2-М
Telegram: @JuneSmellsLikeBlood | e-mail: e.kislov@owen.ru | oscat.ru | Как обратиться в техподдержку?
Как отлаживать ошибки | Отладка проектов в CODESYS V3.5 | XY problem | Как правильно задавать вопросы | AnyDesk
> Сочувствую.
Так всё плохо с синхронизацией многопоточности в CoDeSys? :-)
> Какое именно поведение TEST_AND_SET вы считает корректным, а какое - нет?
Корректное -- соответствующее документации, некорректное -- не соответствующее.
Тут беда ещё в том, что отладке всё это многопоточное поддаётся чуть лучше, чем никак, потому твёрдой уверенности в том, что TEST_AND_SET чудит, у меня нет. Но "защищённые" данные портятся так, если бы TEST_AND_SET не выполняла атомарность.
Всё вполне нормально, если она используется там, где действительно нужна, а не в фундаменте системы автоматизации очередной абстрактной фабрики.Так всё плохо с синхронизацией многопоточности в CoDeSys?
В принципе, даже "защищенные" данные можно легко испортить в любом фрагменте кода с массивами, указателями и т.д.Но "защищённые" данные портятся так, если бы TEST_AND_SET не выполняла атомарность.
Отладка кода вдвое сложнее, чем его написание. Так что если вы пишете код настолько умно, насколько можете, то вы по определению недостаточно сообразительны, чтобы его отлаживать. (с) Брайан КерниганТут беда ещё в том, что отладке всё это многопоточное поддаётся чуть лучше, чем никак
Еще рекомендую обратить внимание на три слова на обложке одной известной книги.
Последний раз редактировалось Евгений Кислов; 15.05.2023 в 17:49.
СODESYS V3.5: Repository Archive V3.5 SP4 (необходим для старых СПК) / Раздел CDS V3.5 на сайте
Форум: Вопросы и ответы / Визуализация / Настройка обмена с другими устройствами
Web-панель ВП110 / Modbus-индикатор СМИ2-М
Telegram: @JuneSmellsLikeBlood | e-mail: e.kislov@owen.ru | oscat.ru | Как обратиться в техподдержку?
Как отлаживать ошибки | Отладка проектов в CODESYS V3.5 | XY problem | Как правильно задавать вопросы | AnyDesk
> там, где действительно нужна
Обмен данными с устройствами Modbus.
> даже "защищенные" данные можно легко испортить в любом фрагменте кода с массивами
Есть и на это подозрение, я ошибусь с бОльшей вероятностью, чем разработчики компилятора.