Разработка приложения C# .NET для Windows (Modbus serial, WPF)

22 500 руб. за проект
01 декабря 2021, 20:42 • 13 откликов • 53 просмотра
Требуется разработать приложение для обмена данными через интерфейс Modbus RTU (мастер) через интерфейс FT232RL->RS485. Нужно реализовать все базовые команды modbus, тут хорошее описание:
https://ipc2u.ru/articles/prostye-resheniya/modbus...
Интересуют в первую очередь качественные исходники, так как приложение будет потом дорабатываться своими силами, либо Вашими, если будет желание.
Инструменты разработки:
1. C# .NET, WPF, DataBinding
2. Для доступа к аппаратной части использовать DLL библиотеку в режиме D2X с сайта FTDI (в аппаратной части установлена микросхема FT232RL). Доступ через Serial порт не подходит.
Про библиотеку и применение её можно прочитать тут:
https://ftdichip.com/software-examples/code-exampl...
Примеры там есть, но они отвратительны: один поток, Sleep в потоке главного окна и прочие прелести.
3. В самом окне приложения необходимо вывести:
а) Статус подключения (Устройство подключено, отключено, идёт обмен данными).
б) Адрес ведомого ModBus, с которым ведётся обмен
в) Тип команды из выпадающего списка.
г) Адрес данных для считывания/записи
д) Число считываемых/записываемых регистров
е) Период сканирования (в миллисекундах).
ж) Кнопки Start и Stop для начала и завершения обмена данными.
з) ListBox (или аналогичное) для вывода данных по обмену.

Дизайн интерфейса мне не особо важен, приложил быстро накиданный макет.
4. Принцип работы.
При запуске ПО постоянно ищет устройство по его строковому идентификатору (у микросхем FTDI таковой имеется), сам идентификатор нужно взять в *.INI файле с программой.
Как только устройство найдено, ПО пытается с ним соединиться, используя параметры для подключения (Baud Rate, Parity, Stop-bits) из того же INI файла.
При успешном соединении разблокируются поля для ввода всего остального на форме, начальные значения не имеют значения. Пользователь выбирает функцию, адрес и все остальные параметры. При нажатии кнопки Start ПО начинает обмен данными с периодом, указанным пользователем.
Данные запроса и ответа выводятся в ListBox в виде:
1. Запрос (HEX)
2. Ответ в сыром виде (HEX)
3. Ответ в "parsed" виде: код команды, полученные данные. Если была ошибка обмена (нет ответа, некоррестная CRC) выводится текст об ошике.

Что-то подобное реализовано в программе QmodMaster (гуглится).

5. Что мне нужно.
5.1. Исходники С# (желательно, но необязательно для Visual Studio Community Edition 2019)
5.2. Работа с аппаратной частью в отдельном потоке. Грамотное взаимодействие между потоками, грамотная обработка аварийных ситуаций.
5.3. Потеря связи в процессе обмена не должна приводить к остановке приложения, оно должно начинать поиск устройства заново, если оно будет найдено, то возобновлять обмен.
5.4. Должна использоваться архитектура MVVM и DataBinding.
5.5. Тесты ПО необязательны (я не умею ими пользоваться).

6. Аппаратная часть.
Поскольку подразумевается разработка аппаратной части, готов выслать (в крайнем случае оплатить покупку) переходник USB->COM на базе FT232RL и какую-нибудь Adruino, код для неё я предоставлю. Получится полнценное устройство Modbus RTU slave.

Я разработчик аппаратной части, опыта в разработке Windows у меня мало, но на вопросы ответить в состоянии.
Файлы
Отзывы
Разрабатывалось приложение для взимодействия с аппаратным устройством через FTDI D2X библиотеку с протоколом Modbus RTU. Всё понравилось, вопросов к исполнителю не имею.
~ 1 месяц назад
R50 772348225e6d18e18e641b8a4f01e5cd
Фрилансер
 
~ 1 месяц назад