Просмотр полной версии : 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
самое главное, непонятно как работает Ваша запись, введя значение я не должен "париться" чтоб данные передались. А в Вашей проге я так и не разобрался, то ли запись ждет своей очереди, то ли надо на кнопку постоянно жать, чтоб поймать свободный промежуток времени для передачи. Такое положение вещей не даст Вашей программе использоваться в реальной работе.
Далее Ваша прога жестка привязана к конкретному проекту, ну и кому она после этого нужна кроме Вас :)
И не лучший вариант, фиксировать время опроса, было бы лучше еслиб оно задавалось в настройках
Последнее, это строить организацию памяти слейва таким образом, чтоб можно было принять все регистры разом, а потом уже в программе раскидать их по своим переменным, разгрузите сеть и появиться больше времени на прерывания, типа записи параметров в слейв
ЗЫ про порядок передачи байт, у Вас как то непроработан вопрос
kandiral
06.05.2012, 14:44
Я предполагал использование библиотеки в других программах.
Вложенная программа приведена для демонстрирования использования библиотеки, и она явно привязана к конкретному проекту.
Запись должна происходить практически моментально, в примере это должно происходить примерно за 140ms.
Тема интересная. Может есть какое-то описание по данному коду в Delphi?
kandiral
21.05.2012, 22:32
Тема интересная. Может есть какое-то описание по данному коду в Delphi?
Пока нет времени делать описание. Возможно в будущем.
В примере все видно. Я думаю можно разобраться.
Выкладываю новую версию. Исправил пару багов и добавил возможность установки отдельных битов в переменных.
Спасибо kandiral!
Пример рабочий, а это главное. Дальше попробую разобраться.
Понравилось, что приложение восстанавливает работоспособность после пропадания и возобновления связи без каких либо зависаний или ошибок.
Реализовал протокол 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. Все отлично функционирует.
Всем привет. Пользую delphi TIdModBusClient.
.ReadHoldingRegisters(1, 34, Data);
Вопрос к знатокам:
Как слепить из data[3] и data[4] real?
В плк100 в них находится float.
Scream, для целых сработает. Но тут float должен получиться в итоге.
Почему то не вижу сообщения на форуме, только на почте.
Scream, для целых сработает. Но тут float должен получиться в итоге.
Почему то не вижу сообщения на форуме, только на почте.
Потому что я подумал, и удалил, с плавающей не пройдет, соглашусь.
Перевернул регистры и 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;
Здравствуйте форумчане!
Кто-нибудь может подсказать как использовать модуль уважаемого kandiral'а относительно CoDeSys 3.5 (СПК207)?
Или другой способ для организации связи по ModBus TCP с программой, разработка которой предполагается в IDE Delphi XE.
Буду очень благодарен.
Спасибо ! Во всех смыслах работа полезная.
С уважением Kon48
kandiral
09.12.2016, 14:42
Продолжение темы, где представлен инструментарий с более расширенными возможностями
http://www.owen.ru/forum/showthread.php?t=25735
Не качается вложение 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
Powered by vBulletin® Version 4.2.3 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot