Со своего опыта я вам написал.
Вид для печати
Прикрепляю скриншот того как выглядит переменная, когда я сам, через cds руками её перезаписываю.
Вложение 60256
Какой ПЛК?
СП307 - мастер на линии RS232?
ПЛК 160, панель СП307.
ПЛК - slave, СП307 - мастер, SCADA - мастер.
Проверить на железе нет возможности, поэтому пишу пример, откатываю, а потом применю приём в проекте.
Таких переменных и синхронизаций будет около 80 шт.
Поэтому нужен оптимальный метод, таймеров много использовать не смогу.
Всем спасибо за вклад, проблема всё таки с отладкой, нужно оказывается снимать флаг фиксации переменной.
Нужно ставить галку снять фиксацию перменной, по умолчанию галки нет, переменная краснеет, значит фиксируется. Я этого увы не знал.
Вложение 60257
Конфигурация примерно так выглядит?
Такая настройка дает возможность подключить к одной Modbus-таблице 2 мастера через Debug и RS232,
а так же еще 4-е мастера через Ethernet.
При этом все могут читать и писать (по принципу, кто последний тот и прав).
Вы бы хоть видео для новичков посмотрели или поиском поискали. Этот вопрос задают через день.
Все переменные в конфигурации, в ПЛК - слейве будут глобальные и энергонезависимые. После заливки программы в контроллер задайте начальные значения хоть руками. Можно и начальную инициализацию сделать.
Решил не создавать новую тему, а продолжить здесь же, но с циклом While в ST.
Хочу создать цикл, в котором переберутся все биты байта bCount. На эти биты физически повешены 8 реле, а на реле - 8 параллельных насосов с разной производительностью.
До того, как оператор запустит программу, мне нужно по-быстрому программно пробежаться по всем возможным вариантам включения и прикинуть: а получиться ли задать нужную производительность комбинацией насосов?
Код:
Цикл не отрабатывается. Происходит только один проход. Потом выход из функции.Код:FUNCTION myFunc: BOOL
VAR
bCount: BYTE := 0;
END_VAR
WHILE NOT bCount=255 DO
bCount := bCount + 1;
// IF bCount.0 THEN ......; END_IF
// IF bCount.1 THEN ......; END_IF
// IF bCount.2 THEN ......; END_IF
// IF bCount.3 THEN ......; END_IF
// IF bCount.4 THEN ......; END_IF
// IF bCount.5 THEN ......; END_IF
// IF bCount.6 THEN ......; END_IF
// IF bCount.7 THEN ......; END_IF
END_WHILE
Что я сделал не так?