Жду ответа от Дмитрия
Вид для печати
Жду ответа от Дмитрия
А без него не сможете посмотреть?
Дмитрий и Павел - проверяйте почту
Решал задачу соединения по программному Modbus TCP двух контроллеров СПК207 и ПЛК110 M02. На СПК207 установил клиента. На ПЛК110 - сервер. За основу взяты библиотеки OSCAT. Не буду описывать увлекательную путешествие в миры Овен. Устойчивое соединение удалось получить. Осталось два невыясненных вопроса.Цитата:
Через любые две точки проходит прямая, и притом только одна.
Вопрос 1. Методом научного подбора удалось установить, что СПК207 может передать на ПЛК110 93 слова, а принять 95 слов. С учетом служебных байтов и путем нехитрого манипулирования калькулятором получаем волшебные 200 байт, при максимально возможном для приема 125 слов и передачи 123 слова. Что нашли Дмитрий и Павел у себя на почте? :confused:
Вопрос 2. Методом, еще более глубокого, научного подбора удалось установить, что минимальная задержка между запросами (задается на клиенте) должна составлять 800 мс. Циклы в конфигурации задач на обоих контроллерах 20 мс. Уменьшение задержки влечет за собой вываливание по ошибки связи. Это у меня провода такие тормозные?
1. На почте решение вышеописанной проблемы длинных TCP-пакетов. Владислав, наверное, скоро опубликует новую прошивку.
2. Не знаю как MODBUS TCP но собственный протокол работает очень быстро. У меня на ПЛК минВЦ = 0. Простой пакет туда-обратно проходит за 2-4 мс.
СПК207 какого года выпуска?
По поводу пакетов>200 байт - сейчас идёт тестирование, закончится - выложим.
Сколько мы не делали обмена по ModBusTCP - всё летало. Попробуйте не пользоваться OSCAT, Для ПЛК110 он не нужен вообще (есть штатный в конфигурации), СПК тоже попробуйте штатный CoDeSys-вский.
P.S. на тестирование могу выдать, пишите на plc_prog@owen.ru
По поводу прошивки.
Интересно, в каком году начнется штатная эксплуатация.:oЦитата:
Предполагается, что перемычка при штатной эксплуатации не потребуется.
По поводу конфигуратора.
Огромное спасибо за совет. Пойду почитаю инструкцию. В очередной раз заценил юмор. В CODESYS 2 последний раз пользовался штатным конфигуратором года 4 назад. В 3 CDS, года 2 назад. Я думаю, (если я переживаю из-за 200 байт) многие поймут почему. Как работать в CODESYS 3 со штатной библиотекой (без штатного "конфигуратора") не знаю. В своё время пробовал, но не получилось. Если у кого то есть работающий пример, буду благодарен. Если для CODESYS 2 есть другая библиотека (не OSCAT), работающая на овеновских контроллерах, готов попробовать. На контроллерах других фирм пользуюсь библиотекой 3s ModbusTCPSrv.lib, но здесь она не прокатывает. Я думаю, разработчики Овен лучше меня смогут назвать причину.Цитата:
Попробуйте не пользоваться OSCAT, Для ПЛК110 он не нужен вообще (есть штатный в конфигурации), СПК тоже попробуйте штатный CoDeSys-вский.
К сожалению, я не самый лучший специалист по созданию собственных протоколов. С ПК, я в свое время, связывался по чистому TCP/IP (без Modbus), но между контроллерами, как то стрёмно. Если есть работающий пример Вашего протокола, было бы интересно посмотреть. Мне кажется, и библиотеку OSCAT можно оптимизировать. У меня есть подозрение, что тормоза связаны с неблокирующим режимом. Функция Connect не выдаёт статуса коннекта, ну а дальше за собой тянет. Может я и ошибаюсь. Сети и протоколы, не моя специализация.:(Цитата:
Не знаю как MODBUS TCP но собственный протокол работает очень быстро. У меня на ПЛК минВЦ = 0. Простой пакет туда-обратно проходит за 2-4 мс.
Цитата:
СПК207 какого года выпуска?
Спасибо. Он уже на тестировании. Версия М04. Выпуск 5 ноября 2015 года. Прошивка старая, под v3.5.5.4. Новую, с трендами, жду уже много месяцев ...Цитата:
итак, есть чужая библиотека, которая работает странно и наш ПЛК, в котором модбус TCP на наших библиотеках работает быстро. Внимание вопрос, где копать?
Вероятно в OSCAT - например, переводятся ли там сокеты в неблокирующий режим?
Вы хотя бы на половину попробуйте, в ПЛК110 - штатный slave через конфигуратор (кстати чем он не устраивает, весь функционал поддерживается)?
И почему Вы воспринимаете вопросы и советы как вражескую пропаганду?
Владислав, извините если я Вас обидел, но мне кажется у Вас уже какая то паранойя по поводу вредителей, врагов, саботажников и провокаторов.
По поводу конфигуратора в CODESYS 2.
Прекрасно работающий продукт. У меня к нему нет никаких претензий. Просто на СПК207 у меня находится "рецептура". Этот рецепт мне надо передавать на контроллер. Таких контроллеров может быть несколько. Рецептура фактически является Batch. Объем рецепта может варьироваться в зависимости от количества шагов и установки. Минимальный размер около 2 кб. Для оптимизации процесса передачи данных естественно используются массивы и передача разбивается на несколько циклов. Обратно с контроллера также поступает достаточно большой объем информации. Для этого также используются массивы (которые к тому же имеют некоторую избыточность, для унификации под разные типы оборудования). А теперь давайте, на ПЛК110 попробуем для этой задачи использовать конфигуратор с его AT %QW ... и заодно к массиву привяжем. Дальше. Представим, что у меня нет контроллера. Я сейчас спокойно отлаживаю программу на виндовом контроллере, так как не привязан к железу. И так я работаю уже много лет. Одна и та же программа (за исключением привязки к конкретным адресам ввода-вывода, которые для отладки мне не нужны) прекрасно переносится на контроллеры разных производителей.
По поводу OSCAT.
Естественно я понимаю, что в ней могут быть ошибки. Но безошибочной библиотеки под Modbus TCP, производства Овен, я не видел. Библиотека написанная 3s на вашем контроллере не работает (о чем я уже писал выше). Библиотекой под Modbus RTU, написанной специалистами Овен, я пользуюсь.
P.S. Кстати, одна из библиотек OSCAT на сайте Овен доступна для скачивания (в разделе поддержка). Если Вы категорически против, удалите.
По поводу неблокирующего режима сокетов.
Естественно переведены. В блокирующем режиме ПЛК110 не работает вообще. Полностью умирает. Вы же сами порекомендовали мне 14 января
Я воспользовался Вашим советом, не зная ещё, что это вражеская пропаганда.Цитата:
Сокет надо сразу ставить в неблокирующий режим. Пример тут где-то лежал.
А у Вас блокирующий, вот через 4 секунды ожидания связи ПЛК и сбрасывается по Watchdog.
По поводу конфигуратора в CODESYS 3.
Отличный продукт. Есть все функции и можно привязывать массивы. Я им, если честно, часто пользуюсь. Но для конкретной задачи он плохо подходит, так как в нем нет возможности динамически менять адрес для слейва. Как только в 3s это сделают, буду счастлив. А библиотеку без конфигуратора мне подключить не удалось (о чем я уже писал выше).
AT %Q использовать не надо.
Сам по себе slave хоть на 3 кБ сделайте. И работать он будет вплоть до 123 регистров за раз.
Ну, а в крайнем случае, ModBus TCP можно сделать и вручную. Он прост как лопата, даже проще чем ModBus RTU, нет контрольной суммы.
P.S. А не хотите попробовать сетевые переменные CODeSys-а? Под Вашу задачу они ещё лучше подходят.
Владислав, будьте добры, расскажите по подробнее по этому пункту. Желательно с примерами как сие использовать/настраивать. Инфы ноль, экспериментировать вслепую скучно...
И ещё: какие функции библиотеки SysLibSockets, которые в других версиях ПЛК не работали, теперь работают как следует?
Вот типичный файл local_addres.dat
/Настройки 0-го интерфейса Ethernet
EMAC=E9:00:23:00:77:6B
IP=0A:02:0B:78
GATE=0A:02:01:01
MASK=FF:FF:00:00
//До 4 шт. DCHP заменяет значения
DNS=10.2.1.1
DNS=10.2.1.2
DHCP=(0|1)
DHCP_NAME=Name_of pribor
//Если нет - иcпользуется название модели PLC
//Таблица маршрутизации (общая для 2-х интерфейсов.
//!Межинтерфейсный роуминг не осуществляется!
//До 10 маршрутов
//Формат IP_dest,Mask_dest,IFace_num (IFace=0 - Ethernet, IFace=1 - PPP)
//Маршруты обрабатываются по приоритету сверху вниз
//При отсутствии таблицы либо отсутствии правила, подходящего под соединения дейcтвуют следующие правила:
//Проверяется соответствие IP и MASK диапазону каждого из интерфейсов
//Если нет соответствия - выбирается интерфейс с Getway!=0
//Если такого нет - выбирается интерфейс с MASK==255.255.255.255
//Иначе - соединение не устанавливается
//ROUTE 192:168:5:0,255:255:255:0,1
//Настройки 1-го интерфейса модем PPP
//порт (NONE|COM2|DBGU|RS485-1|RS485-2)
PORT_MODEM=COM2
BODRATE_MODEM=(115200...300)
//Если пин не требуется - закоментировать строку
GSM_PIN=1234
GSM_APN=web.vodafone.de
Login=SVC
Password=54321
//Если телефон один - ввести 3 раза одно и то-же
//Если же есть резервные телефоны - дозвон по очереди
Tel1=ATDT112
Tel2=ATDT333
Tel3=ATDT555
//Время соединения(сек), =0 - бесконечно
ConectTime=180
AmountRepeat=(0..10)
//Пауза между соединениями (сек)
RepeatTime=10
//Время ожидания ответа"CONNECT" (сек) и таймаут реконнекта при отсутсвии обмена
PolingResumTime=10
//Автозапуск дозвона по PPP (YES|NO) или пользуемся OwenLibNetcontrol.lib
AUTORUN_PPP=YES
Как мы видим, появилось DHCP, DNS (значит работают функции SysSockGetHostName() и SysSockGetHostByName()),
работает PPP и работает роутинг (можно назначить, к примеру основной маршрут через Ethernet и резервный через PPP - на случай пропадания Ethernet) Или разнести доступ к разным IP по разным интерфейсам.
RawSockets - это просто голые сокеты. можно организовывать обмен по разнообразным протоколам, к-е не поддерживаются самим ПЛК. Предоставляет прямой доступ к IP уровню.
Владислав, спасибо за ответ!
Ещё вопрос: после выполнения SysSockClose, а затем создания нового сокета возвращается дескриптор равный на единицу большим чем предыдущий закрытый - это нормально?
Дескрипторы вообще не стоит рассматривать как числа в общем случае.
Добрый вечер.
Получил ПЛК110-30 М02.
И сразу вопрос:
Библиотека UNM нормально работает?
SetByte возвращает всегда 0, хотя данные постоянно посылает.
А вот получать ничего не получает. (Распайка в руководстве правильная?)
FB взял из работающего проекта (ПЛК110)
Поменялось лишь расключение, согласно руководству.
Так же не работает переключатель (Работа - Стоп - Сброс)
Может что не правильно делаю, пойду прочитаю руководство.
Вопрос к тем, кто уже приобрел.
Ставить новый 110 в производство можно?
Или еще чуть подождать?
Хотя оно и сбросится (это просто дескриптор), но я крайне не рекомендую без серьёзных причин открывать/закрывать сокеты. Всё таки это система 24/7, а выделение ресурсов - это всегда фрагментация кучи. И ежели Вы не только сокеты меняете как перчатки, но еще и пару мегов ОЗУ в куче будете выделять/освобождать, рано или поздно (спустя 5 лет, когда все всё забыли, а прибор где-то в под Салехардом) куча настолько фрагментируется, что очередной malloc вернёт 0.
При использовании библиотеки асинхронного доступа (или встроенного в конфигурацию архиватора) проблем нет.
Однако в коде надо предусмотреть процедуру изъятия флешки - останов (по кнопке, команде и т.п.) обмена с флешкой, паузу в 1-2 секунды для синхронизации и можно вынимать.
Если этого не сделать - FAT32 может разрушится, что, в общем-то и не удивительно.
Я думал ресурсы при закрытии сокета освобождаются.
Тогда посоветуйте, пожалуйста, как грамотно поступить в такой ситуации:
ПЛК - TCP клиент. Он пытается соединиться с сервером, сервер может быть выключен. Так как SysSockConnect фактически ничего полезного не возвращает, ПЛК посылает пакет и ждёт ответ, если ответа не последовало закрывает сокет по таймауту, затем всё повторяется.
Не закрывать сокет, вызывая повторно SysSockConnect? Тогда через какой таймаут?
Сделать ПЛК TCP-сервером?
А вы сокет то не закрывайте
SysSockShutdown( SOCK_ACC, 2 ); (* 2- both - РАЗРЫВ В ОБЕ СТОРОНЫ *)
вполне достаточно перед новой попыткой коннекта. а сокет - это просто кусок памяти для служебных данных.
Хочется поднять вопрос о движении к "прилавку" ... кончились экземпляры для тестирования )))
Куда-то пропало моё сообщение..
Так всё-таки, Владислав, поддерживается функция, которую упомянул Дмитрий? Что-нибудь изменилось с тех пор?
Кстати заметил при мин вц = 0, Last Time in mks равен ровно 1000, хотя Free processor resourse = 0. При этом реальное время цикла не более 100 мкс. Это значит возможность отключить MinCycleLength теперь отсутствует?
Редкий ПЛК хорошо работал с MCL=0
Владислав, по тестированию UNM есть какие то результаты?
На сайте сист неправильная распиновку разъема rs232.
В итоге посмотрел на неё и прыгал вокруг ПЛК.
UNM по всей видимости, не работала по той же причине.
Вечером проверю.