Данный раздел предназначен для опытных пользователей «КАСКАД Цифра». В нем подробно описаны функциональные коды, записи в файле config и возможности отладки.
Функциональные коды
В следующей таблице приведены возможные функциональные коды с кратким описанием. Если «КАСКАД Цифра» работает как ведомое устройство, его функциональные коды будут зависеть от используемого ПЛК.
Функциональный код | Код | Описание |
чтение регистров флагов | 1 | Чтение состояния ON/OFF (ВКЛ/ВЫКЛ) дискретного вывода. |
чтение входных дискретных значений | 2 | Чтение состояния ON/OFF (ВКЛ/ВЫКЛ) дискретного ввода. |
чтение ряда регистров | 3 | Чтение двоичного содержимого регистра хранения |
чтение входных регистров | 4 | Чтение двоичного содержимого регистра ввода. |
запись регистра флага | 5 | Ввод значения отдельного регистра флага: ON или OFF (ВКЛ или ВЫКЛ) |
запись одиночного регистра | 6 | Запись значения в регистр хранения |
чтение состояния исключения | 7 | Чтение содержимого восьми регистров флагов состояния исключения |
принудительная запись ряда регистров флагов | 15 | Присвоение каждому регистру флага из ряда значения ON (ВКЛ) или OFF (ВЫКЛ). |
запись ряда регистров | 16 | Запись значений ряда регистров хранения. |
чтение очереди FIFO | 24 | Чтение содержимого регистров очереди FIFO |
Записи в файле config
Запись | Тип | По умолчанию | Диапазон | Описание |
aliveTimeout | unsigned | 0 | >= 0 | Определяет время ожидания, в секундах, проверки присутствия в сети для драйвера. При значении 0 сообщения не отправляются. При значении > 0, драйвер отправляет запрос всем подключенным ПЛК через каждые «aliveTimeout» секунд. Если подключение в порядке, в целях проверки отправляется «пустой» запрос. |
«aliveTimeoutMsg» | беззнаковое беззнаковое | 1 0 | — | Определяет функциональный код и адрес для запроса проверки присутствия в сети. |
«addUnicosMarker» | unsigned | -1 | -1..65535 | Определяет адрес, используемый драйвером для определения типа кадра: Modbus или UNICOS. По умолчанию запись отключена. |
«idleCloseTimeout» | unsigned | 0 | >= 0 | Драйвер закрывает подключение к ПЛК если подключение находится в состоянии простоя в течение указанного периода времени (в секундах). Используется только для подключений в режиме ведущего устройства. |
«littleEndianRegister» | bool | 1 | 0|1 | Порядок организации 16-битного регистра: сначала младший байт или сначала старший байт.По умолчаю используется прямой порядок, т.е. сначала передается младший бит.ПримечаниеСначала младший байт = наименее значимый бит сохраняется в первой позицииСначала старший байт = наиболее значимый бит сохраняется в первой позицииДополнительную информацию см. в Wikipedia |
«maxConnRetryNumber» | unsigned | 0 | >= 0 | Определяет количество попыток, которые предпринимает драйвер для установления подключения при отправке телеграммы, если запрос на подключение завершился неудачно. |
«maxGap» | uint | 16 | 0..100 | Если разница между двумя последовательными адресами меньше или равно значению «maxGap», то эти адреса группируются в один блок опроса. В противном случае создается второй блок опроса. Эта запись позволяет оптимизировать запрос на опрос. |
«maxPendingRequests» | unsigned | 1 | 1..8 | Максимальное число ожидающих запросов без ответа. Данная запись позволяет увеличить число запросов для ускорения передачи.Перед установкой значения больше 1, необходимо убедиться в том, что управляемый драйвером ПЛК способен принимать более одного запроса. |
«maxQueueSize» | int | 256 | — | Определяет размер очереди запросов для режима ведущего устройства.Пример: maxQueueSize = 1000 |
«maxRetryNumber» | unsigned | 0 | >= 0 | Определяет количество попыток установления подключения перед тем, как подключение отмечается как «отсутствующее». По умолчанию: 0, т. е., поле первой неуспешной попытки драйвер предпринимает бесконечные попытки установления подключения. |
«OnlyActivePolls» | int | 0 | 0|1 | При OnlyActivePolls = 1 в системе с резервированием возможны только опросы активного драйвера. Значение по умолчанию — 0 (оба драйвера опрашивают ПЛК). |
«plc» | string | «» | — | Устаревшая, начиная с версии 3.9 «КАСКАД Цифра».Имя точки данных ПЛК, с которой работает драйвер. Для каждого ПЛК должна существовать своя запись (например, plc = «_Mod_Plc_2»). Точки данные создаются автоматически при настройке параметров на панели конфигурации драйвера Modbus/TCP (см. п. Панель конфигурации драйвера Modbus/TCP). |
«pollOptForBlob» | bool | 1 | 0|1 | Делает возможной оптимизацию запроса на опрос для типа blob. |
«requestDelay» | uint | 0 | >= 0 | Время в миллисекундах между двумя запросами. Значение не должно быть слишком высоким, т. к. оно снижает скорость передачи данных. Данная запись принимается в расчет только при использовании шлюзов. |
«simUnicosPlc» | bool | 0 | 0|1 | Задает возможность отправки ведущим устройством кадров UNICOS для специальных, обычно не используемых функциональных кодов.Если в адресе периферии указать функциональный код 120, создается кадр состояния данных с произвольными данными.Если указать функциональный код 121, создается кадр отчета о событии с произвольными данными.Используется только в ЦЕЛЯХ ТЕСТИРОВАНИЯ.Функциональный код информирует драйвер о необходимости создания кадра UNICOS. Этот код не выходит за пределы драйвера. |
«simUnicosEvents» | unsigned | 24 | 1..24 | Данный параметр определяет количество элементов моделированного отчета о событиях. |
«statCheckInterval» | uint | 20 | 5..100 | Интервал времени записи драйвером элементов точки данных. |
«tcpServerPort» | unsigned | 502 | 1..65535 | Номер порта TCP. Ведомоое устройство открывает клиентам сокет сервера через этот порт. |
«tcpConnectTimeout» | unsigned | 2000 | >= 1000 | Время ожидания подключения. (в мс)При установлении подключения драйвер ожидает завершения инициализации подключения и получения квитирования от ПЛК. Если драйвер не получает квитирование за отведенное время, он выполняет переподключение. Время ожидания определяется с помощью конфигурационной записи «tcpConnectTimeout» в сегменте Modbus. |
«unicosMarker» | int | 65535 | -1..65535 | По этому адресу драйвер определяет тип кадра: Modbus или UNICOS. Значение -1 отключает данную запись. Чтобы полностью отключить поддержку UNICOS, установленное значение записи должно быть равно -1 (параметру «addUnicosMarker» можно ничего не присваивать!). |
Уровни отладки
Драйвер Modbus/TCP поддерживает несколько опций отладки из командной строки. Они применяются для поиска ошибок во время работы драйвера. Более подробная информация обо всех опциях может быть получена с помощью опции helpdbg (см. также раздел «Параметры менеджеров»).
Уровень отладки | Описание |
-dbg 2 | Детальная информация о работе драйвера. Рекомендуется использовать при малой нагрузке на драйвер, чтобы не повлиять на его производительность. |
-dbg 25 | Используется при подозрении на потерю сообщения запросом на опрос. Опция включает отображение соответствующих сообщений об ошибках и выводит их в средстве просмотра журналов. В обычном случает эти сообщения отключены, т. к. они не являются критичными для запроса на опрос. Помимо задач поиска пропавших опросов на этом уровне отладки можно просматривать предупреждения о поступлении данных, которые не принадлежат ни одному из указанных адресов. Эти сообщения отфильтровываются на уровне отладки, т. к. они могут переполнить журнал и в большинстве случаев не нужны пользователю. |
-dbg 26 | Отображение числа кадров в очереди Modbus. |
-dbg 27 | Отображение идентификаторов транзакций текущих кадров Modbus. Эта опция позволяет увидеть число неподтвержденнных запросов. |
-dbg 9 | Отображение времени цикла драйвера. |
-dbg 10 | На этом уровне отладки в средстве просмотра журналов отображается метка времени кадров событий UNICOS, это позволяет искать ошибки, связанные с метками времени при создании кадров событий UNICOS. |
-report ALL | Переход на этот уровень отладки во время работы приводит к отображению групп опросов и блоков опросов. |
Преобразования
Преобразование — это перевод аппаратных данных в формат «КАСКАД Цифра». В следующей таблице приведена информация о преобразовании и совместимости с функциональными кодами Драйвер контролирует совместимость типов данных и кодов. В случае несовместимости выводится сообщение об ошибке.
Требуемый тип данных | Тип | Поддержка субиндексов (массива) | Размер позиции[байт] | Число элементов позиции | Тип элемента в «КАСКАД Цифра» | Функциональный код для запроса на запись | Функциональный код для запроса на чтение |
бит | bool | да | 1 | 8 | bool | 15, 6, 16 | 1, 2, 3, 4, 7, 24 |
бит | boolean как byte | нет | 1 | 1 | bool | 5 | нет |
byte | byte | да | 2 | 2 | char | 6, 16 | 3, 4, 7, 24 |
word | int 16 | да | 2 | 1 | int | 6, 16 | 3, 4, 24 |
unsigned word | uint 16 | да | 2 | 1 | unsigned | 6, 16 | 3, 4, 24 |
dword | int 32 | да | 4 | 1 | int | 16 | 3, 4, 24 |
unsigned dword | uint 32 | да | 4 | 1 | unsigned | 16 | 3, 4, 24 |
qword | int 64 | да | 8 | float | 16 | 3,4,24 | |
float | float | да | 4 | 1 | float | 16 | 3, 4, 24 |
string | string | нет | макс. 240 | 1 | string | 16 | 3, 4, 24 |
blob | blob | нет | макс. 240 | 1 | blob | 16 | 3, 4, 24 |
Коды ошибок
В следующей таблице описываются коды ошибок, отображаемые на панели настройки ПЛК (см. п. Панель конфигурации драйвера Modbus/TCP).
Номер ошибки | Описание |
Ошибка на стороен вывода драйвера | |
0 | ошибок нет |
1 | Подключение в режиме ведущего устройства к ПЛК прервано без попытки переподключения |
2 | Подключение в режиме ведущего устройства к ПЛК прервано, производится попытка переподключения |
3 | Ошибка подключения в режиме ведомого устройства |
4 | Одноранговый узел закрыл подключение в режиме ведомого устройства |
5 | Переполнение очереди Modbus. |
6 | Ошибка разбора кадра |
Коды исключений на стороне вывода ПЛКСледует заметить, что к значению, принимаемому из ПЛК, добавляется 100 (например, 100 + 11 = 111) во избежание путаницы с кодами ошибок драйвера. Также следует заметить, что описания ошибок взяты из рекомендаций, приведенных в общей спецификации Modbus/TCP. Уточненные значения большей части ошибок можно найти в спецификациях к коннретному устройству. | |
101 | Недопустимая функция |
102 | Недопустимый адрес данных |
103 | Недопустимое значение данных |
104 | Недопустимая длина ответа |
105 | Acknowledge (Квитирование) |
106 | Ведомое устройство занято |
107 | Отрицательная квитанция |
108 | Ошибка контроля четности при обращении к памяти |
110 | Шлюз недоступен по указанному маршруту |
111 | Отсутствие ответа от устройства за шлюзом |
Сообщения об ошибках
В следующей таблице описаны коды ошибок драйвера Modbus/TCP.
Класс | Сообщение об ошибке | Описание |
ModConnection | Превышено число ПЛК на одном шлюзе | Превышено число ПЛК с одним IP-адресом На сегодняшний день допустимо не более 8 ПЛК. |
ModHWMapper | Неправильный тип преобразования для … | Указан недопустимый тип преобразования для конфигурационного элемента адреса периферии. |
ModHWMapper | Subindex + transformation type exceeds max. data length … | Превышение допустимой длины данных при преобразовании субиндекса и функционального кода. |
ModHWMapper | Wrong Output function code for: … | Недопустимый функциональный код для элемента точки данных на стороне вывода. |
ModHWMapper | Wrong input spontaneous function code for: … | Недопустимый функциональный код для элемента точки данных для незапрашиваемых данных на стороне ввода. |
ModHWMapper | Ref. number not modulo 16 for spontaneous mode and FC15 for: … | Адрес для этой комбинации должен делиться на 16 без остатка. |
ModHWMapper | Wrong input polling/squery function code for: … | Недопустимый функциональный код для опроса или элемента точки данных для одиночного запроса на стороне вывода. |
ModHWMapper | Wrong mode for: … | Неверный тип ввода для конфигурационного элемента адреса периферии. |
ModHWMapper | Transformation/FC incompatibility for: … | Недопустимая комбинация функционального кода и типа преобразования. |
ModHWMapper | UNICOS SFC != 0 and FC != 16 for: … | В UNICOS используется только функциональный код 16. |
ModMasterConnection | Socket error during send | Ошибка сокета во время передачи данных. |
ModMasterConnection | Cannot establish connection to server | Ведущее устройство не может подключиться к ПЛК из-за ошибки в имени узла или номера порта либо из-за проблем в сети. |
ModMasterConnection | Peer has closed connection | ПЛК закрыл подключение. |
ModMasterConnection | Connection to … marked as dead | Подключение помечено как «отключенное». Отсутствуют попытки переподключения. |
ModModbus | Error during reception of ASCII frame | Недопустимый кадр ASCII на стороне ввода. |
ModModbus | No PLC for unit address: … | Не задан ПЛК с принятым адресом блока для данного подключения. |
ModModbus | Invalid Request Size field | Принят кадр Modbus с недопустимым размером запроса. В этом случае не производится синхронизация идентификатора кадра. Подключение будет закрыто и открыто снова для отладки ошибки. |
ModModbus | Error too many invalid frames | Принято слишком много ошибочных кадров. Это ошибка последовательности, возникает в результате более ранних ошибок. Приводит к переподключению. |
ModModbusMaster | No host/unit address defined for PLC number: … | Для номера ПЛК не указан адрес узла или блока. Ошибка возникает в случае, если для этого номер ПЛК не была создана точка данных (_Mod_Plc). |
ModModbusMaster | Unknown function code specified in Peripheral Address | Недопустимый функциональный код в адресе периферии. |
ModModbusMaster | Missing some responses to outstanding requests | Отсутствуют ответы на некоторые ожидающие запросы. |
ModModbusMaster | Receiving Modbus frame without request | Принят ответ, который не запрашивался. При большой количестве подобных ошибок подключение закрывается и открывается заново. |
ModModbusMaster | Wrong unit address received: UA= … | Принят ошибочный адрес блока в ответ на ожидающий запрос. При большой количестве подобных ошибок подключение закрывается и открывается заново. |
ModModbusMaster | Exception code received: EC= … | Ошибка ПЛК. ПЛК не может обработать запрос. Значение ошибки можно уточнить в таблице кодов ошибок. |
ModModbusMaster | Wrong response to output FC (Ошибочный ответ на зпрос функциональных кодов) | Ошибочный ответ на запрос чтения регистров. При большой количестве подобных ошибок подключение закрывается и открывается заново. |
ModModbusMaster | Wrong response to read registers request (Ошибочный ответ на чтение регистров) | Ошибочный ответ на запрос чтения регистров. При большой количестве подобных ошибок подключение закрывается и открывается заново. |
ModModbusMaster | Wrong response to read discretes request (Ошибочный ответ на запрос дискретных данных) | Ошибочный ответ на запрос чтения регистров. При большой количестве подобных ошибок подключение закрывается и открывается заново. |
ModModbusMaster | Wrong response to read exception status request (Ошибочный ответ на чтение состояния исключения) | Ошибочный ответ на запрос чтения регистров. При большой количестве подобных ошибок подключение закрывается и открывается заново. |
ModModbusMaster | Wrong response to read FIFO request (Ошибочный ответ на чтение очереди FIFO) | Ошибочный ответ на запрос чтения регистров. При большой количестве подобных ошибок подключение закрывается и открывается заново. |
ModModbusSlave | Slave received unknown function code | Ведомое устройство получило неподдерживаемый или недопустимый функциональный код Modbus. |
ModModbusSlave | Invalid number of events in UNICOS Event Report | Недопустимый номер поля события в кадре отчета о событии UNICOS. |
ModModbusSlave | UNICOS Slave received unknown subfunction code | Ведомое устройство получило неподдерживаемый или недопустимый функциональный код UNICOS. |
ModOutputQueue | Maximum requests in queue, request discarded | Переполнение очереди Modbus. |
ModOutputQueue | Discarding polling requests (Msg. every 100) | Дублирование запроса об опросе, текущий запрос отклонен. Предупреждение возникаетя только при запуске драйвера с опцией -dbg 25. |
ModOutputQueue | Timeout appears for last sent request | Таймаут транзакции запроса Modbus. |
ModPlc | Error during setting of PLC data | Ошибка записи данных ПЛК во внутреннюю точку данных. Дополнительную информацию об этой ошибке (идентификатор точки данных) можно получить на уровне отадки -dbg 2. |
ModPrLayer | Cannot start Server | Драйвер не может создать сокет сервера. Вероятно, номер порта занят. |
ModRsrce | Unknown keyword in config file | Конфигурационный файл содержит неизвестную запись. |
ModSlaveConnection | Socket error during send | Ошибка передачи данных через сокет. |