Если сделать проект где открывается сокет (но не закрывается по событию STOP), то через N перезаливок проекта они внезапно кончатся.
Вид для печати
День добрый, тех. поддержка.
Разбираю примеры с сокетами.
Вопрос в следующем.
Для проекта TCP сервера в конфигурации задач к событию "Стоп" привязана подпрограмма закрывающая сокеты. А для проекта TCP клиента нет никакой подпрограммы для закрытия сокетов в случае остановки ПЛК.
Это недосмотр авторов примеров или нужно закрывать только серверные сокеты по событию "Стоп"?
И еще вопрос по клиентским сокетам.
Пусть я из ПЛК110 М02 хочу опрашивать модули серии Мх210 по протоколу Modbus TCP.
Мне для каждого модуля нужно создавать сокет?
Или можно открыть один сокет и при опросе очередного модуля "соединяться" с ним с помощью функции SysSockConnect?
Добрый день. Помогите разобраться в подключении к плк160 (м2) мк110-8д.4р в конфигураторе ПЛК.
Извиняюсь. Исправил.
Программа ошибок не выдает, но я не вижу подключения блоков расширения. Сам ПЛК работает нормально.
Зачем ? МДВВ до сих пор пашут. Это другое ? ))
А кто спорит ? "Кому и кобыла - невеста" (С)Цитата:
.. Все настройки в конфиге рабочие...
Вот обьясните - накой конкретно здесь для both 100мc ?Цитата:
Для модулей МК110-8д.4р нужен именно режим Both,
Именно для этих модуля (in/out) - разносить. Pool time для in-части, by change для out-части.Цитата:
и чтобы не разносить по разным UMD..
Both ("по изменению но не режe") оптимален для чистых out-модулей. Причем можно и несколько секунд ставить (соотнести с t.out на той стороне) Не, если устраивает порожняк в виде poll-отправки без изменения (а здесь - 3 раза) - то удачи.
.. не юзали десятка-другого модулей на 1-й линии с задачей не допустить "а чо это - жму кнопу, а свет не сразу включается" или с ситуацией где индивидуальное рандомное возникновение/пропадание модулей из сети - штатная задача.Цитата:
Очевидно вы никогда ...
ps
Ну и опять - к сокетам все это никак ))
Спасибо. Поменял на RTU.
Добрый день. Я в этом чайник. Если Вам не сложно подправьте прогу как считаете нужно. Спасибо.
Добрый вечер. Спасибо что откликнулись. Можете разъяснить, что Вы имеете ввиду настройка модулей, прошивка модулей, где об этом можно прочитать. По поводу заливки в ПЛК и старт- все понятно, делалось.
У вас модули в программе с адресами 30,31 и 32, вы их запрограммировали через Конфигуратор M110 ?
Скорость 115200 тоже надо запрограммировать в модули
( по умолчанию скорость 9600 и адрес 16 на всех модулях с завода)
Конфигуратор Мх110 здесь в "Документации и ПО" https://owen.ru/product/moduli_diskr...n_and_software
Видео по подключению модулей https://www.youtube.com/watch?v=hOhLY8GVbMo
Советую посмотреть все видео их штук 15
Добрый день. Помогите пожалуйста разобраться, почему не запускается пример tcp client на плк 110-24.32.p-l. Код в примере не изменял, поставил только свой ip адрес (на плк 10.0.6.10 на компьютере 10.0.6.5). Запускаю кодесис, подключаюсь онлайн, записываю проект в плк, на ПК запускаю Геркулес в режиме tcp server, порт 502. Из кодесис по шагам прогоняю программу, дохожу до отправки сообщения и в переменной diSendBytes=-1. Дальше сокет закрывается. Никакой отправки не происходит, и подключения похоже тоже, так как Геркулес вообще не реагирует никак. В переменной eStatus=IP_ERR_PIPE ругается на сокет.
Второй пример tcp server работает.
Александр, во-первых, в таких случаях желательно проект или листинг кода прикладывать, а во-вторых, если мне память не изменяет, то в примерах клиента не подразумевается непрерывный обмен данными, а лишь разовый запрос - ответ, хотя у Вас и это не работает. Вообще, программные сокеты у ОВЕН'а еще тот "квест" (и их реализация, в виде соответствующей библиотеки, на ПЛК лично меня не совсем устраивает), в свое время пришлось информацию по крупицам по всему форуму собирать, но "кто ищет, тот всегда найдет"...
Spawn, проект взят из шапки темы, без изменений, ну кроме ip адреса. Все делал по инструкции. И, что самое интересное, tcp server работает в связке ПЛК-геркулес (на ПК), а вот клиент никак не запускается. Пробовал на двух ПК запускать кодесис в режиме эмуляции, как будто два плк, на одном клиента, а на другом сервер, безрезультатно. Да и ошибка IP_ERR_PIPE говорит о том, что сокет не открылся, поэтому и Геркулес не видит плк и соответственно обмен не идёт.
В эмуляции работать не будут примеры. Если вы загрузили проект, потом отключились изменили ip-адрес в переменных инициализации, и заново подключились, то новые значения не применятся, нужно сделать Сброс холодный. Если значения переменных правильные и всё равно не работает, то предоставьте удаленный доступ (в личку, скайп, на почту).
Иван, здравствуйте.
Я ещё раз попытаюсь описать весь процесс получения.
1. Скачиваю проект с форума и открываю в кодесис (все библиотеки и таргет файлы заранее установлены).
2. Подключаю плк к ПК через ethernet, настраиваю подключение: ip:10.0.6.5, mask: 255.255.0.0 (на плк заранее прописаны: ip:10.0.6.10, mask: 255.255.0.0, getway: 10.0.6.10).
3. В коде программы меняю переменную sIpv4 на 10.0.6.5.
4. Подключаюсь онлайн в кодесис в плк, проект загружается в контроллер.
5. На ПК запускаю программу Геркулес, tcp server, меняю порт на 502, запускаю (listen).
6. В кодесис нажимаю F5 (start), открываю визуализацию, в строке "отправляемое сообщение" пишу hello и нажимаю кнопку отправить.
Подскажите пожалуйста, ведь таким образом пример должен работать? В Геркулес должна прийти отправляемая строка? Или я что-то делаю не так?
Все верно написано. Только наверно, gate ПЛК: 10.0.6.1.
Проверьте не блокирует ли пк посылки, брандмауэр, например. Или попробуйте увеличить tSendServer до 10 мс или измените порт (может что-то блочит 502 порт).
Проверил у себя по вашим пунктам (ПЛК110 М02, прошивка 1.2.42) - всё работает.
Иван, добрый вечер.
Нужна Ваша помощь.
Программа на ПЛК написана с использованием примера из этой темы (почти ничего не редактировал, добавил несколько переменных). ПЛК общается с сервером, передавая шестизначное число в формате STRING, принимает от сервера ответ в формате STRING (принимает 0 или 1).
Программа успешно работает несколько часов (то 2, то 4), но спустя время ПЛК начинает дописывать в переменную sReadFromServer букву я (WireShark четко показывает, что сервер передал '1', а в ПЛК отображается '1я'). Помогает только перезагрузка ПЛК, после которой этот дефект пропадает.
Если пробовать обрезать переменную функцией DELETE, то это помогает убрать лишнюю букву. Но, как только делаю проект загрузочным и перезагружаю ПЛК, то в переменной sReadFromServer при обмене передается 1, а после функции DELETE проскакивают числа (ip адрес сервера, к которому обращается ПЛК).:confused:
Что это может быть? В какую сторону смотреть?
Работу сервера проверили, программа WireShark показывает, что ничего лишнего не передается. Откуда ПЛК вообще берет лишнюю информацию и почему она появляется в переменной sReadFromServer???
Вложение 64424
Здравствуйте!
Очищать переменную типа string следует через функцию SysMemSet() из библиотеки SysLibMem.lib
SysMemSet(ADR(sReadFromServer), 0, SIZEOF(sReadFromServer) );
Вложение 64444
Иван, спасибо, попробую.
Сейчас я это делаю так: sReadFromServer:='';
Переменная обнуляется, все работает, но через несколько часов выскакивают лишние символы.
Посмотрим, сработает ли ваш вариант.
Всем доброго дня!
У меня такой вопрос, есть owen ПЛК110-30, программа написана на функциональных блоках, работаем с ним по TCP отправляя регистры
Сама программа отрабатывает претензий к ней нет, но эпизодически при переподключении не можем подключиться к контроллеру.
почитав документацию выяснилось что есть ограничение по количеству созданных сокетов, а проверка их если и есть, то она по таймингам совсем не вписывается.
Собственно вопрос: есть ли возможно пример или сможете подсказать как осуществлять контроль за неиспользуемыми сокетами, в проекте который написан на ФБ.
возможно есть какая-то возможность получить список открытых сокетов, пробежаться по ним и закрыть неактивные, или что то в таком духе
я видел пример клиент\сервер, но если честно не могу сообразить как его применить в текущей программе
Вероятно мой вопрос останется без ответа или возможно меня закидют гневными словами типа учи мат часть, но так вышло что это совсем не моя тема и от связи с контроллером зависит стабильность работы приложения. Очень надеюсь на хоть какю-то помощь.
В ПЛК программист должен полностью контролировать использование ресурсов - и если Вы открываете сокет - то и должны его закрыть для переиспользования
Коллеги, добрый день. Делаю попытки оживить пример UDP клиента. Платформа - ПЛК110-60М (старый, не М02). Сеть состоит из ПЛК и ноутбука, на котором Codesys и прочее необходимое. В качестве сервера, с которым связывается UDP клиент, выступает самописная серверная программа, которая при каждой прилетевшей посылке отправляет обратно коротенький ответ. Процесс контролирую в WireShark. Наступаю на грабли в двух местах. Первые: при однократном нажатии на кнопку в визуализации, происходит отправка нескольких посылок (от 2 до 4). Вторые: ответы от сервера не принимаются. Сервер в ответ на каждую принятую посылку отправляет ответ, но клиент ничего не принимает.
Подскажите, куда копать дальше.
ЗЫ. Пример UDP сервера работает в паре с примерно таким же самописным клиентом, данные передаются и принимаются нормально.
Могу посоветовать следующее:
1) После отправки пакета блокировать отправку следующего, пока кнопка не будет отпущена (только по фронту).
2) Проверить куда отправляет ответ сервер (IP и порт клиента). Проверить алгоритм, чтобы проверка на входящий пакет производилась на каждом цикле.
С кнопкой проверю. Сервер отправляет на IP контроллера, на тот порт, с которого пришло сообщение.
Проверил версию с кнопкой. Всё без изменений. при МинВЦ=0 пролетает 4 запроса, при 1 мс - три запроса, при 50мс- 2 запроса.
Добрый день коллеги! ПЛК110-30М2. Пробую запустить экземпляр modbus servera. Клиентом является Лектус. Связи не наблюдаю. Не силен в протоколах. Что не так?
А по 651 норм ?
Лог после запуска в студию.
.. и забудте про эти таски, пока не разберетесь с стандартой работой
Один раз, не знаю с чего, заработало соединение и данные пошли. От чего так произошло не знаю. По трассировке в шаге state = 1; BindSock= false; и все по кругу.