Сайт Кандирала Руслана
Здравствуйте! Меня зовут Кандирал Руслан, мне 41 год. Я уже долгое время занимаюсь программированием в разных направлениях и решил поделиться своими наработками с интернет публикой.
Основная цель сайта - помочь людям, столкнувшимся с проблемами, которые мне удалось решить в свое время, а также выявить возможные ошибки или неточности в моих кодах. Также я принимаю предложения по доработке и модернизации представленных мною библиотек.
Я ни кому не навязываю свои методы решения той или иной задачи, поэтому вместо того чтобы критиковать мою работу предложите свой вариант реализации и по средствам дискуссии мы выявим оптимальные пути решения поставленной задачи.
Распространение содержимого сайта может осуществляться без моего согласия и без выплаты вознаграждения, но с обязательным указанием источника.
Все вопросы и предложения можно писать в комментариях на соответствующих страницах. Если вы не хотите публиковать свой вопрос или предложения, то воспользуйтесь формой обратной связи.
02.09.2019 14:24:37.216 RECV: :1003020000EB
02.09.2019 14:24:37.306 SEND: :100300010001EB
02.09.2019 14:24:37.347 RECV: :1003020000EB
02.09.2019 14:24:37.377 SEND: :100300010001EB
02.09.2019 14:24:37.418 RECV: :1003020000EB
02.09.2019 14:24:37.484 SEND: :100300000001EC
02.09.2019 14:24:37.525 RECV: :1003020000EB
02.09.2019 14:24:37.562 SEND: :100300000001EC
02.09.2019 14:24:37.603 RECV: :1003020000EB
02.09.2019 14:24:37.651 SEND: :100300030001E9
02.09.2019 14:24:37.692 RECV: :1003020000EB
02.09.2019 14:24:37.723 SEND: :100300020001EA
Вы про этот лог?
Как минимум запросы должны отправляться.
1) Тип связи (сеть или COM порт). У меня за это отвечают коннекторы. То есть в зависимости от того какой коннектор (KRTCPConnector или KRCOMPortConnector) вы подключите к компоненту KRModbusMaster такая и будет связь.
2) Тип протокола Modbus (TCP/RTU/ASCII). Для этого есть свойство MBType в компоненте KRModbusClient.
Для подключение через COM порт с использованием протокола Modbus RTU нужно использовать коннектор KRCOMPortConnector и в свойстве MBType указать mbtRTU.
Для подключение по сети с использованием протокола Modbus TCP нужно использовать коннектор KRTCPConnector и в свойстве MBType указать mbtTCP.
В видео я показываю разные типы связи и меняю коннектор и свойство MBType:
Как я понял вас интересует связь по протоколу modbus между программой на Delphi и условными датчиками.
Для имитации сигналов нужно делать отдельную программу с Modbus Slave. Но у меня в компонентах еще не реализовано Modbus Slave. В принципе, для обработки двух сигналов можно сделать простой обработчик пакетов.
Если для связи используется COM-порт, то можно использовать com0com.
Если для связи используется TCP/IP, то для имитации сигналов в программе имитаторе нужно делать TCPServer.
Для прорисовки графиков у меня компонентов нет. Недавно задача построения графика, я использовал TJvChart. Когда-то давно делал график с помощью TChart
В таком случае вам нужна программа(эмулятор) которая будет имитировать сигнал и по запросу генерировать modbus slave пакеты.
Тут есть два варианта:
1) Сделать эмулятор самому. (в моем пакете компонентов modbus slave нет)
2) Скачать в интернете готовый эмулятор. (google по запросу "имитация сигнала modbus" выдает довольно много вариантов. Я такими программами не пользовался, по этому посоветовать ничего не могу)
Далее, вам нужно делать программу на Delphi которая будет получать сигналы и строить графики. Для реализации связи по протоколу Modbus RTU вам поможет пример
Если вам нужно использовать modbus RTU значит связь будет через COM порт. Для связи эмулятора и вашей основной программы можно использовать com0com. com0com - это бесплатная утилита которая создает пары виртуальных COM портов между которыми происходит передача данных. Создаете пару портов, к одному подключается эмулятор, а ко второму ваша программа.
Есть инструкция или возможность собрать пакет под Delphi 2007?
Нет. Такой инструкции нет.
Пакет разрабатывался под Delphi XE и проверялся под некоторые версии выше.
Можете попробовать, но как мне кажется могу возникнуть сложности. Как минимум из-за того, что Delphi 2007 не юникодовская версия.
Я думаю проще будет перейти на Delphi XE
Давайте я вам вечером сделаю программу перенаправленния данных из порта в порт? Часов в 20(мск).
Пример:
Можете еще посмотреть в файле KRCOMPortConnector.pas, там он используется.
Она немного изменилась, и теперь под каждую версию delphi отдельный пакет. Пока есть только для XE и XE7. Я думаю вам подойдет пакет под XE7
Инструкция по установке:
1) Удаляем старую версию и все пути к ней
2) Создаем переменную (Tools->Options->Enviroment Options->Enviroment
Variables) KANDIRAL=Путь к папке библиотек
3) в "Library path"(Tools->Options->Enviroment Options->Delphi
Options->Library) добавить
$(KANDIRAL)\Release\$(ProductVersion)\$(Platform)\
$(KANDIRAL)\Resources\
4)в "Browsing path" (Tools->Options->Enviroment Options->Delphi
Options->Library) добавить:
$(KANDIRAL)\Common
$(KANDIRAL)\Automation
$(KANDIRAL)\File
$(KANDIRAL)\Media
$(KANDIRAL)\Net
$(KANDIRAL)\Utils
$(KANDIRAL)\Graphics
5) запустите Kandiral150.groupproj (для delphi XE) или
Kandiral210.groupproj (для delphi XE7)
6) Делаем build всех пакетов
7) Устанавливаем все пакеты кроме KRMedia
md5 in '..\..\Utils\md5.pas', Компиляция проходит
Embarcadero® Delphi 10.3 Но если взять библиотеку от 01.03.2018. То все хорошо.
Попробовал компоненты для работы с MODBUS из Вашей библиотеки. Под Delphi всё работает замечательно, но вот из-под C++ Builder в компоненте KRCOMPortConnector
при присваивании значения свойству Port вылетает ошибка линкера
[ilink32 Error] Error: Unresolved external '__fastcall Krcomportconnector::TKRCOMPortConnector::SetPortW(System::UnicodeString)' referenced from ..\MAINUNIT.OBJ,
в версиях XE2, XE5, XE10.1, причем в XE10.1 то же происходит и в случае присваивания внутри отдельного класса в паскалевском модуле, для присваивания специально написанного
[ilink32 Error] Error: Unresolved external '__fastcall Delphicode::TMyDelphiClass::SetPortW(System::UnicodeString)' referenced from ...\CPPFORM.OBJ
Я понимаю, что, скорее всего, в С++ Вuilder Вы, скорее всего, библиотеку не тестировали, но, возможно у Вас есть соображения, куда копать?
Вы можете прислать(выложить на облаке) тестовый проект на C++ Builder который бы коннектился по Modbus используя мои библиотеки. Я попробую запустить его у себя.
На Ваших компонентах практически доделал миниСкаду по ModbusRTU. Но получился затык с Coils и дискретными входами. Компонент ModbusClient у Вас поддерживает только Inputs и Holding. Пробовал ф-ции MBMReadCoils, MBMReadDiscretInputs. Код компилируется, но приложение вылетает с ошибкой. Нет ли у Вас примера работы с этими функциями? Или полнофункционального ModbusClient? Готов купить эти компоненты у Вас.
Функции протокола Modbus по работе с coils я уже сделал, но еще не выложил обновленный набор библиотек на сайте.
Но, так как мне еще не приходилось использовать coil функции, я их до сих пор не протестировал.
Вот можете скачать версию библиотек на текущий момент:
Способ установки библиотек немного изменился
- В настройках Delphi в разделе Enviroment Variabels нужно добавить переменную с именем KANDIRAL, а значение должен быть путь к папке с библиотеками. Например: D:\Kandiral
- В настройках Delphi в разделе Library в поле Library path, в самый конец строки добавить ;$(KANDIRAL)\Release\$(ProductVersion)\$(Platform)\
- В настройках Delphi в разделе Library в поле Browsing path, в самый конец строки добавить ;$(KANDIRAL)\Common;$(KANDIRAL)\Automation;$(KANDIRAL)\File;$(KANDIRAL)\Media;$(KANDIRAL)\Net;$(KANDIRAL)\Utils;$(KANDIRAL)\Graphics
И еще в новой версии библиотек пакеты распределены по версиям платформа. Сейчас есть только для Delphi XE и Delphi XE7.
Функционал:
- прием/отправка смс сообщений
- USSD
- интернет
- синхронизация времени по NTP
Библиотеку делал давно и есть уже некоторые моменты, которые хочу переделать.
Я планировал сделать ее описание после доработки.
Я могу выслать вам эту библиотеку, она с открытым кодом но без комментариев. Или могу сделать описание того варианта который есть сейчас и выкинуть на сайт до конца недели. На доработку у меня сейчас нет времени.
Недавно установил Ваши компоненты и хотел их опробовать, но не хватило ни опыта ни мозгов, т.к. никогда не сталкивался с необходимостью разработки в этом направлении.
Меня интересует передачи/приема данных с контроллером по протоколу ModBus., а именно:
1. На какие свойства настройки стоит обратить внимания при настройки связи по протоколу ModBus, и какие компоненты должны быть использоваться.
2. Пример записи и чтения данных.
я просмотрел пример "Пример передачи данных по протоколу Modbus на Delphi контроллера ОВЕН ПЛК100" - там маловато комментарий. Понятно, что на очевидные вещи не нужны коменты, когда понимаешь что происходит.
В моем же случае: я впервые работаю с протоколом Modbus. Хотелось бы более детальней понять все.