PDA

Просмотр полной версии : Modbus master на Delphi 7 с исходниками.



kandiral
06.05.2012, 05:43
Реализовал протокол modbus tcp на сокетах в Delphi 7.

Проверял только на plc100kl.

В архиве тестовый проект под plc100kl и программка для примера использования.

В случае выявления багов пишите, буду исправлять.

--------------------------------

Свой код по работе с протоколом Modbus модернизировал, и это уже не одна библиотека, а набор компонентов, которые дают возможность связываться по протоколу Modbus (RTU/ASCII/TCP) как по сети, так и через COM порт.

Пример использования можно посмотреть тут:
https://kandiral.ru/delphi/primer_peredachi_dannyx_po_protokolu_modbus_na_del phi.html

capzap
06.05.2012, 09:30
самое главное, непонятно как работает Ваша запись, введя значение я не должен "париться" чтоб данные передались. А в Вашей проге я так и не разобрался, то ли запись ждет своей очереди, то ли надо на кнопку постоянно жать, чтоб поймать свободный промежуток времени для передачи. Такое положение вещей не даст Вашей программе использоваться в реальной работе.
Далее Ваша прога жестка привязана к конкретному проекту, ну и кому она после этого нужна кроме Вас :)
И не лучший вариант, фиксировать время опроса, было бы лучше еслиб оно задавалось в настройках
Последнее, это строить организацию памяти слейва таким образом, чтоб можно было принять все регистры разом, а потом уже в программе раскидать их по своим переменным, разгрузите сеть и появиться больше времени на прерывания, типа записи параметров в слейв

ЗЫ про порядок передачи байт, у Вас как то непроработан вопрос

kandiral
06.05.2012, 14:44
Я предполагал использование библиотеки в других программах.

Вложенная программа приведена для демонстрирования использования библиотеки, и она явно привязана к конкретному проекту.

Запись должна происходить практически моментально, в примере это должно происходить примерно за 140ms.

vojt
13.05.2012, 22:06
Тема интересная. Может есть какое-то описание по данному коду в Delphi?

kandiral
21.05.2012, 22:32
Тема интересная. Может есть какое-то описание по данному коду в Delphi?


Пока нет времени делать описание. Возможно в будущем.

В примере все видно. Я думаю можно разобраться.


Выкладываю новую версию. Исправил пару багов и добавил возможность установки отдельных битов в переменных.

vojt
23.05.2012, 02:02
Спасибо kandiral!
Пример рабочий, а это главное. Дальше попробую разобраться.
Понравилось, что приложение восстанавливает работоспособность после пропадания и возобновления связи без каких либо зависаний или ошибок.

IVM
18.06.2012, 18:29
Реализовал протокол modbus tcp на сокетах в Delphi 7.

Проверял только на plc100kl.

В архиве тестовый проект под plc100kl и программка для примера использования.

В случае выявления багов пишите, буду исправлять.


А для BCB6 случайно нет подобной реализации ?

kandiral
21.06.2012, 15:58
А для BCB6 случайно нет подобной реализации ?

Нет. Только под D7.

Весь код выложен в архиве. Его можно переделать под что угодно.

Alex_Nev
27.07.2014, 21:23
Огромное спасибо!!!!!

Lode Runner
28.07.2014, 08:17
А с PyModbus кто-нибудь пробовал разобраться? У библиотеки куча зависимостей, для установки некоторых из них нужно или устанавливать Visual Studio, которая весит 3.5 Гб, или разбираться с вывихнутой установкой и настройкой MinGW... И это всё ради Crypto.Random?

zavalroman
24.11.2014, 09:03
Огромная благодарность kandiral'у!
Во вложении пример использования его библиотек в готовом проекте: два трм'a и частотник опрашивает плк 160, которого в свою очередь опрашивают панель 270 и пк-программа. ПЛК создает архив 3х значений в файле. С помощью библиотеки кандираловского PLCCommander'a программа забирает файл архива и создает таблицу в ексель.

TDAGR_Penza
13.07.2015, 10:33
Спасибо, коллега! На базе Ваших исходников собрали стенд проверки датчиков давления ПД100. Все отлично функционирует.

PavelGO
24.07.2015, 11:56
Всем привет. Пользую delphi TIdModBusClient.

.ReadHoldingRegisters(1, 34, Data);
Вопрос к знатокам:
Как слепить из data[3] и data[4] real?
В плк100 в них находится float.

PavelGO
24.07.2015, 13:38
Scream, для целых сработает. Но тут float должен получиться в итоге.
Почему то не вижу сообщения на форуме, только на почте.

Scream
24.07.2015, 14:43
Scream, для целых сработает. Но тут float должен получиться в итоге.
Почему то не вижу сообщения на форуме, только на почте.

Потому что я подумал, и удалил, с плавающей не пройдет, соглашусь.

PavelGO
24.07.2015, 15:06
Перевернул регистры и move в single(32bit). Целая часть правильная, а дробная гуляет сильно.
Может формат не совпадает. Сколько каких бит выделяется кодесисом на м,э и знак не могу найти инфы, только диапазоны.
Разобрался. Спасибо за участие.

kandiral
26.07.2015, 13:21
function MBRegsToSINGLE(AData: TRegisters): Single;
var
dw: Cardinal;
p: pointer;
begin
dw:=AData[0];
dw:=dw or (Cardinal(AData[1]) shl 16);
p:=@dw;
Result:=Single(p^);
end;
end;

Korhan
15.12.2015, 23:16
Здравствуйте форумчане!
Кто-нибудь может подсказать как использовать модуль уважаемого kandiral'а относительно CoDeSys 3.5 (СПК207)?
Или другой способ для организации связи по ModBus TCP с программой, разработка которой предполагается в IDE Delphi XE.
Буду очень благодарен.

kon48
16.12.2015, 08:25
Спасибо ! Во всех смыслах работа полезная.
С уважением Kon48

kandiral
09.12.2016, 14:42
Продолжение темы, где представлен инструментарий с более расширенными возможностями
http://www.owen.ru/forum/showthread.php?t=25735

novtoxa
19.03.2020, 12:47
Не качается вложение Modbus.rar! Можете перезалить, пожалуйста? Пожалуйста очень надо!

newtimka
10.09.2020, 15:06
Не качается вложение Modbus.rar! Можете перезалить, пожалуйста? Пожалуйста очень очень надо!

kandiral
10.09.2020, 16:29
Не качается вложение Modbus.rar! Можете перезалить, пожалуйста? Пожалуйста очень очень надо!

https://kandiral.ru/downloads/modbus.pas.html