PDA

Просмотр полной версии : Modbus Master как и что?



gOsToFf
14.01.2020, 00:47
Приветствую вас, о мудрые форумчане.

К сожалению, только начинаю знакомиться со средой CoDeSys. В целом разобрался в большей части вопросов для себя, однако ModBus остается чем-то страшным в ПЛК.
Причем не сам протокол, а именно в CoDesys.

Есть у меня следующий набор
1) ПЛК-160 [M02]
2) Устройство modbus slave( это не ПЛК ). Подключение по TCP-RTU. Например будет у него slaveID: 11

И есть задача управление. Собственно реализация на других языках следующая:

1) Надо авторизоваться. Для этого в адрес 0xD002 я записываю параметры WriteMultipleRegisters {0x65, 0x70, 0x4D, 0x20, 0x45, 0x43 } с длинной 3 соотвественно. Это некая базовая авторизация на устройстве, дабы в последствии разрешить изменение параметров
2) Далее я записываю уже значение конкретных параметров, к примеру берем адрес 0xD001 и делаю WriteSingleRegister с записью например 100.

Так вот, к сожалению я так и не разобраться как же мне это реализовать в CoDeSys.
В целом язык не важен, но если это будет ST наверно самое оптимальное.

Так я уже и видосики посмотрел вроде.
И почитал это:
https://owen.ru/forum/attachment/5/7/9/9/1/23301.attach
https://owen.ru/forum/attachment/6/5/8/8/0/24841.attach

да и вроде много чего еще. Но увы(

krollcbas
14.01.2020, 02:31
Ну протокол сам Modbus он без авторизации, а если с авторизацией, то не называйте Modbus, добавьте "2" или "+".

Если бы мне дали такую задачу, то вначале реализовал бы этот алгоритм авторизации - ищите материалы работы с COM
После авторизации подключал бы библиотеку опроса

Филоненко Владислав
14.01.2020, 10:24
И в чем смысл такой авторизации? Канал как был открытый так и остался. Берешь снифер, смотришь паттерн "авторизации" и вуаля, ты в системе. Доступно даже гопникам.
Обычно посылают случайный паттерн, его на другой стороне по известному алгоритму и секретному ключу преобразуют и обратно отдают. Так обеспечивается невзламываемость прослушкой. Ну если алгоритм нормальный а не 3 XOR... Хотя и 3 XOR от гопников защищает.
Далее контроль канала на лишние пакеты и периодическая (раз в 1-5 секунд) переавторизация. А лучше уже секретный канал делать, с шифрацией.

Филоненко Владислав
14.01.2020, 13:04
Защита через тайну в средние века ещё как-то работала. В 21 веке это моветон.

gOsToFf
14.01.2020, 14:25
К сожалению данную авторизацию придумал не я, так что как там работает так и работает. Я бы вообще отключить будь такая возможность, ибо физически все это дело будет сильно отрезано от цивилизации.

А по библиотекам если честно до конца все равно не совсем понятно стало, как запись multi делать. на эмулятор приходит совсем не то что отправляю

gOsToFf
14.01.2020, 14:32
К сожалению данную авторизацию придумал не я, так что как там работает так и работает. Я бы вообще отключить будь такая возможность, ибо физически все это дело будет сильно отрезано от цивилизации.

А по библиотекам если честно до конца все равно не совсем понятно стало, как запись multi делать. на эмулятор приходит совсем не то что отправляю.
Кто подскажет, как правильно сформировать переменную для данной последовательности {0x65, 0x70, 0x4D, 0x20, 0x45, 0x43 }?

krollcbas
14.01.2020, 15:00
Приятель, просто нужно было здесь погуглить. "Работа с компортом", то есть работа с библиотеками и без конфигуратора.

https://yadi.sk/d/h0vy081ud1aBfQ

Научитесь хоть какую-то телеграмму отправлять, а потом расширяйте свой успех.

melky
14.01.2020, 15:00
у вас еще должен быть адрес, команда 0х10, стартовый регистр, количество регистров 3, количество байт ну контрольная сумма

01 10 D0 02 00 03 06 65 70 4D 20 45 43 C2 70

Part of Data Package Description Value
01 Slave address 0x01 (1)
10 Function code 0x10 (16) - Write Multiple Registers
D0 02 Starting address 0xD003 (53251)
00 03 Quantity 0x0003 (3)
06 Byte count 0x06 (6)
65 70 4D 20 45 43 Registers value 0x6570 (25968), 0x4D20 (19744), 0x4543 (17731)
C2 70 CRC 0xC270 (49776)

Что то типа того

petera
14.01.2020, 15:16
К сожалению данную авторизацию придумал не я, так что как там работает так и работает. Я бы вообще отключить будь такая возможность, ибо физически все это дело будет сильно отрезано от цивилизации.

А по библиотекам если честно до конца все равно не совсем понятно стало, как запись multi делать. на эмулятор приходит совсем не то что отправляю.
Кто подскажет, как правильно сформировать переменную для данной последовательности {0x65, 0x70, 0x4D, 0x20, 0x45, 0x43 }?
Дебри какие-то.
Используйте в конфигурации "String output module State, заносите туда строку
'epM EC'; (*Это и есть 0x65, 0x70, 0x4D, 0x20, 0x45, 0x43 *) длина - 3 регистра
командуете в программе в нужный момент для отправки

46666 46667

И все дела!

gOsToFf
15.01.2020, 15:36
Дебри какие-то.
Используйте в конфигурации "String output module State, заносите туда строку
'epM EC'; (*Это и есть 0x65, 0x70, 0x4D, 0x20, 0x45, 0x43 *) длина - 3 регистра
командуете в программе в нужный момент для отправки

46666 46667

И все дела!

Грациозно, идеально и даже работает :)
Спасибо!

AVit
18.01.2020, 15:46
Добрый день, вопрос маленько не по этой теме, но я почему то не могу создать новую тему...

Вопрос следующий: Необходимо с ПЛК110 писать регистры модбас по адресам с 62А81h по 62В80h. Стандартные средства не поддерживают такой большой адресации, библиотека Modbus.lib тоже.
Существуют еще какие то решения?

AVit
27.01.2020, 17:08
пишите в адреса 16#1000 до 16#10FF 16 функцией

To capzar: Не понял Вас, я могу писать адреса 16#1000, но мне надо 16#62А81. И про 16 функцию то же не могу сообразить, это по описанию запись с использованием маски...
Напишите чуть подробней плиз.

AVit
01.02.2020, 19:17
То capzar: Квест я не осилил, но вы натолкнули меня на правильный путь и я нашел ответ в книге "ПЛК DELTA серии DVP, протокол связи версия 1.0". Большое спасибо, теперь я знаю как подружить ПЛК110 и PLC DELTA DVP.