Просмотр полной версии : панель ОВЕН СП307-б/р регистр PSB51 отказ обмена
cudryavtsevaanna
16.09.2025, 12:55
Добрый день!
Хотелось бы поинтересоваться, реализую проект на панели ОВЕН СП307-б/р.
Появился вопрос по поводу регистра PSB51.
При отказе обмена с агрегатом некоторое время (30 сек и более) регистр PSB51 снимается и формируется снова. Это видно по журналу сообщений.
И так, при контроле значений этого дискретного сигнала и фактическом отсутствии обмена со стороны агрегата значение этого бита меняется туда-сюда.
Я написала скрипт, но увы не помогло:
BOOL Value3;
Read(HMI_LOCAL_MCH, 0, TYPE_PSB, 51, 0, TYPE_WORD, &Value3);
if (Value3==TRUE)
{
SetPSB(51);
}
else
{
ResetPSB(51);
}
Write(HMI_LOCAL_MCH, 0, TYPE_PSB, 51, 0, TYPE_WORD, Value3);
А что это макрос должен делать?
cudryavtsevaanna
16.09.2025, 13:28
должен уведомлять о том, есть ли обмен между панелью и агрегатом или нет.
Он уведомляет при добавлении в таблицу событий реального времени, но при этом в время отсутствия обмена отправляет повторные запросы, в следствии чего "прыгает" с "отказа обмена" на "есть обмен".
Буквально на долю секунды, но за этим можно проследить через историческую таблицу.
cudryavtsevaanna
16.09.2025, 13:30
А в этом макросе мы записываем и читаем значение регистра PSB51 при TRUE или FALSE значения Value3
Чтобы это определить панель должна отправить запрос, подождать ответ, и если его нет, тогда выставить PSB51. Но ведь в сети может быть несколько опрашиваемых, как тогда быть?
cudryavtsevaanna
16.09.2025, 13:36
У меня только один опрашиваемый агрегат, как быть если их несколько, я не знаю.
kondor3000
16.09.2025, 13:36
должен уведомлять о том, есть ли обмен между панелью и агрегатом или нет.
Он уведомляет при добавлении в таблицу событий реального времени, но при этом в время отсутствия обмена отправляет повторные запросы, в следствии чего "прыгает" с "отказа обмена" на "есть обмен".
Буквально на долю секунды, но за этим можно проследить через историческую таблицу.
Ваш макрос не уведомляет, а записывает в системный бит, куда записывать ничего нельзя.
PSB51 Ошибка связи для порта PLC только для чтения
Вероятно, Вы хотели ловить потерю связи другим способом:
boolean Result;
Result = Read(PLС, 0, TYPE_PSB, 51, 0, TYPE_WORD, &Value3); // Читать регистр агрегата
if(Result){
ResetPSB(300); // Есть связь
}else{
SetPSB(300); // Нет связи
}
Чтобы не дрыгалось
1. Делаем макрос
if (GetPSBStatus(51)) //если ошибка связи порт PLC
{
SetPSB(301); //записать в таблицу событие "Нет связи"
PSW[70]=0; //сбросить число принятых пакетов для порта PLC
}
if (GetPSBStatus(301)) //если ранее бала потеря связи
{
if (PSW[70] > 0) //то проверим начался ли обмен (число принятых пакетов будет больше 0)
{
ResetPSB(301); //записать событие "Связь ОК"
}
}
А в этом случае появление системного окна потери связи остаётся?
ЗЫ
Основано на анализе качества связи
для порта PLC
PSW70 - число удачных запросов (без ошибок)
PSW71 - число неудачных запросов
Штатный PSB51 - ошибка связи порт PLC
Для записи события потери связи использую бит PSB301
85778
ф.область непрерывно вызывает макрос
85779
В таблице по фронту PSB301 записывается "Нет связи", а по спаду PSB301 - "Связь ОК"
85780
А в этом случае появление системного окна потери связи остаётся?
Если оно у Вас в шаблоне проекта есть, то конечно остается
зы
85783
85784
cudryavtsevaanna
17.09.2025, 06:58
Спасибо! Всё получилось!
Powered by vBulletin® Version 4.2.3 Copyright © 2026 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot