PDA

Просмотр полной версии : Помощь с Owen МК210 + C#



vb2005
01.08.2022, 18:42
Добрый день. Прошу помощи по взаимодействию через Ethernet с C#.

Через EasyModbus соединение проходит, но любая команда выдаёт ошибку:

EasyModbus.Exceptions.FunctionCodeNotSupportedExce ption: "Function code not supported by master"
Если есть у кого примеры взаимодействия, буду очень признателен!

Код, который выдает ошибку:



EasyModbus.ModbusClient m = new ModbusClient("10.10.69.101", 502);
m.Connect();
m.WriteSingleCoil(5, true);

melky
01.08.2022, 18:53
а коилсы то есть в ПЛК ? ну как бы "Код функции, не поддерживаемый мастером" сам то Изи Modbus вам отвечает

vb2005
01.08.2022, 19:04
а коилсы то есть в ПЛК ? ну как бы "Код функции, не поддерживаемый мастером" сам то Изи Modbus вам отвечает

А можете объяснить что нужно сделать прям совсем дураку? У меня есть МК210 c заводскими настройками, мне нужно научиться писать в него цифровые сигналы по TCP. Я поставил через nuget EasyModbus, получил IP/Port самого Owen, что еще требуется для того, чтобы считать значения выходов. Уже неделю пытаюсь его победить

melky
01.08.2022, 19:08
Так посмотреть документацию на МК210 в первую очередь, какие команды он принимает. Проверить их например любой Scada системой, что выход срабатывает, а потом уже мучать ваш код...
Вам EasyModbus выдал исключение, вот и поймите, почему он его выдает...

з.ы. у меня нет опыта взаимодействия через Изи, я просто использую Scada систему если это относится к Modbus и не делаю себе мозг...

vb2005
01.08.2022, 19:32
Scada - это прекрасно. Не понятно только почему производитель не представляет никаких библиотек с готовыми решениями для своих контроллеров. Приходится раскуривать документацию, modbus, tcp-сокеты для того, чтобы всего лишь отправлять и посылать цифровой сигнал на порт... (Прям как с отечественными автомобилями. Недостаточно просто купить и научиться ездить, нужно ещё понять, почему он не заводится)
Решения с форума - не помогают, надо делать что-то ещё, очевидное для всех остальных, но не очевидное для меня...

melky
01.08.2022, 20:45
vb2005 МК210 это же модуль вывода? карта регистров в документации есть? какие претензии к Овен? он вам должен код на разных языках и разных погремушках предоставить?

Cs-Cs
01.08.2022, 22:15
раскуривать документацию, modbus, tcp-сокеты
Шо-то я не понял. Даже для дурацкого Ardiuno - и то есть десяток библиотек Modbus. Взял - и пользуешься, и всё.
А если не уметь пользоваться и не понимать что такое регистр и прочее - ну так это надо учиться, а не что-то там раскуривать.

vb2005
01.08.2022, 22:21
vb2005 он вам должен код на разных языках и разных погремушках предоставить?

Ну, как бы да, это нормальная практика. В основном работаю с промышленными сенсорами (Usb/Ethernet) для каждого есть API под C++/C# + набор примеров по взаимодействию с ними. Изучать карту регистров, курить документацию ради того, чтобы изобрести велосипед, который уже неоднократно изобретался по меньшей мере странно в 21 веке. И очень бы хотелось увидеть реальные примеры, которые будут работать. Но, видимо, тут не принято выкладывать решения из серии "Возьми и используй", а все сводится к тому, что надо самому с нуля описать Modbus, перечитать кучу документации и изобрести точно такое же API, как и десятки других разработчиков, потому, что производитель не считает нужным выкладывать это в открытый доступ...

melky
01.08.2022, 22:33
vb2005 вы таки не поняли, у прибора Modbus, ему не нужны примеры API на разных языках... берете спецификацию протокола и пишите, или берете готовые решения с Modbus, коим является EasyModbus и пишите.
В данном случае производитель вам ничего не обязан, потому что встроил в прибор Modbus, в отличии от промышленных сенсоров, где требуются примеры...

Cs-Cs
01.08.2022, 22:46
vb2005 Так ModBus - это и есть, образно говоря, API. Готовое и стандартное.
Оно позволяет читать и писать регистры. А сами регистры (их номера, назначения) - уникальны для каждого устройства.
Если перевести на WinAPI (я прогал на VC++6 давно), то это будет что-то типа функций SetWindowStyle(Ex) с кучей флагов, назначениме которых описано в документации на винду. Вот здесь - то же самое: открываем документацию на модуль и видим что-то типа (беру из головы): "Данные хранятся в виде битовой маски в регистре 1426, чтение командами 0х03 и 0х10 (любая)".
Дальше открываем либу и делаем что-то (образно) ModbusReadRegister(hDevice, 0x03, 1426) - и всё.

AlexandrGr
02.08.2022, 12:49
А можете объяснить что нужно сделать прям совсем дураку?
Вам уже ответили. Читать документацию на модуль. Там написано какие функции Modbus поддерживаются. Запись Coil не поддерживается.

vb2005
02.08.2022, 13:26
Можно хоть какой-то рабочий пример? Прочитать и записать значения с реле. Любой язык программирования. МК210. Сотни человек это уже делали. Неужели так сложно скинуть код? Или тут кодом делиться запрещено? И вся помощь и поддержка сводиться к "Иди читай документацию"??? Что же все душные то такие? Человек попросил скинуть рабочий код или поправить существующий.

melky
02.08.2022, 13:43
vb2005 еще раз для неразумных, у данного прибора Modbus, вам надо на программистких форумах искать как работать с Modbus. Тут производитель вам мало чем поможет или должен помогать... А все, что связано с Modbus указано в документации на прибор.

з.ы. и прежде чем записывать при помощи ИзиМодбас хотя бы им же прочитали один регистр из прибора....

Евгений Кислов
02.08.2022, 13:45
Можно хоть какой-то рабочий пример? Прочитать и записать значения с реле. Любой язык программирования. МК210. Сотни человек это уже делали. Неужели так сложно скинуть код? Или тут кодом делиться запрещено? И вся помощь и поддержка сводиться к "Иди читай документацию"??? Что же все душные то такие? Человек попросил скинуть рабочий код или поправить существующий.

Пример на языках программирования ST и CFC для IDE CODESYS V3.5 SP17 Patch 3:
https://ftp.owen.ru/CoDeSys3/21_Examples/01_3.5.11.5/03_Modbus/Example_OwenCommunicationModbusTcpMaster_3517v1.pr ojectarchive

AlexandrGr
02.08.2022, 13:55
Во время обмена по протоколу Modbus модуль проверяет соответствие запросов спецификации Modbus. Не прошедшие проверку запросы игнорируются модулем. Запросы, в которых указан адрес, не соответствующий адресу модуля, также игнорируются.

Далее проверяется код функции. Если в модуль приходит запрос с кодом функции, не указанной в таблице, возникает ошибка MODBUS_ILLEGAL_FUNCTION.

Список поддерживаемых функций
Название функции Код функции Описание функции
MODBUS_READ_HOLDING_REGISTERS 3 (0x03) Чтение значений из одного или нескольких регистров хранения
MODBUS_READ_INPUT_REGISTERS 4 (0x04) Чтение значений из одного или нескольких регистров ввода
MODBUS_WRITE_SINGLE_REGISTER 6 (0x06) Запись значения в один регистр
MODBUS_WRITE_MULTIPLE_REGISTERS 16 (0x10) Запись значений в несколько регистров
MODBUS_READ_FILE_RECORD 20 (0x14) Чтение архива из файла
MODBUS_WRITE_FILE_RECORD 21 (0x15) Запись архива в файл

Используйте функцию WriteSingleRegister

vb2005
02.08.2022, 14:54
Спасибо всем душным за помощь. Очень полезные советы (сарказм).

Проблема была в том, что требуется использовать не WriteSingleCoil, а WriteSingleRegister (за подсказку спасибо AlexandrGr). И использовать номера регистров 0x33 и 0x1D6. Собственно это все, что нужно, чтобы данный код заработал. В чем проблема была это подсказать - не понятно.
Для тех, кто не хочет изобретать велосипед и общаться с максимально душными людьми - вот готовое решение для МК210. Мне не жалко. Будем ломать сложившиеся устои на этом форуме.

AlexandrGr
02.08.2022, 15:05
Вам сразу сказали читайте документацию. Почему другие должны делать это за вас?

melky
02.08.2022, 16:38
AlexandrGr а вы за меня еще и есть будете? - АГА! :)

vb2005 готовое решение это применение Scada системы где все из коробки и не надо программировать Modbus... это же не специфические протоколы, где реально надо писать код...

Cs-Cs
02.08.2022, 23:05
vb2005 В том, что мы не знаем что вы хотите.
Привожу пример такой. Например, вызывается функция CreateFileEx() из WinAPI, и вы нас всех ненавидите за то, что мы не можем подсказать название имени файла (L"FileName"). Так мы ж не знаем, какой вам файл надо открыть или создать...
так и тут.

vb2005
02.08.2022, 23:44
Я написал название конкретного модуля, описал конкретную задачу. Скинул пример, который должен был реализовывать указанную задачу, но он ее не реализовывал. Спросил помощи, почему он может не работать. В ответ никакой конкретики. И пример с именем файла тут максимально не уместен. Просто кому-то хочется языком почесать, вместо того, чтобы реально помочь. За то время, пока господин melky расписывал свои трактаты, можно было написать 2 строки, которые позволяли бы читать и записывать значения. Для этого и нужны форумы, чтобы людям помогать. И когда ко мне обращаются с помощью, я не отправляю читать Страуструпа, а подсказываю как можно проблемы решить реальными примерами. Тем более, что спрашиваю я не что-то уникальное, а вполне реальную задачу с которой наверняка многие уже сталктвались и знают как ее решить

Cs-Cs
03.08.2022, 08:20
vb2005 Нет уж. Я, как программист со стажем (до хипстеров и торопыг) придерусь. Задачу надо ставить правильно.
Если задача звучала про "...как программируют под Modbus, дайте примеры" - то это про Modbus без конкретики
А если бы задача ставилась "...напишите мне пример под мой модуль IO, чтобы читал это и это значение" - то это за деньги/донаты/плюшки
А если бы вопрос звучал бы "...я понял, как обращаться к устройствам по Modbus, использую такую-то библиотеку [ссылка на документацию], как мне при помощи этой библиотеки считать то-то и то-то с моего модуля IO" - то все сразу и помогли бы.
Чётчее надо.

AlexandrGr
03.08.2022, 10:54
За то время, пока господин melky расписывал свои трактаты, можно было написать 2 строки, которые позволяли бы читать и записывать значения.
Дак melky вам практически мгновенно дал правильный ответ в одну строку.
а коилсы то есть в ПЛК ? ну как бы "Код функции, не поддерживаемый мастером" сам то Изи Modbus вам отвечает

melky
03.08.2022, 11:05
vb2005 когда кто-то обращается на форум за помощью, предполагается, что ответ будет от знатоков вопроса, как вы заметили, знатоков по EasyModbus тут нет ну или на вашу печаль никто из них не находился на форуме...
Но так как вопрос был по Modbus, то сперва, с учетом ответа вашего кода, надо было "самостоятельно" проверить документацию на модуль, а не заставлять это делать других....

а то я так тоже иногда на форумах вопросы задаю по программированию, просмотров за тыщу и ни одного ответа, но при этом параллельно ищу решения.... и з.ы. на форумах спецы по программированию не сидят или у нас в России программеров очень мало.

AlexandrGr
03.08.2022, 12:07
В данном случае не важно EasyModbus или SCADA. Важно что и куда писать в конкретный контроллер.

Gena72
26.08.2024, 15:50
Нужно написать мастер (Modbus-RTU) на C# для Windows.
Какую библиотеку использовать?

capzap
26.08.2024, 15:55
Нужно написать мастер (Modbus-RTU) на C# для Windows.
Какую библиотеку использовать?

здесь поищите на вкус https://www.modbus.org/tech.php

melky
26.08.2024, 16:17
Gena72 попробуйте в nuget поиск сделать, наверняка там этого добра.... EasyModbus тот же, 265 тысяч скачиваний.

Gena72
26.08.2024, 20:16
capzap, melky
Ребята, благодарю..Собираю информацию. Неделя, две- начну писать проект.

melky
26.08.2024, 22:42
Gena72 один вопрос - нафига ? :) что сподвигает писать с нуля то, что написано до вас в смысле?

Собственно вопрос к чему, почему не взять готовое решение, например RapidScada (если идет речь о C#) и там уже дописать недостающее, и при этом не заниматься писаниной, связанной с Modbus.

Gena72
27.08.2024, 15:31
Посмотрю вариант со скадами. В моем случае, на шине будет только один slave. Плюс решение (ПК-пр.реле) клонируется. Пока думаю, будет проще написать и эксплуатировать master в виде exe файла.

melky
27.08.2024, 15:44
Gena72 в RapidScada проект клонируется легко. Требуется только установка самой Scada хоть на Windows хоть на Linux.
Паровозом получаете БД с хранением данных, WEB интерфейс без ограничения клиентов ну и возможность расширения.

ну если вам выбор языка важен C#. + открытый код ядра и возможность писать драйвера устройств, модули, плагины (тут правда еще html, css и JS требуется к C# (ASP.NET)) я пока плагины не осилил, даже не разбирался.

Gena72
14.04.2025, 11:27
В качестве отчета (статистики): проект завершен. Реализовал мастера на EasyModbusTCP.NET (.NETFramework,Version=v4.8). Slave: ПР100-24.1208.03.1