PDA

Просмотр полной версии : панель ОВЕН СП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);

EFrol
16.09.2025, 13:24
А что это макрос должен делать?

cudryavtsevaanna
16.09.2025, 13:28
должен уведомлять о том, есть ли обмен между панелью и агрегатом или нет.
Он уведомляет при добавлении в таблицу событий реального времени, но при этом в время отсутствия обмена отправляет повторные запросы, в следствии чего "прыгает" с "отказа обмена" на "есть обмен".
Буквально на долю секунды, но за этим можно проследить через историческую таблицу.

cudryavtsevaanna
16.09.2025, 13:30
А в этом макросе мы записываем и читаем значение регистра PSB51 при TRUE или FALSE значения Value3

EFrol
16.09.2025, 13:34
Чтобы это определить панель должна отправить запрос, подождать ответ, и если его нет, тогда выставить PSB51. Но ведь в сети может быть несколько опрашиваемых, как тогда быть?

cudryavtsevaanna
16.09.2025, 13:36
У меня только один опрашиваемый агрегат, как быть если их несколько, я не знаю.

kondor3000
16.09.2025, 13:36
должен уведомлять о том, есть ли обмен между панелью и агрегатом или нет.
Он уведомляет при добавлении в таблицу событий реального времени, но при этом в время отсутствия обмена отправляет повторные запросы, в следствии чего "прыгает" с "отказа обмена" на "есть обмен".
Буквально на долю секунды, но за этим можно проследить через историческую таблицу.

Ваш макрос не уведомляет, а записывает в системный бит, куда записывать ничего нельзя.
PSB51 Ошибка связи для порта PLC только для чтения

EFrol
16.09.2025, 13:43
Вероятно, Вы хотели ловить потерю связи другим способом:


boolean Result;
Result = Read(PLС, 0, TYPE_PSB, 51, 0, TYPE_WORD, &Value3); // Читать регистр агрегата
if(Result){
ResetPSB(300); // Есть связь
}else{
SetPSB(300); // Нет связи
}

petera
16.09.2025, 14:35
Чтобы не дрыгалось
1. Делаем макрос

if (GetPSBStatus(51)) //если ошибка связи порт PLC
{
SetPSB(301); //записать в таблицу событие "Нет связи"
PSW[70]=0; //сбросить число принятых пакетов для порта PLC
}

if (GetPSBStatus(301)) //если ранее бала потеря связи
{
if (PSW[70] > 0) //то проверим начался ли обмен (число принятых пакетов будет больше 0)
{
ResetPSB(301); //записать событие "Связь ОК"
}
}

EFrol
16.09.2025, 14:39
А в этом случае появление системного окна потери связи остаётся?

petera
16.09.2025, 14:52
ЗЫ
Основано на анализе качества связи
для порта PLC
PSW70 - число удачных запросов (без ошибок)
PSW71 - число неудачных запросов

Штатный PSB51 - ошибка связи порт PLC
Для записи события потери связи использую бит PSB301
85778

ф.область непрерывно вызывает макрос
85779

В таблице по фронту PSB301 записывается "Нет связи", а по спаду PSB301 - "Связь ОК"
85780


А в этом случае появление системного окна потери связи остаётся?
Если оно у Вас в шаблоне проекта есть, то конечно остается

зы
85783

85784

cudryavtsevaanna
17.09.2025, 06:58
Спасибо! Всё получилось!