PDA

Просмотр полной версии : Контроль связи СП307 Slave и ПР20х Master



Pavel R
24.03.2026, 17:19
Добрый день!
Вход PLC панели СП-307 работает в режиме Slave и получает информацию от ПР20х. Есть острая необходимость определения наличия связи на СП307 с ПР20х, работающем в режиме Master по Modbus TCP. Как можно это реализовать? Подскажите пожалуйста. При отсутствии связи между СП307 и ПР20х, на СП307 отображается устаревшая информация и создается впечатление, что устройство под управлением ПР20х работает штатно, хотя на самом деле оно возможно не работает. В случае работы СП307 в режиме мастер это реализуется легко с помощью PSB51 и PSW76, а в режиме Slave, пока не получается осуществить контроль связи и нет возможности задействовать СП307 в режиме Master.

Party3AH
24.03.2026, 17:26
Добрый день!
Вход PLC панели СП-307 работает в режиме Slave и получает информацию от ПР20х. Есть острая необходимость определения наличия связи на СП307 с ПР20х, работающем в режиме Master по Modbus TCP. Как можно это реализовать? Подскажите пожалуйста. При отсутствии связи между СП307 и ПР20х, на СП307 отображается устаревшая информация и создается впечатление, что устройство под управлением ПР20х работает штатно, хотя на самом деле оно возможно не работает. В случае работы СП307 в режиме мастер это реализуется легко с помощью PSB51 и PSW76, а в режиме Slave, пока не получается осуществить контроль связи и нет возможности задействовать СП307 в режиме Master.

Добрый день!
Нужно добавить пересылку Life-Counter от мастера. На панели в макросе проверять этот счётчик, если нет изменений, то значит связь пропала.

kondor3000
24.03.2026, 17:42
Добрый день!
Вход PLC панели СП-307 работает в режиме Slave и получает информацию от ПР20х. Есть острая необходимость определения наличия связи на СП307 с ПР20х, работающем в режиме Master по Modbus TCP. Как можно это реализовать? Подскажите пожалуйста. При отсутствии связи между СП307 и ПР20х, на СП307 отображается устаревшая информация и создается впечатление, что устройство под управлением ПР20х работает штатно, хотя на самом деле оно возможно не работает. В случае работы СП307 в режиме мастер это реализуется легко с помощью PSB51 и PSW76, а в режиме Slave, пока не получается осуществить контроль связи и нет возможности задействовать СП307 в режиме Master.

Всё тоже самое делается в панели слейв, выделяестя любой сободный бит связи, в панели бит взводится каждую секунду (от PSB4), и запускает таймер в ФО (функц. области) цикл на 3-5 сек, ПЛК мастер должен бит сбрасывать, если бит не сброшен в течении 3-5 сек, таймер срабатывает, взводит другой бит и открывает окно "Нет связи с ПЛК". При возобновлении обмена, бит сбрасывается и окно закрывается.

Pavel R
24.03.2026, 17:59
Добрый день!
Нужно добавить пересылку Life-Counter от мастера. На панели в макросе проверять этот счётчик, если нет изменений, то значит связь пропала.

Чтобы постоянно контролировать связь, скорее всего надо отправлять с ПР20х секундные импульсы или более редкие. Но как организовать на панели СП307 макрос счетчика, (на сколько импульсов он рассчитан и его автосброс при переполнении) и контролировать наличие его изменения, в этом я не силён. Если не трудно, напишите содержание макроса и его описание.

EFrol
25.03.2026, 08:06
Глобальная ФО каждые 5 сек копирует PSB256 в PSB257, потом выставляет PSB256 = 1.
Если каждые 4 сек сбрасывать PSB256, то PSB257 всегда будет в 0-е.
Иначе 1 в PSB257 откроет окно 1.

Party3AH
25.03.2026, 09:38
Чтобы постоянно контролировать связь, скорее всего надо отправлять с ПР20х секундные импульсы или более редкие. Но как организовать на панели СП307 макрос счетчика, (на сколько импульсов он рассчитан и его автосброс при переполнении) и контролировать наличие его изменения, в этом я не силён. Если не трудно, напишите содержание макроса и его описание.

Вот что нейросеть гугла предлагает:

Логика работы
Мастер (ПЛК) постоянно увеличивает значение переменной (например, от 0 до 100).
Панель (Слейв) считывает это значение макросом.
Если текущее значение равно предыдущему — запускается таймер.
Если значение изменилось — таймер сбрасывается.
При превышении уставки (например, 5 секунд) — выводится авария.
Пример макроса (Си)
Создайте глобальный макрос (выполняется, например, раз в 500 мс):


static WORD last_value = 0; // Предыдущее значение
WORD current_value = 0; // Текущее значение
WORD timer = 0; // Текущее время простоя
WORD timeout = 10; // Порог (10 циклов по 500мс = 5 сек)
BOOL status = 0; // 0 - связь есть, 1 - обрыв

// 1. Читаем счетчик из ПЛК (адрес 100 по Modbus)
Read(PLC, 100, TYPE_PSW, 1, &current_value);

// 2. Сравниваем с прошлым замером
if (current_value == last_value) {
Read(LOCAL, 500, TYPE_PSW, 1, &timer); // Читаем накопительный таймер из PSW500
timer++;
if (timer > timeout) {
status = 1; // Устанавливаем бит ошибки
}
Write(LOCAL, 500, TYPE_PSW, 1, &timer);
} else {
timer = 0;
status = 0;
last_value = current_value; // Обновляем значение
Write(LOCAL, 500, TYPE_PSW, 1, &timer);
}

// 3. Записываем бит статуса в PSB100 (для индикатора на экране)
Write(LOCAL, 100, TYPE_PSB, 1, &status);

Используйте код с осторожностью. :cool:

п.с. давненько не работал с панелями, СП3хх конфигуратора нет под рукой, но делал что-то подобное ранее.

kondor3000
25.03.2026, 10:14
Вот что нейросеть гугла предлагает:
п.с. давненько не работал с панелями, СП3хх конфигуратора нет под рукой, но делал что-то подобное ранее.

После таких советов, применительно к СП3хх, панель у чела зависнет и придётся ему прыгать с бубном, принудительно перезаливая проект.
Хотя выше 2 рабочих совета, вообще без макросов, которые даже в эмуляции можно проверить.

Pavel R
25.03.2026, 14:26
Спасибо! Идея понятна. Все получилось.

Pavel R
25.03.2026, 14:34
Глобальная ФО каждые 5 сек копирует PSB256 в PSB257, потом выставляет PSB256 = 1.
Если каждые 4 сек сбрасывать PSB256, то PSB257 всегда будет в 0-е.
Иначе 1 в PSB257 откроет окно 1.

Спасибо! Идея понятна. Все получилось.