Просмотр полной версии : СПК110: подключение ProfiNet-устройства
diaherni431515
09.02.2023, 16:53
Добрый день.
Мы приобрели у вас СПК110.
У него на борту только ModBus RTU/TCP.
Нам нужно подключить к нему пневмораспределитель SMC с протоколом ProfiNet.
Подскажите, п.ж., каким образом это лучше сделать?
У нас на данный момент есть преобразователи:
1. MOXA 5103
2. IPC GW-7553
3. IPC GW-7662
Есть ли возможность использовать эти преобразователи?
Если их использовать нельзя - то какие преобразователи нужно приобрести?
Или есть какой-то другой способ подключения?
Поэтому хотел бы ещё раз у вас уточнить, ваша компания разрабатывала реальный проект с подключением через преобразователь к СПК110 Profinet IO Device ?
Пневмоостров SMC имеет несколько вариантов интерфейсов , но вот именно MODBUS нет в списке, поэтому нужен будет преобразователь интерфейсов:
65815
Евгений Кислов
09.02.2023, 17:02
Добрый день.
Поэтому хотел бы ещё раз у вас уточнить, ваша компания разрабатывала реальный проект с подключением через преобразователь к СПК110 Profinet IO Device ?
У нас нет опыта использования таких конвертеров.
glazastik
09.02.2023, 17:08
https://www.modbus.org/viewdevice.php?id=1431
вроде как SMC делает под заказ с Modbus
Варианты
HD67603-485-A1, PROFINET / Modbus Slave - Конвертер
только очень внимательно изучить документацию, какой именно нужен, так как версия 67602 Modbus Master. Ну и аналогичные искать
In_Da_Cher_A
09.02.2023, 22:23
Мы приобрели у вас СПК110.
У него на борту только ModBus RTU/TCP.
Нам нужно подключить к нему пневмораспределитель SMC с протоколом ProfiNet.
Подскажите, п.ж., каким образом это лучше сделать?вы купили устройство не проверяя, есть ли у него такой протокол?
даже если ВНЕЗАПНО оказалось, что приофинета нет, то тупологично использовать конвертер протоколов, чем все автоматизаторы во всём мире и занимаются
1. MOXA 5103
2. IPC GW-7553
3. IPC GW-7662по поводу моксы вам отлично ответит техподдержка моксы
по поводу IPC - то же самое, хотя довольно странно спрашивать про 7553 у которого на лбу написано - Профибас
и чисто из опыта - любой конвертер протоколов это сложносочинённая приблуда, которая может работать совсем не так, как думается и просто так из коробки у вас ничего не заработает, поэтому берите и пробуйте сами руками
diaherni431515
10.02.2023, 00:56
Евгений, доброго вам дня.
Учитывая ваш опыт и вовлечённость, неужели вы никогда не пробывали подключить ProfiNet (или ProfiBus?) устройство к вашим контроллерам через Modbus? Вообще, хоть как-то?
Я протестил на виртуальном PLC эти устройства, всё работает, клапана щёлкают.
Проверил некоторые моменты из вашего ролика "Настройка обмена по EtherCAT в CODESYS V3.5", принцип с ProfiNet такой же.
Спасибо вам, вы скидываете в открытый доступ такие обучения, обычно это платно)
diaherni431515
10.02.2023, 01:26
Ясно, спасибо за ссылку
diaherni431515
10.02.2023, 01:37
вы купили устройство не проверяя, есть ли у него такой протокол?
Покупал не я
даже если ВНЕЗАПНО оказалось, что приофинета нет, то тупологично использовать конвертер протоколов, чем все автоматизаторы во всём мире и занимаются
Так вот я и спрашиваю, есть ли у кого реальный опыт использования конвертеров, ибо на сайте производителя НАПИСАНО, но не ГАРАНТИРОВАНО...
поэтому берите и пробуйте сами руками
У меня на столе уже есть за 3 кЕвро подставка для кофе, шеф очень счастлив :confused:....
Евгений Кислов
10.02.2023, 06:27
Евгений, доброго вам дня.
Учитывая ваш опыт и вовлечённость, неужели вы никогда не пробывали подключить ProfiNet (или ProfiBus?) устройство к вашим контроллерам через Modbus? Вообще, хоть как-то?
Пока что не пробовал. Никак.
К сожалению, кроме опыта и вовлечённости у меня есть еще прагматизм.
Чтобы попробовать то, что вы описали - нужен слэйв и конвертер. Они, мягко говоря, не очень дешевые.
Тратить средства компании на потенциальную "подставку для кофе за 3 кЕвро" тоже не особо хочется.
Кроме того - нужно время, а его, как обычно, не хватает.
Другой аспект - до относительно недавних пор мы получали всего 2-3 вопроса в год об интеграции наших контроллеров с устройствами с ProfiNet /ProfiBus.
За прошедший год ситуация изменилась, и запросов по такой интеграции стало существенно больше; мы приняли это к сведению и обдумываем решения, которые, возможно, в будущем сможем предложить нашим клиентам.
И еще один аспект, про который верно заметили выше - подобные конвертеры обычно являются "сложносочинёнными приблудами".
С точки зрения настройки Modbus Master в СПК - у нас есть подробная документация и множество видео.
Думаю, по вашим ProfiNet / ProfiBus слэйвам тоже есть достаточно документации и вы успешно опрашивали их "родными" мастерами.
А вот с конвертерами все сложно.
Если бы я снимал видео на озвученную вами тему - то там было бы минут 5 про Modbus в CODESYS, минут 5-10 про настройку слэйва и минут 30-40 собственно про настройку конвертера.
Т.е. вы неявно предлагаете мне снимать руководство по настройке условной MOXA 5103.
На мой взгляд, более логично, если это сделают сотрудники условной Ниеншанц-Автоматика. Вы написали им такой запрос на их форуме?
Если будет подробное видео или документ о том, как настроить и проверить конвертер, используя какую-нибудь утилиту-Modbus Master для ПК (Modbus Poll, Modbus Tester, MasterOPC Universal Modbus Server - вообще не важно) - то повторить по аналогии эту процедуру с СПК или другим устройством с поддержкой Modbus станет довольно простой задачей.
P.S. - пруф того, что мы не прям уж совсем не в теме.)
65821
In_Da_Cher_A
10.02.2023, 08:54
Покупал не я
Так вот я и спрашиваю, есть ли у кого реальный опыт использования конвертеров, ибо на сайте производителя НАПИСАНО, но не ГАРАНТИРОВАНО...
У меня на столе уже есть за 3 кЕвро подставка для кофе, шеф очень счастлив :confused:....есть
модбас рту в какой-то фирменный АленБредли, не помню уже КонтролНет чтоли
какая-то американская железка какого-то американского производителя
было тупое требование заказчика, чтобы данные переводились напрямую в асутп заказчика в сеть его контроллера в привычных ему внутренних тегах
адская коробка со своими мозгами и своим софтом, которые фактически такой же контроллер, куда забивается таблица адресов модбас, потом таблица адресов второй сети со своими настройками и устанавливается соответствие между таблицами и это всё грузится в железку и там самостоятельно крутится
как это работает на самом деле - не знаю, слававсембогамолимпа, у заказчика задержался ввод его части, и пользуясь каким-то договорными несостыковками, эту часть удалось спихнуть на заказчика, вручить ему железку, диск и свалить с объекта.
через пару лет какие-то другие люди нашли по телефону, выясняли что и как делать с этой коробкой, обещали позвонить, но так и не позвонили, из чего делаю вывод, что всё работает. ещё через пару лет случайный знакомый сказал что объект сдан полностью, и нашу установку он видел в диспетчерской объекта, значит кто-то довёл до конца и железка наверное заработала
аналогично двухпортовая моха модбас рту в тср/ip, опрос каких-то счётчиков газа к контроллеру БернекерРайнер
на видео всё отлично, хоп хоп тыкаем сюда ставим адреса втыкаем провода всё работает
итог - не работает
техподдержка моха долго по телефону обсуждала всё это, кончилось всё тем, что оказывается что-то типа того, что конвертер на самом деле ничего не конвертирует, а просто "транслирует" (не уверен на 100 за точность фразы, но смысл такой)
как он это делает, где что не сработало - хз, где чего несоответствовало - так и не выяснили, настроек в мохе в вебке мало, газовый счётчик тоже был в исполнении "чёрный ящик", после нескольких дней тупого перебора вских вариантов и часов разговоров на телефоне, бросили эти страдания.
проект был не мой, мы отвечали только за Бернекер, поэтому свалили всё на заказчика, который всё это когда-то где-то напроектировал и купил.
вот такой икзпириенс.
из чего сделал для себя вывод - конвертер - зло и гемор, и ставить их в проекты можно только самостоятельного опробования у себя на столе и получения гарантированного результата соединения.
а если без этого никак, то только "умные" устройства, которые фактически такой же контроллер, но цена "преобразования" может себя не оправдать
у вас вроде как всё есть из набора всех компонентов - пробуйте, потом расскажете, как оно
кстати, вот сейчас "висит" с недоделкой один объект, где заказчик также запросил модбас рту в оптику, поставили моха преобразователь интерфейса и "внезапно" уже на объекте выяснилось, что моха работает только в паре сама с собой и надо было покупать ДВЕ моха и ставить их на концах линии. Тоже никто нигде не написал. Теперь бодаемся с заказчиком, кто должен это купить, так как формально мы свою часть сделали полностью, но в итоге результата у заказчика - нет.
In_Da_Cher_A AllenBradley прародитель Ethernet/IP но со своими приколами. Чтобы их прочесть не нужна никакая железка кроме ПК :)
In_Da_Cher_A
10.02.2023, 09:16
In_Da_Cher_A AllenBradley прародитель Ethernet/IP но со своими приколами. Чтобы их прочесть не нужна никакая железка кроме ПК :)если вы такой умный, то чего вы здесь делаете? :D если вы так в курсе, тогда может расскажете, каким кабелем там делается сетка и как она построена?
мне плевать чего он там родитель, я вам рассказал про реальный случай. Железку держал в руках, софт стоит где-то на старом буке.
In_Da_Cher_A просто я их читаю в RapidScada, на руках правда был только MIcroLogix но остальные похожи. Разбирался непосредственно с их протоколами по RS и по Ethernet (по последнему использовал открытый проект с GitHub)
Я знаю, что проектанты часто не думают, закладывая что-то в проекты, либо вынуждены закладывать не думая, так как пролоббировано.
In_Da_Cher_A
10.02.2023, 09:31
In_Da_Cher_A просто я их читаю в RapidScada, на руках правда был только MIcroLogix но остальные похожи. Разбирался непосредственно с их протоколами по RS и по Ethernet (по последнему использовал открытый проект с GitHub)
Я знаю, что проектанты часто не думают, закладывая что-то в проекты, либо вынуждены закладывать не думая, так как пролоббировано.
дарадибога, читайте как хотите. Я же сказал - конвертация была во внутреннюю "сетку" контроллера. А она там на дублированном коаксиале.
на месте автора я бы посмотрел в сторону какого-то ОРС сервера с поддержкой протокола Профинет, обычно это проще получается, чем хардварная конвертация (если конечно конфигурация системы позволит где-то крутится ОРС серваку)
но конечно это костыли и прямое управление приводом может работать с лагами
diaherni431515
10.02.2023, 15:16
Доброго всем дня,
по факту:
1.
Получил офиц. ответ от тех.поддержки МОХА (Ниеншанц-Автоматика) и icpdas => нет таких конвекторов , не получится соединить PLC c modbus-controller <==>конвектор <==> PROFINET-device.
Имеющиеся у меня конвекторы MOXA 5103 и IPC GW-7662 работают в обратную сторону, когда PLC c Profinet-controller <==> конвектор <==> Modbus-device.
2.
Я пробовал настроить IPC GT-7662:
- с PLC c modbus-controller (СПК110) связь есть
- с PROFINET-device (превмоостров) связи нет, т.к. IPC GT-762 так же является по сути PROFINET-device, и в схеме нет PROFINET-controller, а им может быть, как я понял, только PLC (любой)
3.
Из вариантов решения :
а) МОХА предлагает перевести пневмоострова SMC на EtherNet/IP и тогда можно использовать конвектор
Modbus Master <-> EtherNet/IP Adapter MGate 5105-MB-EIP - 1-портовый преобразователь Modbus RTU/ASCII/TCP в EtherNet/IP в промышленном исполнении
Для меня это будет стоить 250 кРуб......
Работать скорее всего будет, или нет.....
б) На этом форуме предложили посмотреть HD67603-485-A1, спасибо за предложение.
Цена около 40 кРуб.
Но принцип такой же как и у МОХА, работать не будет.
Хотя есть куча других, Бренд: ADFWeb, можно пробовать
в) Хочу купить простенький PLC c PROFINET на боту, подключить к нему все имеющиеся PROFINET-device, и уже по отработанной схеме просто транслировать на него сигналы с рабочего PLC:
PROFINET-device => новый PLC c PROFINET-controller <==> конвектор IPC GT-7662 <==>PLC c modbus-controller (СПК110) => modbus-device (In/Out module)
Дело в том, что основной код программы уже пишется на PLC СПК110 и переходить полностью на другой контроллер не очень хочется, нужны будут так же модули вх/вых и HMI.
Хотя перейти на др. PLC можно, СПК110 и модули вх/вых пригодятся в других проектах :)
Можете подсказать недорогой PLC c PROFINET на боту?
Мы применяли на одном из проектов ICP DAS GW-7662 как конвертор из Modbus TCP в Profinet. В связке с СПК107. Никаких особых проблем, кроме ограничения по количеству регистров, не было.
а который HD67602-485-A1 ??
у ADFWEB по данному поводу довольно скудная информация, в том числе и в их инструкциях. Я бы посоветовал выйти через нашу контору, которая их продает и по мучать техподдержку.
По их адаптеру Modbus/SNMP мне в свое время помогли. Ждать правда пришлось, пока итальяшки ответят (наши перенаправляли запросы им)
diaherni431515
10.02.2023, 15:54
Мы применяли на одном из проектов ICP DAS GW-7662 как конвертор из Modbus TCP в Profinet. В связке с СПК107. Никаких особых проблем, кроме ограничения по количеству регистров, не было.
А это уже интересно)
Только это не Modbus TCP в Profinet, а Profinet в Modbus RTU (см фото)
Как настроили soft на ICP DAS GW-7662 ? Случайно не сделали бекап (файл .ini ) ?
На СПК107 создали modbus-master?
65831
diaherni431515
10.02.2023, 16:03
А это уже интересно)
Только это не Modbus TCP в Profinet, а Profinet в Modbus RTU (см фото)
Как настроили soft на ICP DAS GW-7662 ? Случайно не сделали бекап (файл .ini ) ?
На СПК107 создали modbus-master?
65831
Я думаю, что "Profinet в Modbus RTU" означает, что есть сеть Profinet со своим PLC и к ней нужно подсоединить Modbus-устройство.
А вот именно "Modbus TCP в Profinet" как раз означает, что есть сеть Modbus со своим PLC и к ней нужно подсоединить Profinet-устройство.
Ответы от тех.поддержки IPC:
К сожалению у нас нет преобразователя, который мог бы выступать Мастером по Профинет протоколу.
Ответы от тех.поддержки MOXA:
Если ПЛК у Вас является Modbus Master, а пневмораспредилитель это Profinet IO Device, то, к сожалению, мы не сможем предложить преобразователь протоколов под такую задачу. Все имеющиеся у нас преобразователи Profinet <-> Modbus предназначены для обратной задачи, когда Profinet Controller должен опрашивать Modbus устройства.
diaherni431515
10.02.2023, 16:12
Мы применяли на одном из проектов ICP DAS GW-7662 как конвертор из Modbus TCP в Profinet. В связке с СПК107. Никаких особых проблем, кроме ограничения по количеству регистров, не было.
А какое оборудование Profinet вы использовали?
https://www.anybus.com/products/gateway-index/anybus-xgateway/detail/anybus-x-gateway-modbus-tcp-server-profinet-io-device
вот еще один...
а у кого-нибудь есть подобные железяки ProfiNET Io на растерзание с предоставлением доступа? а то вот глянул по поводу библиотеки, что capzap указал, таки наверное можно написать драйвер и получить шлюз в той или иной форме...
diaherni431515
10.02.2023, 16:30
а который HD67602-485-A1 ??
у ADFWEB по данному поводу довольно скудная информация, в том числе и в их инструкциях. Я бы посоветовал выйти через нашу контору, которая их продает и по мучать техподдержку.
По их адаптеру Modbus/SNMP мне в свое время помогли. Ждать правда пришлось, пока итальяшки ответят (наши перенаправляли запросы им)
На оф сайте написано
The HD67602 is a PROFINET / Modbus Master Converter and it allows you to connect some Modbus slaves with an existing PROFINET network (for example a SIEMENS PLC..).
The HD67603 is a PROFINET / Modbus Slave Converter and it allows you to connect a PROFINET network (for example a SIEMENS PLC..) with a Modbus Master (for example a PLC, HMI..) in order to exchange the informations between the networks.
Т.е. как я понял он может соединить 2 сетки Modbus Master и PROFINET network, но сам создать сетку PROFINET network не может, для этого нужен PLC
"к Modbus Master (например, PLC, HMI ..) для обмена информацией между сетями." то есть 603 подключается например к мастер HMI панели, если панель Modbus мастер, то каким еще перепугом она должна понять, что вычитывать из ПЛК того же Siemens ?
говорю же, помучайте их техподдержку. Наши это вроде Крона в Питере...
То есть им банальный вопрос, у меня то-то и то-то, мне надо это прочитать, подойдет что-то из ваших шлюзов....
diaherni431515
10.02.2023, 16:45
[QUOTE=melky;400940]https://www.anybus.com/products/gateway-index/anybus-xgateway/detail/anybus-x-gateway-modbus-tcp-server-profinet-io-device
вот еще один...
https://www.industrialnets.ru/setevye-shljuzy/anybus-x-classic/modbus-tcp-profinet
Шлюз АВ7650 Anybus-X «Ethernet Modbus TCP Slave — Profinet IO Device» предназначен для объединения сетей Modbus TCP и Profinet IO. С обеих сторон мост является ведомым (Slave), т.е. позволяет обмениваться данными устройствам Modbus TCP Master и Profinet Master.
Шлюз Anybus-X перенаправляет в обоих направлениях данные ввода/вывода (I/O-data), обеспечивая полноценный обмен данными между двумя сетями. По умолчанию размер данных I/O принят 20 байт.
Т.е. сам сетки не создаёт, а только соединяет
И стоит 1803€ :( жесть....
пипец... а есть дешевые устройства с ProfiNET? или все дорогие? а то взял бы побаловаться с библиотекой :)
In_Da_Cher_A
10.02.2023, 19:33
..........
Ответы от тех.поддержки IPC: К сожалению у нас нет преобразователя....
Ответы от тех.поддержки MOXA:....мы не сможем предложить преобразователь протоколов под такую задачу. Все имеющиеся у нас преобразователи Profinet <-> Modbus предназначены для обратной задачи, когда Profinet Controller должен опрашивать Modbus устройства.
...Т.е. сам сетки не создаёт, а только соединяет.....вот вот....добро пожаловать в волшебный мир хардварных конвертеров
а есть дешевые устройства с ProfiNET? ну как бы это вам не дешманский модбас для нищебродов, за право играть в лиге Профи надо платить
In_Da_Cher_A речь именно о ProfiNET IO Device устройстве, которое само не создает сеть. может у китайцев есть что?
In_Da_Cher_A
11.02.2023, 14:52
In_Da_Cher_A может у китайцев есть что?я с китаем только начинаю смотреть, хотя некоторые гляжу уже вовсю
не уверен, что даже у китайцев будет что-то, тем более - удалённый ввод/вывод, китайцы сами по себе ничего делать не будут, а про китайские копии сименса я не слышал, но повторюсь - я китай не знаю настолько хорошо
Если себе для опытов, то мне кажется проще найти здесь голову ЕТ200 с профинетом, чем через китай.
Если мне не изменяет память, то Омрон тоже делал какую-то периферию с профинетом, но Омрон я вообще не встречал в работе, поэтому за него ничего не скажу, поэтому если есть кто знает - попытать их.
или посмотреть в сторону всяких датчиков и сенсоров - в промавтоматизации таких было много
На Али этого добра полно. И цены не высокие.
In_Da_Cher_A вот именно голова и не интересна, так как понимаю она может создать сеть, интересует тогда именно IO и можно ли с этим работать без контроллера.
да поглядел уже, от 7-8 тысяч и выше непонятное китайское... мне это точно не надо за свои :) по крайней мере таких задач у меня сейчас нет, чтобы из своего кармана вкладываться...
да поглядел уже, от 7-8 тысяч и выше непонятное китайское... мне это точно не надо за свои :) по крайней мере таких задач у меня сейчас нет, чтобы из своего кармана вкладываться...
Ну тогда покупай в 10 раз дороже и то же за свои. ;)
IVM будет проект чтобы покупать за свои, куплю. Без проекта, нафик оно мне надо? Все же просто, либо когда людям надо, они предоставляют оборудование, в руки или по удаленке, когда никому не надо, то только из спортивного интереса.
IVM будет проект чтобы покупать за свои, куплю. Без проекта, нафик оно мне надо? Все же просто, либо когда людям надо, они предоставляют оборудование, в руки или по удаленке, когда никому не надо, то только из спортивного интереса.
melky, а ты на Али хоть что-то покупал ?
IVM конечно. Правда в некоторых вещах при покупке на Ali нужен глаз да глаз... не всегда понятно, та ли это железка, что нужна или нет. Китайцы они такие, в описании столько напишут, а там.... доски :)
aaaSashaMGGU
31.08.2024, 13:52
Я случайно пробегал мимо и наткнулся на данную тему...
Понадобилось мне тут Codesys 3.5 подружить с контроллером S1200. Нужно было пообмениваться десятком дискретных сигналов. Прикинув, я понял, что проще будет этот самый десяток сигналов перекинуть кабелем. Цена вопроса: модуль ОВЕН, модуль Siemens. Это при условии, что нет свободных каналов. Если б были - было бы вообще бесплатно
Но я не об этом
Я могу предложить Вам вообще условно-бесплатное решение Вашей проблемы. Точнее, всех проблем в любой интерпритации
Решение: Проект на VB.NET (ну, ок, С# для нормальных людей) с бесплатной библиотекой для связи с S7 по профинету и опять же бесплатной библиотекой Modbus
Цена вопроса - комп. Любой. Даже самый древний. Можно мега-компактный стик. Что угодно с Windows
Подозреваю, что можно и на какой-нибудь Raspberry сделать то же самое (библиотеки-то открытые), но вот это уже сам лично не пробовал
И да - всё это я делал. Создавал ModbusTCP-сервер на ПК. И читал с Siemens-а тэги по профинету
Можно и на любом существующем ПК в сети на какой-нибудь простой виртуалке запустить сию самодельную софтину. Тогда вообще будет полностью бесплатно
UPD
Только что подумал: при наличии в проекте панели Siemens-а: вот же он, Windows, прямо по месту. Можно ж ведь и прямо там запустить программу
aaaSashaMGGU бесплатные библиотеки для C# - ссылки? проверенные желательно. И если можно куски кода что да как на C#
Так панель с Windows там наверное CE или обычный Windows? и это, а почему вы в S1200 не включили OPC UA или Modbus? или там доступа к программе не было?
МихаилГл
31.08.2024, 14:54
Вроде профинет и модбас тср это разные вещи, или я чего-то не понимаю? Или имеется ввиду что читали с Сименса по профинету и потом на ПК полученные данные публиковали на модбас сервере?
Тоже было бы интересно посмотреть эти бесплатные библиотека, нужны до зарезу)
Ну вот в nuget есть Modbus.Net Siemens Profinet Implementation, не знаю что такое. И еще там парочка непонятных
aaaSashaMGGU
31.08.2024, 15:43
aaaSashaMGGU бесплатные библиотеки для C# - ссылки? проверенные желательно. И если можно куски кода что да как на C#
Так панель с Windows там наверное CE или обычный Windows? и это, а почему вы в S1200 не включили OPC UA или Modbus? или там доступа к программе не было?
Панели Siemens, те, которые Comfort - там самый обычный Windows то ли 7, то ли 10
Я там прогу по чтению тэгов сименсовских не ставил, я там сканер самодельный подключал по USB :)
Но, если б было нужно, можно было бы и прогу по чтению
Куски кода - в пнд. Исходники на работе...
"а почему вы в S1200 не включили OPC UA"
Проект на тот момент был не мой. Моя задача была - прочитать тэг, записать его себе в БД. Сделал первое, что пришло в голову
Чтение OPC или чтение Профинета в том случае были одинаковой по сложности задачей
aaaSashaMGGU
31.08.2024, 15:45
Вроде профинет и модбас тср это разные вещи, или я чего-то не понимаю? Или имеется ввиду что читали с Сименса по профинету и потом на ПК полученные данные публиковали на модбас сервере?
Тоже было бы интересно посмотреть эти бесплатные библиотека, нужны до зарезу)
читали с Сименса по профинету и потом на ПК полученные данные публиковали на модбас сервере
Да
Но можно и в обратную сторону: читать с модбаса, писать по профинету
aaaSashaMGGU
31.08.2024, 15:46
Ну вот в nuget есть Modbus.Net Siemens Profinet Implementation, не знаю что такое. И еще там парочка непонятных
Не помню, он или нет
Исходник в пнд скину, всё там, на работе лежит...
aaaSashaMGGU
31.08.2024, 16:12
Если кому-то срочно надо, то саму библиотеку я вспомнил: S7netplus
https://www.nuget.org/packages/S7netplus
https://github.com/S7NetPlus/s7netplus
https://github.com/S7NetPlus/s7netplus/wiki
Ну, модбас я вспомню из тысячи: NModbus. Мы с ним много лет рука-об-руку идём :)
https://www.nuget.org/packages/NModbus
Но исходники всё равно в пнд
UPD
ChatGPT. Примерно так я и делал в итоге:
МихаилГл
31.08.2024, 18:08
Вот это пригодится. А то наши программеры думают как с сименсом подружиться.
aaaSashaMGGU
02.09.2024, 09:43
Как обещал, исходники
У меня нет такого проекта, где я одновременно читаю Профинет, а потом создаю Modbus-сервер. Это были всегда разные задачи
1) Чтение S7-1200. Запись мне была не нужна, но, судя по Wiki, просто вместо Plc.Read нужно будет сделать Plc.Write
Imports System.Threading 'Для Mutex-ов
Imports S7.Net 'Для Siemens
'Класс опроса паллетайзера
Public Class ОпросПаллетайзера
'Блокировка доступа к переменным
Public Mutex As Mutex = New Mutex()
'Признак связи c АСУ
Public PrConnectASU As Boolean = True
'Создание потока
Public Поток As New System.Threading.Thread(AddressOf ГлавныйПоток)
'Параметры класса
Public ВсегоПаллетов As New Var
'Разное
Dim TimeBadWork As Integer = 0 'Счётчик неудачных попыток коннекта
Dim PrEndWork As Boolean = False 'Признак конца работы
'Функция, запускаемая один раз, при создании класса
Public Sub New()
'Запуск потока
Поток.Start()
End Sub
'Главный поток
Private Sub ГлавныйПоток()
'Бесконечный цикл
While PrEndWork = False
Try
'Подключаемся
Dim Plc As New Plc(CpuType.S71200, "192.168.231.10", 0, 1) 'Создаем объект подключения к контроллеру Siemens S7-1200 по TCP/IP
Plc.Open() ' открываем соединение
'Читаем
Dim Data1 As Long = Plc.Read("DB1006.DBD44") 'Wrapped_pallet 'Counter for wrapped pallet 'Счётчик паллетов, находящийся в блоке DB1006 и имеющий смещение DBD44 с типом DInt (8 байтов ~ Long в VB)
'Закрываем
Plc.Close()
'Закрываем доступ к защищённым ресурсам потока
Mutex.WaitOne()
'Достоверность
ВсегоПаллетов.Valid = True
'Значение
ВсегоПаллетов.Value = Data1
'Открываем доступ к защищённым ресурсам потока
Mutex.ReleaseMutex()
'Счётчик неудачных попыток коннекта
TimeBadWork = 0
Catch Ex As Exception
'Закрываем доступ к защищённым ресурсам потока
Mutex.WaitOne()
'Достоверность
ВсегоПаллетов.Valid = False
'Открываем доступ к защищённым ресурсам потока
Mutex.ReleaseMutex()
'Ошибка
Dim Err = Ex.ToString 'Только для отладки
TimeBadWork = TimeBadWork + 1 'Счётчик неудачных попыток коннекта
End Try
'Признак связи c АСУ
PrConnectASU = (TimeBadWork < 10)
'Пауза в потоке
System.Threading.Thread.Sleep(5000)
End While
End Sub
'Штатное завершение работы
Public Sub EndWork()
PrEndWork = True 'Признак конца работы
End Sub
End Class
2) ModbusTCP сервер:
using System.Threading; //Потоки
using System.Net; //Работа в сети
using System.Net.Sockets; //Работа в сети
using NModbus; //Modbus
using NModbus.Data; //Modbus
using System;
//Модбас-Сервер
public class Modbus_TCP_Server
{
//Создание потоков
private Thread ЗапускСервера;
private Thread Поток1;
//Сеть
private IModbusSlaveNetwork Network;
//Данные
private ISlaveDataStore dataStore1 = new SlaveDataStore();
private ISlaveDataStore dataStore2 = new SlaveDataStore();
//Разное
private bool PrEndWork = false; //Признак конца работы
//Собственно, вес
public float Ves = 0;
public Modbus_TCP_Server()
{
//Запуск потоков
ЗапускСервера = new Thread(ГлавныйЗапускСервера);
Поток1 = new Thread(ГлавныйПоток1);
ЗапускСервера.Start();
Поток1.Start();
}
//Запуск сервера
public void ГлавныйЗапускСервера()
{
//Порт и IP
int Port = 50300;
IPAddress IP = ((IPAddress[])Dns.GetHostAddresses(Dns.GetHostName()))[1];
//Создаём сервер
TcpListener slaveTcpListener = new TcpListener(IP, Port);
slaveTcpListener.Start();
//Создаём данные
IModbusFactory factory = new ModbusFactory();
Network = factory.CreateSlaveNetwork(slaveTcpListener);
//Создаём Slave-адреса на Modbus-Сервере
IModbusSlave slave1 = factory.CreateSlave(1, dataStore1);
IModbusSlave slave2 = factory.CreateSlave(2, dataStore2);
Network.AddSlave(slave1);
Network.AddSlave(slave2);
//Бесконечный цикл
try
{
Network.ListenAsync().GetAwaiter().GetResult();
Thread.Sleep(Timeout.Infinite);
}
catch (Exception ex)
{
string Test = ex.ToString();
}
}
//Главный поток, где, собственно, происходит обновление данных
public void ГлавныйПоток1()
{
//Бесконечный цикл
while (PrEndWork == false)
{
//Массив для записи на ModbusTCP
ushort[] MassivToModbusTCP = new ushort[11];
//Значения
int Num = 0; //Номер параметра
Num = Num + 1; GetToModbusParamsFromVar(ref MassivToModbusTCP, Num, Ves, true); //Вес
//Запись на Modbus
dataStore1.HoldingRegisters.WritePoints(0, MassivToModbusTCP);
//dataStore2.HoldingRegisters.WritePoints(0, MassivToModbusTCP);
//Пауза в потоке
System.Threading.Thread.Sleep(1000);
}
}
//Функция записи на модбас параметров вара
public void GetToModbusParamsFromVar(ref ushort[] MassivToModbusTCP, int Num, float Var, bool Valid) //Массив Модбаса, номер параметра, Вар для записи на Модбас, Достоверность для записи на Модбас
{
//Массив байтов из значения вара
byte[] TempMas = BitConverter.GetBytes(Var);
//Пишем массив для Modbus-а
MassivToModbusTCP[(Num - 1) * 3 + 0] = (ushort)(TempMas[1] * 256 + TempMas[0]); //0 и 1 байт
MassivToModbusTCP[(Num - 1) * 3 + 1] = (ushort)(TempMas[3] * 256 + TempMas[2]); //2 и 3 байт
MassivToModbusTCP[(Num - 1) * 3 + 2] = (ushort)(Valid ? 1 : 0); //Достоверность
}
//Штатное завершение работы
public void EndWork()
{
PrEndWork = true;
Network.Dispose(); //Прибиваем сеть, из-за чего завершаются все циклы
}
}
3) ModbusTCP клиент
Imports NModbus 'Modbus
Imports NModbus.Data 'Modbus
Imports System.Threading
Public Class Водоподготовка
'Создание потока
Dim Поток1 As New System.Threading.Thread(AddressOf ГлавныйПоток1)
'Блокировка доступа к переменным
Public Mutex As Mutex = New Mutex()
'Признак связи c АСУ
Public PrConnectASU As Boolean
'Главные глобальные внешние параметры нашей АСУТП
Public ПараметрАналог(100) As Double 'Аналоговые датчики
Public ПризнакАварии As Boolean 'Дискретный признак аварии
'Разное
Dim TimeBadWork As Integer 'Счётчик неудачных попыток коннекта
Dim PrEndWork 'Признак конца работы
'Функция, запускаемая один раз, при создании класса
Public Sub New()
'Запуск потоков
Поток1.Start()
End Sub
'Главный поток
Private Sub ГлавныйПоток1()
'Бесконечный цикл
While PrEndWork = False
'Закрываем доступ к защищённым ресурсам потока
Mutex.WaitOne()
Try
'Подключаемся
Dim Factory = New ModbusFactory
Dim TcpClient As New TcpClient("192.168.0.110", 8000)
TcpClient.SendTimeout = 5000 'Таймауты
TcpClient.ReceiveTimeout = 5000 'Таймауты
Dim Master As IModbusMaster = Factory.CreateMaster(TcpClient)
Master.Transport.ReadTimeout = 5000 'Таймауты
Master.Transport.WriteTimeout = 5000 'Таймауты
Dim HoldingRegisterIn1 = Master.ReadHoldingRegisters(0, 0, 100) 'Читаем 100 регистров, первый параметр - адрес ModBus-устройства, второй - адрес регистра, третий - количество читаемых регистров (битов)
Dim HoldingRegisterIn2 = Master.ReadHoldingRegisters(0, 100, 106) 'Читаем 106 регистров, первый параметр - адрес ModBus-устройства, второй - адрес регистра, третий - количество читаемых регистров (битов)
Dim HoldingRegisterIn = HoldingRegisterIn1.Concat(HoldingRegisterIn2).ToAr ray 'Объединим 2 массива
'Параметры
ПараметрАналог(1) = GetSingle(HoldingRegisterIn(6), HoldingRegisterIn(7)) '[Давление В-1 (Из города)]
ПараметрАналог(2) = GetSingle(HoldingRegisterIn(10), HoldingRegisterIn(11)) '[Давление В-1 (В корпуса 1, 2, 3)]
ПараметрАналог(3) = GetSingle(HoldingRegisterIn(14), HoldingRegisterIn(15)) '[Давление В-3 (После перекачного насоса)]
ПараметрАналог(4) = GetSingle(HoldingRegisterIn(184), HoldingRegisterIn(185)) '[Давление В-3 (После насосов УЗВ)]
ПараметрАналог(5) = GetSingle(HoldingRegisterIn(16), HoldingRegisterIn(17)) '[Уровень ёмкости водоподготовка]
ПараметрАналог(6) = GetSingle(HoldingRegisterIn(176), HoldingRegisterIn(177)) '[Уровень ёмкости УЗВ]
ПараметрАналог(7) = GetSingle(HoldingRegisterIn(0), HoldingRegisterIn(1)) '[Температура в помещении]
ПараметрАналог(8) = GetSingle(HoldingRegisterIn(162), HoldingRegisterIn(163)) '[Расход В1. Датчик 10л]
ПараметрАналог(9) = GetSingle(HoldingRegisterIn(164), HoldingRegisterIn(165)) '[Расход В1. Датчик 100л]
ПараметрАналог(10) = GetSingle(HoldingRegisterIn(160), HoldingRegisterIn(161)) '[Расход В1. Суммарный]
ПараметрАналог(11) = GetSingle(HoldingRegisterIn(166), HoldingRegisterIn(167)) '[Расход В3. Датчик 100л]
ПараметрАналог(12) = GetSingle(HoldingRegisterIn(72), HoldingRegisterIn(73)) '[Расход В3. Суммарный]
ПараметрАналог(13) = GetSingle(HoldingRegisterIn(74), HoldingRegisterIn(75)) '[Расход УЗВ. Датчик 10л]
ПараметрАналог(14) = GetSingle(HoldingRegisterIn(76), HoldingRegisterIn(77)) '[Расход УЗВ. Датчик 100л]
ПараметрАналог(15) = GetSingle(HoldingRegisterIn(78), HoldingRegisterIn(79)) '[Расход УЗВ. Суммарный]
'Совокупная авария
ПризнакАварии = Val(Strings.Mid(DecToBin(HoldingRegisterIn(150)), 8, 1)) 'Адрес 150.08. Совокупная авария
'Счётчик неудачных попыток коннекта
TimeBadWork = 0
Catch Ex As Exception
Dim Err = Ex.ToString 'Только для отладки
TimeBadWork = TimeBadWork + 1 'Счётчик неудачных попыток коннекта
End Try
'Признак связи c АСУ
PrConnectASU = (TimeBadWork < 10)
'Открываем доступ к защищённым ресурсам потока
Mutex.ReleaseMutex()
'Пауза в потоке
System.Threading.Thread.Sleep(2000)
End While
End Sub
'Штатное завершение работы
Public Sub EndWork()
PrEndWork = True
End Sub
End Class
4) ModbusCom клиент (Здесь я кучу всего удалил для примера, так как в классе было много ещё чего лишнего, к модбасу не относящееся)
using System.Collections.Generic;
using System.Text;
using System.Diagnostics;
using System.Threading;
using System.IO.Ports;
using System.Windows.Forms;
using System.Collections;
using System.IO;
using System;
//Работа с ModBus
using NModbus; //Modbus
using NModbus.Data; //Modbus
using NModbus.Serial; //Modbus
namespace AkvaTex
{
public class SignalPro
{
//Отдельный поток на опрос модбаса (ОВЕНовский модуль)
public void ThreadNewModBus()
{
while (!m_stop) //Действия циклически продолжаются до остановки потока
{
//Проверяем признак имитации, чтобы не трогать модбасы, если включена имитация
if (fImitator)
{
//Тут ничего нет. Пока что...
}
else
{
//Пишем выходы на ОВЕНовский модуль
try
{
if (!sPortModBus.IsOpen)
{
sPortModBus.PortName = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("Software\\Akvatex_05_2012\\").GetValue("comPortTemperature").ToString();
sPortModBus.BaudRate = 9600;
sPortModBus.DataBits = 8;
sPortModBus.Parity = System.IO.Ports.Parity.None;
sPortModBus.StopBits = System.IO.Ports.StopBits.One;
sPortModBus.ReadTimeout = 500;
sPortModBus.Open();
}
var Factory = new ModbusFactory();
IModbusMaster ModbusMaster = Factory.CreateRtuMaster(new SerialPortAdapter(sPortModBus)); //Создаём Модбас-Мастера
ModbusMaster.Transport.ReadTimeout = 500; //Таймауты
ModbusMaster.Transport.WriteTimeout = 500; //Таймауты
ushort[] RegistersToModbus = { 0 }; //Массив регистров для записи на Мобдас. Именно массив, а не отдельный регистр, т.к., модуль, отчего-то не хочет работать по команде 6 (WriteSingleRegister), а хочет работать только по команде 16 (WriteMultipleRegisters)
RegistersToModbus[0] = (ushort)(RegistersToModbus[0] + 001 * komPK_240_1); //ПК-240/1
RegistersToModbus[0] = (ushort)(RegistersToModbus[0] + 002 * komPZ_222_2); //ПЗ-222/2
RegistersToModbus[0] = (ushort)(RegistersToModbus[0] + 004 * komPK_203); //ПК-203
RegistersToModbus[0] = (ushort)(RegistersToModbus[0] + 008 * 0); //Свободный
RegistersToModbus[0] = (ushort)(RegistersToModbus[0] + 016 * 0); //Свободный
RegistersToModbus[0] = (ushort)(RegistersToModbus[0] + 032 * 0); //Свободный
RegistersToModbus[0] = (ushort)(RegistersToModbus[0] + 064 * 0); //Свободный
RegistersToModbus[0] = (ushort)(RegistersToModbus[0] + 128 * 0); //Свободный
ModbusMaster.WriteMultipleRegisters(2, 50, RegistersToModbus); //Пишем на модбас: адрес, регистр, значение
ModbusMaster.Dispose();
sPortModBus.Close();
}
catch
{
}
}
//Пауза потока
Thread.Sleep(100);
}
}
}
}
Powered by vBulletin® Version 4.2.3 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot