Просмотр полной версии : Контроль связи СП307 Slave и ПР20х Master
Добрый день!
Вход 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 сек, таймер срабатывает, взводит другой бит и открывает окно "Нет связи с ПЛК". При возобновлении обмена, бит сбрасывается и окно закрывается.
Добрый день!
Нужно добавить пересылку Life-Counter от мастера. На панели в макросе проверять этот счётчик, если нет изменений, то значит связь пропала.
Чтобы постоянно контролировать связь, скорее всего надо отправлять с ПР20х секундные импульсы или более редкие. Но как организовать на панели СП307 макрос счетчика, (на сколько импульсов он рассчитан и его автосброс при переполнении) и контролировать наличие его изменения, в этом я не силён. Если не трудно, напишите содержание макроса и его описание.
Глобальная ФО каждые 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, ¤t_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 рабочих совета, вообще без макросов, которые даже в эмуляции можно проверить.
Спасибо! Идея понятна. Все получилось.
Глобальная ФО каждые 5 сек копирует PSB256 в PSB257, потом выставляет PSB256 = 1.
Если каждые 4 сек сбрасывать PSB256, то PSB257 всегда будет в 0-е.
Иначе 1 в PSB257 откроет окно 1.
Спасибо! Идея понятна. Все получилось.
Powered by vBulletin® Version 4.2.3 Copyright © 2026 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot