Начал изучать Вашу систему "Каскад САУ". Использую бесплатную версию. Не разобрался с подключением к системе ОРС серверов. В документации ничего не нашел по этой теме. Можете ли на примере (к примеру на демоверсии Fastwel.UniOpc) подробно показать механизм настройки? Также не смог отобразить на мнемосхеме текущую дату и время.
Подключение к OPC серверу (равно как и любому другому устройству) делается на вкладке Привязка к оборудованию в окне свойств точки. Чтобы ввод данных заработал, точка должна быть входной.
Подробнее:
Пусть в UNI OPC создано устройство Device1, для него добавлены теги по умолчанию. Необходимо ввести значение тега analog_1 из группы unit1 в точку Каскад-САУ.
Запустите программу "Настройка параметров точек". Создайте новую точку или возмите существующую. Откройте окно свойств точки. На вкладке Общие выбирете тип сигнала Входная, тип данных FLOAT. Переключитесь на закладку Привязка к оборудованию. В таблице Адрес устройства щелкните мышкой в левой колонке на первой строке, в выпадающем списке выберите OPC сервер. В этой же строке в правой колонке введите имя сервера Fastwel.UniOpc. В следующей строке таблицы в правой колонке введите полное имя тега сервера Device.unit1.analog_1 (полное имя тега определяем с помощью Faswel OPC Client). Нажмите ОК, затем меню Точки, Применить конфигурацию точек.
Как только контроллер обновит конфигурацию точек (в течение минуты после применения), в точку начнут поступать данные с сервера. Если имя сервера или тега указаны неправильно, то значение точки будет недостоверным, на мнемосхеме оно будет отображаться белым цветом.
Мнемосхемы АРМ отображают только те данные, которые получены с контроллера. Соответственно и время показывать он может только то, которое получено с контроллера.
Поскольку мнемосхемы могут отображать только значения точек, то и время с контроллера надо передать с помощью значения точки. Записать текущее время в значение точки в Каскад-САУ версии 3.2 можно только с помощью библиотечных блоков алгоритмов.
Создайте точку типа FLOAT, откройте редактор алгоритмов, положите на поле библиотечный блок DT_Get (Получение текущего времени контроллера, группа блоков Дата и время) и свяжите его выход с точкой, по аналогии с тем, как это описано в документе Быстрый старт. Для отображении значения этой точки на мнемосхеме в виде даты и времени воспользуйтесь специальным элементом Дата и время вместо элемента Значение точки.
К слову,недавно были проведены crash-тесты КАСКАД-САУ и архивного сервера при работе с 10 точками через OPC с частотой обновления 1 мс (по настройкам OPC сервера,). НА мащине с Dual-Core 1,83 процессор остался свободен на 97 % )))))). дисковая активность также минимальна)))
Принцип работы контроллера Каскад-САУ - циклический. Размер цикла по умолчанию - 500 мс. Соответственно задача ввода данных с OPC-сервера выкладывает данные в память контроллера только один раз в 500 мс., даже если сервер присылает ей значения каждую 1 мс. Таким образом у Вас в архив записываются всего 20 точек в секунду. Это очень маленькая цифра. К тому же перед записью в архив данные еще раз буфферизируются в оперативном архиве, реально в архив запись идет раз в 10 минут. Отсюда и маленькая загрузка процессора и диска.
По нашим тестам производительность архива Каскад-САУ на машине P4 1.8, 512 Мбайт, Windows 2000 SP3 - до 3000 изменений точек в секунду.
Меня ввело в заблуждение наличее такого параметра в документации "точность временных отметок изменений сигналов." Ктому же както я не привязал цикл контроллера к минимальному времени опроса точек.
А что мешает цикл зделать менее 50 мс? Пока времени тестировать нет,но при 10 запускается. при 1 мс--ошибки(что-то там с временем ожидания)
Чтобы засечь в архиве время изменения сигнала при такте менее секунды временная отметка должна также учитывать доли секунды. В каскад-САУ время изменения включает и миллисекунды. Это и есть "точность временных отметок".
Цикл ввода даных с устройства, как правило, не зависит от цикла контроллера и может выполняться гораздо чаще. Опрошенное значение сохраняется во внутреннем буфере задачи ввода. Последнее полученное (в некоторых случаях усредненное, например для VME устройств) и выкладывается в память контроллера только по сигналу ядра раз в цикл. Это значение затем идет в расчет алгоритмов, отправляется на АРМ и в архив.
В Каскад-САУ версии 4.0 будет предусмотрен ввод данных с устройством с предысторией, т.е. все, что опрошено чаще цикла контроллера, можно будет записать в архив. Однако в расчете алгоритмов по прежнему будет участвовать только последнее значение за цикл контроллера.
В принципе ничего не мешает. Однако Windows не является системой реального времени, и гарантировать соблюдение установленного цикла невозможно. В контроллерах под QNX это работать будет.
есть возможность получить на тесты контроллер под QNX?
можно ли к QNX контроллеру подключать свои исполняемые модули с поступом в разделяемую область памяти контроллера? (там где текущие значения точек хранятся?)
Просто есть идея интересная))) (некий расчетный алгоритм принимающий мгновенные значения точек, минимум 20 точек на 50Гц период. 6 точек). было-бы неплохо его в контроллер внедрить , если он конечно такую полосу пропускания обеспечит (с запасом)
бесплатная версия
использую mobus rtu slave
При обращении по 3,4,6 функциям modbus контроллер КАСКАД отвечает с нулевым значениеми
пробовал использовать вкладку "Внешние связи" но непонятно какие настройки под какую функцию modbus?
Пожалуйста опишите пошагово как настроить на 6 функцию modbus?
Для передачи точки во внешнюю систему тип ввода-вывода точки роли не играет. Соответственно и писать внешняя система может в любую точку. При этом логические проблемы должны быть учтены при разработке проекта. Например, если внешняя система подаст команду на запись во входную точку, то эта команда пройдет. Однако на следующем такте драйвер ввода перезапишет значение этой точки значением, считанным с устройством, что будет выглядеть как будто команда не проходила. Аналогично и с точками, в которые пишут алгоритмы.
Чтобы сделать точку доступной на запись по протоколу Modbus RTU надо в окне свойств точки на вкладке "Внешние связи" в группе "Передача данных..." поставить протокол передачи "Modbus RTRU", класс данных "Регистр управления импульсом/уровнем", в поле адреса ввести номер регистра. Нумерация регистров начинается с 1.
попробовал результат тотже.
опыт работы с modbus и scada имеется. Нигде не нашел в доках соответсвие классов данных modbus rtu КАСКАД и оригинальных функций modbus rtu. Если что то пропустил ткните пожалуйста.
А лучше конечено живой примерчик по установке\считыванию значений master'oм в slave КАСКАД.
Я думаю у Вас это попросят еще не раз.
Все точки Каскад-САУ проецируются на Holding регистры сервера, номера регистров настраиваются на вкладке внешних связей. Соответственно опрос этих регистров должен производиться 3 функцией. Привязка точек к остальным типам регистров (Coil, Input Status) в текущей версии Каскад-САУ не поддерживаются, сервер всегда отвечает или исключением или 0 в зависимости от значения параметра RegMode в файле servdata.mb.ini.
Можно в один регистр побитно упаковать значения несколько дискретных точек. Для этого в поле "Адрес ввода-вывода" надо указать номер бита через двоеточие после номера регистра, например 201:1 (нумерация битов начинается с 1). Однако, для внешней системы это по прежнему будет Holding регистр.
Дополнительно Modbus сервер Каскад-САУ поддерживает работу со сдвоенными регистрами для передачи 4 байтовых INT и FLOAT значений. Т.е. сервер может передавать FLOAT значение точки в двух подряд идущих регистрах.
Для записи значений регистров сделует следует использовать 6 функцию, т.е. запись Holding регистров. Также как при чтении можно использовать номер бита при адресации точки. Тогда при получении команды сервер запишет 0 или 1 во все точки, привязанные к регистру в соответствии с указанными для них номерами битов.
Соответствие классов данных и регистров Modbus:
Регистр данных - выходной Holding регистр, номер регистра задается в поле "Адрес ввода-вывода", нумерация с 1. Чтение функцией 3.
Регистр данных float/big-endian - два подряд Holding регистра, в которые разложено 4 байтовое Float значение точки. big-endian порядок следования старшего и младшего слова. Номер первого регистра задается в поле адреса ввода-вывода. Пересечение регистров с регистрами других точек запрещено.
Регистр данных float/low-endian - аналогично предыдущему, но в порядке low-endian.
Регистр управления импульсом - входной Holding, запись функцией 6. Записанное в точку значение автоматически сбросится в значение по умолчанию по истечении времени импульса (4 такта контроллера).
Регистр управления импульсом float/big-endian - два подряд Holding регистра, предназначенные для записи Float значения. Запись функцией 6 в два регистра подряд. По истечении времени импульса значение точки автоматически сбрасывается в знаение по умолчанию.
Регистр управления импульсом low/big-endian - аналогично предыдущему, но для low-endiag порядке слов Float значений.
Регистр управления уровнем - входной Holding регистр, запись функцией 6. После записи значение точки остается неизменным.
Регистр управления уровнем float/big-endian - предназначен для записи Float значений в режиме уровнем.
Регистр управления уровнем low/big-endian - аналогично предыдущему, но для low-endiag порядке слов Float значений.
По поводу живого примера. Возможно, Вы посоветуйте бесплатный Modbus RTU клиент (master) стороннего производителя, чтобы мы смогли для него написать пример. Мы конечно можем написать пример для своего клиента, но это будет не восем то, что нужно.
Могу посоветовать бесплатный http://www.agrostroy.ru/root/tex_podderzhka/prog/ModbusTester-Installer.rar
Опишу последовательность действий:
1. беру созданный и работающий проект "Быстрый старт" добавляю в "Настройке параметров точек" переменную comtest - тип точки: "входная" "integer".
2. на вкладке "Привязка к оборудованию": "Тип устройства"-"COM порт", "Номер"-"2"(стоит PCI плата расшир COM портов).
3. на вкладке "Внешние связи": "Протокол передачи"-"Modbus RTU (Slave)","Класс данных"-"Регистр управления импульсом", "Адрес ввода/вывода"-"1".
4. на вкладке "Сигнал": "Уровень передачи сигнала"-"Внешние системы".
5. в файле ServData.mb.ini - InfoLevel=2, DeviceNo=1, DeviceType=0, ScaleMode=2, RegMode=1, SerialPort=2,
BaudRate=115200, ByteSize=8, Parity=0 StopBits=0.
6. в "Редакторе мнемосхем" добавляем ГЭ "Значение точки" - на нем кликаем 2 два и связываем с динамической точкой comtest.
7. запускаем "Контроллер Каскад-САУ","Каскад-САУ" видим мнемосхему "Быстрый старт"
8. запускаем Modbus Tester забиваем строку "01 06 00 01 00 10 crc crc" посылаем видим ответ от "Каскад" повторяющий запрос, т.е. по правилам протокола все ok-значение должно установиться. При этом видим на мнемосхеме значение не меняется т.е.=0.
Мы закончили проверку Вашего примера. Вы все сделали правильно за исключением одной детали - адреса регистра, указанного в запросе в п.8.
Дело в том (возможно, это непонятно написано в сообщении #13), что в Modbus запросе надо указывать адрес регистра с 0, в то время как при настройке следует указывать номер регистра, начиная с 1. То есть, например, если у точки указан адрес ввода-вывода 100, то в Modbus запросе для нее следует указывать адрес регистра 99.
Чтобы Ваш пример в сообщении #14 заработал, необходимо в п.8 посылать строку "01 06 00 00 00 10 88 06", т.е. записывать в регистр с адресом 0.
Еще момент по Вашему примеру. Пункт 2 делать не обязательно. Контроллер Каскад-САУ будет передавать точку во внешнюю систему независимо от того, к какому оборудованию она привязана. Например, можно на вкладке "Привязка к оборудованию" привязать точку к тегу OPC сервера, а на вкладке "Внешние системы" указать ее передачу по протоколу Modbus. В этом случае контроллер будет обеспечивать шлюзование значения этой точки из OPC сервера во внешнюю систему. Аналогично можно передавать точки вообще не привязанные ни к какому оборудованию, например, результаты промежуточных вычислений.
И в платной и в бесплатной версии Каскад-САУ 3.2 Modbus сервер работает в составе контроллера и он действительно может быт только в единственном экземпляре. В версии 4.0 это ограничение будет снято. А вот АРМ Оператора может быть до 16 штук. Например, Архив - тоже разновидность АРМ, у которого вместо задач отображения и управления работают задачи архивирования.
Уточните пожалуйста, с какого контроллера, куда передаются, какой КАСКАД (Есть SCADA система с аналогичным названием КАСКАД большими буквами, наша называется Каскад-САУ), что значит "не видит"?
Я все про modbus rtu. Уточню:
В примере в сообщении #14 в п.8 добавил кроме строки "01 06 00 00 00 10 88 06" еще вторую "01 06 00 00 00 00 crc crc". т.е. через раз значение должно = 0, но оно постоянно = 0x10.
Действительно, в текущей реализации для регистров управления импульсом сервер Modbus игнорирует значение 0, а также не сбрасывает значение точки в значение по умолчанию по окончании импульса, как это описано в сообщении #13. Дело в том, что в полной версии Каскад-САУ сервер работает в связке с дополнительной специально настроенной программой, которая и обеспечивает обработку импульсных команд управления. К сожалению, мы упустили из виду, что в бесплатной версии указанная связка не используется, в результате чего и наблюдается указанное Вами необычное поведение сервера.
Мы исправим данное упущение в следующем обновлении контроллера Каскад-САУ, добавив в сервер Modbus самостоятельную обработку команд управления импульсом. В текущей же версии можем порекомендовать использовать регистры управления уровнем, а импульсные команды реализовать самостоятельно, записывая в регистр попеременно значения 1 и 0.
TechIO.gb - задача ввода-вывода блоков PLC. Эта задача включена в бесплатную версию Каскад-САУ. TechIO.gb.ini - файл с настройками для этой задачи.
Все задачи, которые входят в бесплатную версию Каскад-САУ, устанавливаются программой установки. Остальные задачи полной версии, не входящие в состав бесплатной, просто не включены в дистрибутив. Для полной и бесплатной версий Каскад-САУ свои дистрибутивы со своим набором задач.
Ограничения бесплатной версии по поддерживаемому оборудованию Вы можете посмотреть в файле License.rtf в каталоге установке Каскад-САУ на Вашем компьютере.
подключился к OPC серверу Modbus на менмосхеме в окне значение переменной появился текст INF.
в настройках точки тип FLOAT, в настройках OPC сервера FLOAT4.
Где копать в OPC или Вы подскажите в чем дело?
INF ("Бесконечность") - одно из допустимых значений значений числа с плавающей точкой. Возникает, например, при делении на 0. Применительно к OPC-серверу Modbus значение INF, равно как и NAN, может возникнуть при некорректном преобразовании сервером сдвоенных регистров во FLOAT4 значение, например, при несоответствии порядка следования (big/low-endian).
Похоже, что такое значение имеет тег OPC сервера и считывается из него в Каскад-САУ. Попробуйте посмотреть значение этого тега другим сторонним OPC-клиентом, например, тем же Faswel OPC Client.
Добрый день. еще созрели вопросы
1. как влият на работу контроллера режимы "жеский", "мягкий", "только тактирование" в настройках "Контрольное время" контроллера Win32 в "Настройка параметров проекта".
2. там же Какое минимальное "Допустимое время ожидания" и какие задачи требуються для работы системы по протоколу modbus.
3. и тоже относительно "времени рабочего чикла" во вкладке "Контроллер" в свойствах установки "Настройка параметров проекта".
В контроллере Каскад-САУ используется циклический способ обработки данных. За один рабочий цикл (такт) последовательно выполняются задачи, список которых определен в списке задач контроллера. Типовой цикл контроллера выглядит следующим образом:
Задачи ввода выкладывают значения, считанные с устройств, в память контроллера в входные точки.
Значения точек в памяти контроллера обрабатываются задачей расчета алгоритмов.
Задачи вывода выводят значения выходных точек на исполнительные устройства.
Анализируются изменения значений точек относительно предыдущего такта.
Новые значения передаются серверами в вышестоящие системы (на АРМ, в архив, по запросу Modbus).
По окончании работы всех задач делается пауза, чтобы выдержать время рабочего цикла.
Все задачи рабочего цикла работают последовательно по сигналу администратора контроллера. По завершении работы на очередном такте задача выставляет флаг готовности. Администратор, получив флаг готовности задачи, переходит к следующей. Сколько времени администратор будет ждать флаг готовности задачу прежде чем перейти к следующей определяется режимом тактирования задачи:
Задачи "жесткого режима" ожидаются столько времени, сколько необходимо задаче. В этом режиме работают ответственные задачи (первые 4 пункта в предыдущем списке). Считается, что продолжать цикл, не дождавшись готовности задачи, не имеет смысла. Задержка в работе задачи приводит к задержке цикла. Если задача не уложилась в отведенное время, администратор выводит во внутренний журнал сообщение и продолжает ожидание.
Задачи "мягкого режима" ожидаются не более указанного времени. Если задача не уложилась в отведенное время, администратор выводит во внутренний журнал сообщение и переходит к следующей задаче.
Задачи в режиме "только тактирования" лишь уведомляются об очередном цикле и не ожидаются администратором. Как правило, это сервера передачи данных во внешние системы, которые работаю по внешнему запросу и вообще не связаны с циклом контроллера. Задержка в работе этих задач, например, задержки передачи данных по сети, не должны влиять на работу цикла.
В состав бесплатной версии не входит задача ввода данных с устройств, поддерживающих протокол Modbus. Для передачи же данных с контроллера Каскад-САУ во внешние системы по протоколу Modbus, в рабочий цикл должна быть включена задача ServData.mb.exe.
Сервер Modbus ServData.mb.exe работает по запросу от мастера и не привязан к циклу контроллера. Время, которое тратит сервер на каждом такте - это время, необходимое ему для приведения значений регистров в соответствие текущим значениям точек. Поэтому в режиме мягкого тактирования можно поставить время ожидания ~100 мс или включить режим "только тактирование".
PS. В Каскад-САУ версии 4.0 настройка списка задач рабочего цикла будет выполнятся автоматически в соответствии с оборудованием, указанным в конфигурации контроллера.
спасибо за развернутый ответ.
Просто у меня минимальное время изменения входной точки (Modbus или OPC) минимум 80 мс.
Пытался выставлять Рабочий цикл от 30 мс и выше, потом режимы Жесткий и т.д. но все теже 80-100мс
1. Какой минимальный цикл потянет Контроллер win32 вместе с АРМ и архивом, если приоритет на максимально-достоверноые (по времени) значения в архиве?