Посмотрите пример:
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 и получение интерфейса клиентов перед ними.
Добрый день. Подскажите, пожалуйста, как можно изменить число подключаемых клиентов по ModBus TCP при использовании библиотеки OwenCommunication?
Добрый день.
Подскажите пожалуйста, в 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 .
> Сочувствую.
Так всё плохо с синхронизацией многопоточности в CoDeSys? :-)
> Какое именно поведение TEST_AND_SET вы считает корректным, а какое - нет?
Корректное -- соответствующее документации, некорректное -- не соответствующее.
Тут беда ещё в том, что отладке всё это многопоточное поддаётся чуть лучше, чем никак, потому твёрдой уверенности в том, что TEST_AND_SET чудит, у меня нет. Но "защищённые" данные портятся так, если бы TEST_AND_SET не выполняла атомарность.
Всё вполне нормально, если она используется там, где действительно нужна, а не в фундаменте системы автоматизации очередной абстрактной фабрики.Цитата:
Так всё плохо с синхронизацией многопоточности в CoDeSys?
В принципе, даже "защищенные" данные можно легко испортить в любом фрагменте кода с массивами, указателями и т.д.Цитата:
Но "защищённые" данные портятся так, если бы TEST_AND_SET не выполняла атомарность.
Отладка кода вдвое сложнее, чем его написание. Так что если вы пишете код настолько умно, насколько можете, то вы по определению недостаточно сообразительны, чтобы его отлаживать. (с) Брайан КерниганЦитата:
Тут беда ещё в том, что отладке всё это многопоточное поддаётся чуть лучше, чем никак
Еще рекомендую обратить внимание на три слова на обложке одной известной книги.
> там, где действительно нужна
Обмен данными с устройствами Modbus.
> даже "защищенные" данные можно легко испортить в любом фрагменте кода с массивами
Есть и на это подозрение, я ошибусь с бОльшей вероятностью, чем разработчики компилятора.