PDA

Просмотр полной версии : СП3хх - групповые запросы к ПР



Серёга Букашкин
09.08.2018, 09:47
Если индикацию в СП300 в Мастере привязать к регистрам порта, то он сам организует соседние в групповые запросы. Какое количество соседних регистров при этом он может запросить максимально? 6? или ограничения нет? А если запрашивать макросом чтения массива то ограничения точно нет? Хоть 100 регистров за раз?

petera
09.08.2018, 10:08
По п.1 наверно опечатка.
не 6, а 16 соседних регистров за раз

Серёга Букашкин
09.08.2018, 10:37
не 6, а 16 соседних регистров за раз
Связываю СП300 Мастер с ПР200 Слейв. ПР200 не отвечает на групповой запрос более 12 регистров (по опыту так). Так что всё таки 6 или 16 для меня очень важно.

petera
09.08.2018, 10:43
Связываю СП300 Мастер с ПР200 Слейв. ПР200 не отвечает на групповой запрос более 12 регистров (по опыту так). Так что всё таки 6 или 16 для меня очень важно.

16 однозначно!
По этому для ПР200 с ОЛ версии меньше 1.10 нужно очень аккуратно подходить.

Динамическая адресация для некоторых регистров в середине группы поможет

ЗЫ
Маленькая ремарка
Чтение будет осуществляться группой если адреса регистров отличаются не более чем на 5, например
- для двух дисплеев с регистрами Wrd 4х512 и 4х517 будет одна команда чтения шести регистров 512,513,514,515,516,517. А для двух дисплеев с регистрами Wrd 4х512 и 4х518 будут две отдельные команды чтения по одному регистру.
Т.е. на экране может быть всего 3 дисплея, а читаться будут 13 регистров.

Серёга Букашкин
09.08.2018, 11:42
Например у меня 20 индикаторов, привязанных к 20 регистрам подряд. Как поступит СП300? Будет запрашивать группу 20? Или по 6? или по 1? Или советуете просто макросом считать всё (или допустимыми кусками) и работать с внутренними регистрами? Мне важно чтобы количество регистров в групповом запросе не превышало 12.

petera
09.08.2018, 11:54
Например у меня 20 индикаторов, привязанных к 20 регистрам подряд. Как поступит СП300? Будет запрашивать группу 20? Или по 6? или по 1? Или советуете просто макросом считать всё (или допустимыми кусками) и работать с внутренними регистрами? Мне важно чтобы количество регистров в групповом запросе не превышало 12.

СП300 сформирует два групповых запроса
1 - первые 16 регистров
2 - оставшиеся 4 регистра

petera
09.08.2018, 12:08
Если использовать функциональную область с действием Копировать группу регистров, то нельзя просто
использовать две функции
Копировать 12 регистров
Копировать 8 регистров
38306

Т.к. панель все равно сделает два групповых запроса
1 - первые 16 регистров
2 - оставшиеся 4 регистра
Т.к. группировка регистров по запросам делается на этапе компиляции проекта

По этому используем дин.адресацию для одной группы(любой)
38307

В качестве индексного регистра берем ЛЮБОЙ PSW
Главное коэффициент сделать равным 0
38308

Теперь будет два запроса
1 - первые 12 регистров
2 - оставшиеся 8 регистра

petera
09.08.2018, 12:27
При таком подходе ( Копирование регистров ПР в промежуточные регистры PSW)
для цифровых вводов следует делать так
38309
Т.е. включить галку "Мониторинг" и для отображения использовать промежуточный регистр PSW, а вот ввод данных осуществлять сразу в регистры ПР (4x)

petera
09.08.2018, 12:44
Можно сделать проще.
Используйте ОЛ версии не ниже 1.9.114

2. Максимальное количество регистров в посылке Modbus(функции 03,04), которое может принять ПР200, увеличено до 64.
http://ftp-ow.owen.ru/softupdate/OWEN%20Logic/infoOf1_9.html

petera
09.08.2018, 13:58
Практика это не подтверждает. Работа ПР200 Слейв с версией 1.9.148 и ОРС сервером ОВЕН и групповыми запросами от него длинные группы все равно не работали.
Я за что купил, за то и продал - информацию привел из Списка основных изменений среды программирования OWEN Logic.

Сам-то я остался еще в версии 1.8.107. По этому делаю чтение всех регистров ПР в регистры PSW функциональной областью в точности так, как описал выше.
Ф.область должна быть "Глобальная", если в проекте больше одного экрана.

Серёга Букашкин
09.08.2018, 14:12
Я тоже решил так делать, с чтением понятно. Но имею проблему как записывать. Например у меня 20 кнопок, каждая формирует при нажатии "функциональная кнопка" свой код команды в один и тот же PSW регистр. Подозреваю что работать это не будет, будет всегда в регистре код от последней прочитанной кнопки. Да? Тогда как? Каждую в отдельный регистр? Но как их потом объединить по ИЛИ в один регистр, отправляемый на запись? Или лучше по нажатию каждой кнопки ставить отдельный бит, а затем макросом присваивать в PSW константу кода опросом этих бит "если 1, то константа, иначе "0"? Команд будет много (до 200), только через код реально их писать в контроллер.

petera
09.08.2018, 14:58
Я тоже решил так делать, с чтением понятно. Но имею проблему как записывать. Например у меня 20 кнопок, каждая формирует при нажатии "функциональная кнопка" свой код команды в один и тот же PSW регистр. Подозреваю что работать это не будет, будет всегда в регистре код от последней прочитанной кнопки. Да? Тогда как? Каждую в отдельный регистр? Но как их потом объединить по ИЛИ в один регистр, отправляемый на запись? Или лучше по нажатию каждой кнопки ставить отдельный бит, а затем макросом присваивать в PSW константу кода опросом этих бит "если 1, то константа, иначе "0"? Команд будет много (до 200), только через код реально их писать в контроллер.

Я же Вам уже показал на примере цифрового ввода - писать нужно сразу в регистр ПР( 4х), а не в PSW. Запись ведь панель делает по изменению значения и в Вашем случае всегда по одному регистру.

ЗЫ.
К стати вместо ф.кнопки можете использовать кнопку Операции с данными. Она проще
38312

petera
09.08.2018, 16:46
Мне нужно чтобы запись выполнялась постоянно. Беда если при отпускании кнопки посылка записи с кодом "0" не пройдет, а она однократная. Команда зависнет. Нужно свободным битом постоянно мигать чтобы сделать посылки командного регистра постоянными? Другого способа нет?

Тогда конечно нужно ф. кнопку использовать
Она может формировать команды записи в четырех случаях
и при нажатии
38316

и при отпускании
38317

petera
09.08.2018, 18:04
Да, и у меня используется режим "Зажата", код идёт все время нажатия. Поэтому через PSW. Но как будет отправляться не понимаю пока. Если нужно постоянно подтверждать код, то получается нужно подмешивать нечто мигающее например в бите 15 у этого регистра. И на запись отправлять уже всю эту смесь из PSW. Также постоянная посылка контрольного бита нужна, чтобы со стороны приемника иметь критерий "нет связи" и по нему блокировать все команды, зависание их недопустимо, может привести к аварии управляемой установки. Вероятность обрыва связи во время действия команды никто не отменял.
Это уже паранойя какая-то :rolleyes:
Зачем все время посылать? Так никто не делает.
Что, значит не записалось от первого нажатия? Из-за ошибок связи? Так по умолчанию панель трехкратный повтор записи будет делать если не записалось с первого раза. Плюс выскочит окно с сообщением о потери связи.
Если панель пишет в слейв значение, то вместо, например 123, не может самопроизвольно записаться 124. Тут либо записалось новое ПРАВИЛЬНОЕ значение в регистр слейва либо в нем останется старое, ПРЕДЫДУЩЕЕ значение.
Был в ПРке 0 в регистре команд, так 0 и останется. Увидит оператор 0 и нажмет второй раз кнопку и все дела.

Если связь пропала физически, то "режим "Зажата", код идёт все время нажатия" не спасет. Хотите оставить - оставьте только сразу в 4х пишите не в PSW.

Насколько я понял у Вас код команды д.б записан в регистр не постоянно. При отпускании кнопки должен записаться 0 в регистр ПР.
Тут проще сделать в ПР принудительный сброс значения в 0, если в течение какого-либо времени не придет от панели запись 0
Например так
38322

Сергей0308
10.08.2018, 00:27
Если команда прошла и связь пропала, то никакими настройками панели проблему не поправишь, здесь надо или ПР200 мастером делать, там есть уже готовые переменные для контроля связи, либо в ПР примерно как-то так сбрасывать:


38323

capzap
10.08.2018, 10:11
Простые способы есть и для приемника-слейва, единственное условие- всегда передавать командный регистр в добавленным битом "1". На приемнике получив эту "1" стираем ее в этой же сетевой переменной и взводим таймер задержки на небольшое время (чтобы дождался следующей посылки). При потере связи и окончании таймера имеем соответствущий сигнал, по которому блокируем исполнение любой команды. Сами команды в сетевой переменной стирать не надо. При возобновлении связи снова придет 1 и текущая команда (или ее отсутствие), а исполнение разблокируется. Поэтому и тема в том как долбить с панели запись постоянно. Похоже тут нет таких вариаций настроек как у ПР200-мастер, попробую один из битов регистра постоянно инвертировать чтобы он всегда был под изменением. Собираю регистр в PSW, и отправляю. Проверить не могу, панели вживую ещё нет. Но на ИП320 такой метод работает прекрасно.
Так это Вы решаете проблему связи у слейва, а Вам как я понял нужно у мастера знать записан или нет запрос, тут только ориентироваться на бит ошибки связи самой панели

Серёга Букашкин
10.08.2018, 10:24
Вам как я понял нужно у мастера знать записан или нет запрос
Это не нужно вовсе. Не важно записалось или нет. Контроль излишен если отправлять регистр не по изменению регистра, а постоянно.

capzap
10.08.2018, 10:39
Ну может тогда сменить вектор решения управления, я например со скад и панелей на любое действие отправляю единицу, а не гашу поднятый сигнал, все эти работы делаю в контроллере, обнуляю пришедьшую единиц и инвертирую внутреннюю переменную