Сообщение от
R2_
2. Часто выскакивает системное окно "Доступ открыт", хотя никакой ФО связанной с доступом вроде нет. Есть единственный элемент - "Переход на экран", требующий ввод пароля, но в тестах его не трогаем.
3. Как лучше организовать систему индикации обрыва связи с каждым Слейвом? через макрос, вызываемый каждую секунду и считывающий, например какой-то бит у Слейва, но что будет при обрыве связи, вернет ли считывание 0 или останется последний считанный результат? (можно конечно считывать регистр, который инкриментировать на Slave при каждом считывании и проверять на панеле, изменилось ли значение). может есть какой-то более прямой способ.
4. Есть ли какая-то API для отслеживания ошибок протокола, т.е. когда в старшем байте функции возвращается 0х8Х?
5. В стандарте С допустимы такого вида сравнения if ((!GetPSBStatus(xxx))&&(var1))||(GetPSBStatus(yyy) &&(var2>10)){...} -подскажите пожалуйста правильный синтаксис задания множественного условия. Что-то в таком виде не хочет компилировать, приходится вложенными if-ами решать вопрос.
Здравствуйте.
2. Сложно прокомментировать, не видя проекта и не имея инструкций по воспроизведению проблемы.
3. Если обмен организован через макросы - то функции чтения/записи возвращают FALSE в случае ошибки обмена. Если обмен настроен в элементах - то можно в макросе контролировать регистры PSW66 (Download-порт) / PSW76 (PLC-порт) - в них записываются адреса слэйвов, при последнем сеансе обмена с которыми произошли ошибки.
4. Такое возможно, если обмен писать на низкоуровневых функциях. См. здесь:
https://www.owen.ru/uploads/aip_47_s...slov_36-37.pdf
5. У вас со скобками проблемы. Проще всего, конечно, было бы разбить такое длинное условие на несколько более простых и потом проверять результирующие биты.
Вот так - компилируется (не уверен, что правильно понял желаемые приоритеты операций в исходной записи):
Код:
BOOL var1;
int var2;
if ( ( !GetPSBStatus(300) && var1 ) || ( GetPSBStatus(400) && (var2 > 10) ) )
{
;
}