PDA

Просмотр полной версии : ПЛК-200. Modbus TCP/IP + C#



PPSTAsu
07.12.2022, 15:14
Здравствуйте. Возникла такая проблема. Подключение: ПЛК-200-2 к ПК по Modbus tcp/ip. На ПК используем Visual Studio, на C# с библиотекой "Modbus.Device". Делаем запросы перебором переменных (запрос следующий: master.WriteSingleRegister(1, i, i); и master.ReadHoldingRegisters(1, i, 1)[0]);). На чтение/запись 1000+ переменных (word) выходит 10+ секунд. Можно ли как-то ускорить чтение/запись или это нормальная для данного протокола скорость?
Аналогично до этого работали с сименс s300, связь была реализована посредством протокола Ethernet (используя Visual Studio, на C# с библиотекой "sharp7"). Читали ~2000 байт за 200мс. При чтении данных мы указывали размер посылки, например 3000 байт. И считывали эту область с ПЛК. А потом раскладывали по типу переменных. Насколько я понимаю, пользуясь библиотекой "Modbus.Device", размер посылки ограничивается 1 байтом?

melky
07.12.2022, 15:33
читайте группы регистров сразу, что за читать по одному регистру в цикле ?

a86ndrew
30.04.2023, 11:10
Здравствуйте!
У меня есть вопрос касаемо темы: я также, как и https://owen.ru/forum/member.php?u=129483, работаю с ПЛК200, использую Visual Studio вместе с C#, только другую библиотеку, "EasyModbus", и также происходит работа по протоколу Modbus TCP/IP, и вот я хотел бы узнать - где можно взять карту регистров Modbus для ПЛК200?

Евгений Кислов
30.04.2023, 11:19
Здравствуйте!
У меня есть вопрос касаемо темы: я также, как и https://owen.ru/forum/member.php?u=129483, работаю с ПЛК200, использую Visual Studio вместе с C#, только другую библиотеку, "EasyModbus", и также происходит работа по протоколу Modbus TCP/IP, и вот я хотел бы узнать - где можно взять карту регистров Modbus для ПЛК200?

Добрый день.
Карту регистров формирует разработчик проекта для ПЛК200.

kondor3000
30.04.2023, 11:29
Здравствуйте!
У меня есть вопрос касаемо темы: я также, как и https://owen.ru/forum/member.php?u=129483, работаю с ПЛК200, использую Visual Studio вместе с C#, только другую библиотеку, "EasyModbus", и также происходит работа по протоколу Modbus TCP/IP, и вот я хотел бы узнать - где можно взять карту регистров Modbus для ПЛК200?

Для ПЛК мастера, вы сами задаёте нужные адреса регистров. Для ПЛК слейва, адреса всегда начинаются с 0.

a86ndrew
30.04.2023, 11:54
А вот такого, как например с панелью оператора ОВЕН СП307, где эта карта прописана прямо в руководстве пользователя, ничего подобного получается для ПЛК200 нету?
Я попробую объяснить подробнее: У меня есть программа на языке C#, которая считывает необходимые данные с конкретных ячеек и выводит их на форму, и поскольку я знаю конкретные регистры, где и что хранится, я знаю как формировать код на чтение, а в данном случае, даже если я смогу считать все регистры на ПЛК200, то как я пойму, что у меня за данные на руках? Если уж карты регистров нету для необходимой мне железки, то как тогда можно решить мою задачу?

kondor3000
30.04.2023, 12:12
А вот такого, как например с панелью оператора ОВЕН СП307, где эта карта прописана прямо в руководстве пользователя, ничего подобного получается для ПЛК200 нету?

Разница только для Панели слейва, там адреса панели начинаются с 256, а не с 0.
А с 0 по 255 регистр отведены под системные.

Евгений Кислов
30.04.2023, 12:15
А вот такого, как например с панелью оператора ОВЕН СП307, где эта карта прописана прямо в руководстве пользователя, ничего подобного получается для ПЛК200 нету?

Там прописана только карта системных регистров.
Разработчик конкретного проекта для панели сам формирует карту регистров для своего проекта.
В ПЛК200 системных регистров, доступных по Modbus, нет.

a86ndrew
30.04.2023, 13:12
А как тогда можно решить мою задачу?
Вот у меня есть кусок кода, который с панели берет данные и показывает в трех разных группах - регистры PSB, PSW и PFW.
bool[] reg1_PSB_PO = modClient.ReadCoils(256, 69);
int[] reg1_PSW_PO = modClient.ReadHoldingRegisters(256, 222);
int[] reg1_PFW_PO = modClient.ReadHoldingRegisters(4096, 131);
И сейчас мне нужно сделать, по сути, тоже самое, только с ПЛК200 - вытащить системную информацию с него похожим образом. И что тогда может мне помочь, если про регистры я знаю только то, что они с 0 до 256?

Евгений Кислов
30.04.2023, 13:17
А как тогда можно решить мою задачу?
Вот у меня есть кусок кода, который с панели берет данные и показывает в трех разных группах - регистры PSB, PSW и PFW.
bool[] reg1_PSB_PO = modClient.ReadCoils(256, 69);
int[] reg1_PSW_PO = modClient.ReadHoldingRegisters(256, 222);
int[] reg1_PFW_PO = modClient.ReadHoldingRegisters(4096, 131);
И сейчас мне нужно сделать, по сути, тоже самое, только с ПЛК200 - вытащить системную информацию с него похожим образом. И что тогда может мне помочь, если про регистры я знаю только то, что они с 0 до 256?

Начните с этого видео:
https://youtu.be/Zq1G_Njl5cw

kondor3000
30.04.2023, 13:53
А как тогда можно решить мою задачу?
Вот у меня есть кусок кода, который с панели берет данные и показывает в трех разных группах - регистры PSB, PSW и PFW.
bool[] reg1_PSB_PO = modClient.ReadCoils(256, 69);
int[] reg1_PSW_PO = modClient.ReadHoldingRegisters(256, 222);
int[] reg1_PFW_PO = modClient.ReadHoldingRegisters(4096, 131);
И сейчас мне нужно сделать, по сути, тоже самое, только с ПЛК200 - вытащить системную информацию с него похожим образом. И что тогда может мне помочь, если про регистры я знаю только то, что они с 0 до 256?

Системные до 255, с 256 уже обычные регистры, ваш код считывает обычные биты, начиная с PSB256 адреса , регистры с PSW256 адреса
и энергонезависимые с PFW4096 адреса