intellis
Active Forum Member / Активный участник форума
Участник № / Member № 2383
отправлено / posted
Здравствуйте, уважаемая техподдержка! Мы пытаемся наладить связь по ADS между контроллером BC9020 и Trace Mode. Проблема в следующем. В контроллере в области прямоадресуемой памяти объявлена переменная INT длиной 2 байта по адресу 10. Для того, чтобы прочитать эту переменную из Trace Mode, настраиваем драйвер T12 следующим образом Параметр #1(B) - 0x1 Параметр #2(B) - 0x0 Параметр #3(W) - 0x4020 Параметр #4(W) - 0xa Направление - Input Тип данных - Integer Дополнительно - BECKHOFF:ID=192.168.3.2.1.1;Port=800; Аргумент экрана - INT. Проблема в том, что значение выводится на экран, но побайтно, то есть выводится только значение 10 байта, а переменная двухбайтная и занимает 11-й байт тоже. В принципе можно склеить значения 2-х байтов и получить желаемый результат, но удваивается количество каналов в проекте. Подскажите пожалуйста, в чем моя ошибка?
Сообщения / Posts 95 | Из / From: Россия
| IP / IP: IP адрес / IP address |
отправлено / posted
1. Аргумент экрана должен быть привязан к каналу HEX16, который связан с указанным "Источником". 2. Параметр #1(B) - 0x1 означает, что Вы принимаете переменную размером 1 байт. Вы не пробовали поставить Параметр #1(B) - 0x2?
Сообщения / Posts 17321 | Из / From: Россия
| IP / IP: IP адрес / IP address |
intellis
Active Forum Member / Активный участник форума
Участник № / Member № 2383
отправлено / posted
Спасибо, после отработки пункта 2 все заработало! Настраивал связь по видеопримеру подключения Beckhoff и даже не догадывался, что Параметр #1(B) означает количество байт. Спасибо за качественную техподдержку!
Сообщения / Posts 95 | Из / From: Россия
| IP / IP: IP адрес / IP address |
intellis
Active Forum Member / Активный участник форума
Участник № / Member № 2383
отправлено / posted
Здравствуйте, уважаемая техподдержка! Чтобы не плодить темы, продолжу здесь. При увеличении источников, связанных с контроллером BC9020 по протоколу ADS (в узле планируется около 1500 источников) очень сильно упала скорость обмена с контроллером. Данные обновляются примерно 1 раз в 10 секунд, это касается и чтения и записи. При этом проверяли утилитой от производителя Twincat ADS Monitor, в ней обмен по-прежнему быстрый. Или драйвер Beckhoff в Trace Mode рассчитан на небольшое количество источников?
Сообщения / Posts 95 | Из / From: Россия
| IP / IP: IP адрес / IP address |
отправлено / posted
Вам надо организовать связь групповыми запросами через каналы ChGroupReq, как указано в переданном Вам описании драйвера.
Сообщения / Posts 17321 | Из / From: Россия
| IP / IP: IP адрес / IP address |
intellis
Active Forum Member / Активный участник форума
Участник № / Member № 2383
отправлено / posted
Спасибо за ответ. Пока получилось вывести несколько аналоговых сигналов. В связи с этим несколько вопросов. 1. Возможно ли через Call.ChGroupReq не только собирать данные, но и задавать значения в контроллер (у меня пока не получилось). 2. Какое оптимальное количество параметров без потери скорости обмена можно передавать через Call.ChGroupReq. 3. Что делать с масштабированием аналоговых сигналов, которые я обычно выполнял в канале типа Float? Пока два варианта: каждый аргумент Call.ChGroupReq перенаправлять на каналы Float, второй - через программу в TM.
Сообщения / Posts 95 | Из / From: Россия
| IP / IP: IP адрес / IP address |
intellis
Active Forum Member / Активный участник форума
Участник № / Member № 2383
отправлено / posted
Поправка ко второму вопросу. Имелось в виду, сколько параметров без потери скорости обмена можно передавать через ОДИН канал Call.ChGroupReq
Сообщения / Posts 95 | Из / From: Россия
| IP / IP: IP адрес / IP address |
отправлено / posted
1. Групповая запись в драйвере не предусмотрена. 2. Методического ограничения на количество переменных, запрашиваемых групповым образом через 1 канал ChGroupReq, нет. Надо только учитывать, что чем длиннее кадр, тем больше вероятность появления ошибки в ответе и, следовательно, больше вероятность переспросов. За счет этого может снизиться производительность. Других причин для снижения скорости обмена я не вижу. 3. Если полученные групповым запросом переменные Вам не надо архивировать, обрабатывать для посылки сообщений в ОТ и пр., то, видимо, линейное преобразование для отображения на экране или в документе можно произвести и в программе. Если Вам для каких из этих переменных все-таки понадобятся каналы, то линейное преобразование можно произвести в их штатных внутренних процедурах обработки.
Сообщения / Posts 17321 | Из / From: Россия
| IP / IP: IP адрес / IP address |
intellis
Active Forum Member / Активный участник форума
Участник № / Member № 2383
intellis
Active Forum Member / Активный участник форума
Участник № / Member № 2383
отправлено / posted
Подключил все входные сигналы (более 500) через Call.ChGroupReq, с аргументов Call.ChGroupReq на обычные каналы и все заработало на ура! При том, что в узле около 500 выходных сигналов, которые выводятся обычном образом, без Call.ChGroupReq, время обмена с контроллером не более секунды.
Сообщения / Posts 95 | Из / From: Россия
| IP / IP: IP адрес / IP address |
ivostrikov
Junior Member / Новичок
Участник № / Member № 4308
отправлено / posted
Для связи с Twin-Cat используется
Пользовательский драйвер типа 12 подтипа 1.
t12s114.dll - драйвер должен быть размещен рядом с исполняемыми файлами Trace Mode.
tsadsdll.dll и прочие dll от Twin-Cat должны быть инсталлированы и зарегистрированы.
Допускается линковка "Источников" на Call.ChGReq.
НАСТРОЙКИ "Источников/Приемников".
Параметр1: тип операции 255 - чтение кода ошибки возвращаемого API - 1 целое 16 - чтение статуса nAdsState,nDeviceState - 2 целых
если источник залинкован на канал (тип In/Out задает операцию чтения.записи) 0, (с доступом по имени - не обязательно) - 1 4х байтовая переменная формат плавающий или целый задается каналом(FLOAT,HEX) 1,2,3,4 (с доступом по адресу - не обязательно) - парам3=indexGroup,парам4=indexOffset длина данных= (парам1) размер элемента = 1,2,,4
если источник залинкован на Call.ChGReq 0, при конвертации превращается в 5,6,7,8 в зависимости от типа аргумента 5,6,7,8,9 с доступом по имени или по адресу к массиву длина данных= (парам1-4)*(число аргументов в канале) размер элемента = 1,2,,4(float),4(INT32)
Параметр2: - номер контроллера (от 0 до 255) Параметр3: - indexGroup Параметр4: - indexOffset
Поле ДОПОЛНИТЕЛЬНО: Если ID и/или Port не заданы, то используеся локальный и 801
Name=имя_параметра - (обязательно, в случае задания ID и/или Port - не обязательно)
<BECKHOFF> - у всех каналов обязательно <BECKHOFF:Name=имя_параметра> - у каналов с доступом по имени <BECKHOFF:ID=NN.NN.NN.NN.mm.mm;Port=ppp;Name=имя_параметра;> - у каналов с доступом по имени Разделитель <;> - обязателен.
коды TRACE MODE
ERR_RT_CONNECT=17 - библиотека TsAdsDll.dll не загружена ERR_RT_NOTFOUND=12 - ошибка преобразования имени в адрес ERR_RT_READ=4 - ошибка чтения ERR_RT_FORMAT=7 - доступ по имени, а имя не определено
ivostrikov
Junior Member / Новичок
Участник № / Member № 4308
отправлено / posted
Как мне, например, считать групповым запросом через CALL.ChGroupReq 20 переменных типа INT(2 байта), начиная с адреса MB3000(indexGroup = 0x4020, indexOffset = 0xbb8)?
Сообщения / Posts 4 | Из / From: Россия
| IP / IP: IP адрес / IP address |
ivostrikov
Junior Member / Новичок
Участник № / Member № 4308
Polag
Junior Member / Новичок
Участник № / Member № 4573
отправлено / posted
Пришлите, пожалуйста описание драйвера BECKHOFF на polygalov83@mail.ru
Сообщения / Posts 12 | Из / From: Russian federation
| IP / IP: IP адрес / IP address |
Polag
Junior Member / Новичок
Участник № / Member № 4573
отправлено / posted
Здравствуйте, уважаемая техподдержка! Мы пытаемся наладить связь по ADS между контроллером BC9050 и Trace Mode. Проблема в следующем. В контроллере в области прямоадресуемой памяти объявлена переменная REAL длиной 4 байта по адресу 0 (IN AT %MW0:real). Для того, чтобы прочитать эту переменную из Trace Mode, настраиваем драйвер T12 следующим образом Параметр #1(B) - 0x4 Параметр #2(B) - 0x0 Параметр #3(W) - 0x4020 Параметр #4(W) - 0x0 Направление - Input Тип данных - FLOAT Дополнительно - BECKHOFF:ID=192.168.1.201.1.1;Port=800; Аргумент экрана – IN / REAL.
Информация приходит, но число с плавающей точкой контроллером и скадой воспринимаются по-разному. Из скады пишем 54,0, в ПЛК получаем что-то подобное 2,23-045… , когда читаем из ПЛК, опять в скаде получаем 54,0. Как решить проблему?
Сообщения / Posts 12 | Из / From: Russian federation
| IP / IP: IP адрес / IP address |
отправлено / posted
Не понятно каким образом производится запись в контроллер. Описанные Вами настройки используются только для чтения данных из контроллера. Проверьте раздельно чтение и запись. Для этого создайте два источника. Первый источник с направлением input, второй - out и привяжите их к каналам типа Float. Каналы Float свяжите с аргументами.
Сообщения / Posts 17321 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Romсheg
unregistered
отправлено / posted
2Polag: Вам надо задать правильный порядок следования байт при чтении регистров в формате Float, видимо у устройства не Intel-формат для Float. Как это сделать - есть в справке по настройке источников/приемников ModBus.
IP / IP: IP адрес / IP address |
отправлено / posted
Прошу прощения, попутал насчет ModBus. Но то, о чем я сказал - скорее всего и есть причина: перепутан формат последовательности байт при чтении Float.
IP / IP: IP адрес / IP address |
Polag
Junior Member / Новичок
Участник № / Member № 4573
отправлено / posted
Здравствуйте, в первом посте все в порядке, там я описал настройки для чтения, подобные я использовал и для записи, лишь меняется направление на OUTPUT. И вообще с целочисленными данными у меня проблем нет – читаю и пишу. При чтении из ПЛК переменный со значением 1.1 в скаде я увижу -1.07609е+008. Эксперимент проводил несколько раз, переделывая все ПО занового – результат один. Вопрос: работает ли драйвер с переменными типа REAL, и проверяли ли вы это, если да, то готов протестировать ваш проект. К ПЛК я подключаюсь по Ethernet через TwinCat, в отладочном режиме вижу все значения переменных, настройка отображения переменных DECIMAL.
Сообщения / Posts 12 | Из / From: Russian federation
| IP / IP: IP адрес / IP address |
отправлено / posted
Здравствуйте. С переменными REAL драйвер работает. Причина заключается в неправильном формате последовательности байт. Проверьте, возможно, в настройках TwinCat для разных типов данных задаются различные порядки последовательности байт. Также, возможно, что порядок следования байт меняется в контроллере.
Сообщения / Posts 17321 | Из / From: Россия
| IP / IP: IP адрес / IP address |