Comments 20
Спасибо, очень актуально, после праздников попробую, как раз сейчас анализирую пакеты с устройством без даташита, дам фидбэк
Там же 232-й есть?
Да, в приложении есть возможность работы с последовательным портом.
Я бегло попробовал с моим самодельным устройством на 485-м, вскочил вопрос, а есть ли возможность задать готовые пресеты для отправки? Поясню, у меня при подключении инициализируются некоторые регистры и далее во время работы нужно переключать режимы, т.е. отсылать несколько вариантов заранее заданных данных, а не менять пакет туда-сюда
Скрытый текст

Что-то в таком духе
Используйте макросы. Например, можно создать макрос для каждого режима, дать каждому из них какое-то название, и во время работы при необходимости нажимать на соответствующие макросы. Окно макросов можно скрыть или закрыть вовсе, если оно сейчас не нужно.
В случае на картинке есть проблема, что нужно записать два регистра, которые располагаются непоследовательно в памяти.
Но я вижу несколько вариантов:
1. Использовать макрос Modbus и функцию 0х10 Запись нескольких регистров. Регистрам, которые находятся между 0х64 и 0х70, можно задать нулевое значение. Убедитесь, что это не критично.
2. Использовать несколько макросов Modbus. В каждом макросе используется функция 0х06, которая записывает в один регистр. Чтобы не запутаться, их можно назвать, например так: "Режим Х 1", "Режим Х 2", "Режим Y 1", "Режим Y 2" и т.д.
Для переключения режима придется понажимать пару кнопок.
3. (Костыль, костыль) Использовать макрос режима "Без протокола". Записать последовательно байты для каждой посылки. Попробовать отправить. Скорее всего устройство это проигнорирует, из-за отсутствия служебных полей UART между посылками и из-за отсутствия паузы между сообщениями. Если так произошло, то можно попробовать сымитировать старт и стоп биты, с помощью байтовых значений, а паузу между посылками - нулевыми значениями. Для отладки всего этого неплохо бы воспользоваться осциллографом или логическим анализатором.
А реализации пресетов как таковых сейчас нет. Это было бы самым удобным вариантом для случая на картинке. Возможно, они появятся в будущем)
Спасибо, на моих платах, что имею дома по 485-му всё отлично работает, есть правда некоторые предложения по улучшению, кроме пресетов, но это скорее юзерфрендли, чем функционал
А впрочем, подумайте над вариантом добавить протокол из CAN), могу оказать содействие
Попробую ещё на заводе с другими устройствами и не программистами)
Юзерфрендли и общий дизайн приложения это были одни из основных причин, почему я когда-то начал писать это приложение) Интересно будет услышать ваши предложения.
А CAN вообще сильно распространен в промышленной автоматике? Честно говоря, я с ним и не сталкивался в живую) Даже при подборе комплектующих для разработки нового оборудования у различных исполнительных модулей редко бывает поддержка CAN протокола.
Обычно у большинства устройств есть поддержка Modbus или на худой конец какого-нибуть простенького собственного протокола.
Вообще встречается часто, чаще всего в автомобиле, ну примерно как Манчестер-2 (MIL-STD-1553) в авиации, никакая ракета и самолёт без этого
Но и по внутренней сети между станками не раз видел CAN-устройства, например в Микроне
Я без шуток, оно используется
Напишу вам свои пожелания, мне нужно их сформировать
1) "Использовать макрос Modbus и функцию 0х10 Запись нескольких регистров. Регистрам, которые находятся между 0х64 и 0х70, можно задать нулевое значение. Убедитесь, что это не критично."
Ой, там я эти регистры натыкал ещё когда устройства не было даже в kiCAD нарисовано, там с большими интервалами
Скрытый текст

В теории конечно можно переделать карту регистров, но это ради одной чужой программы такое себе)))
2) "Использовать несколько макросов Modbus. В каждом макросе используется функция 0х06, которая записывает в один регистр"
Это рабочий вариант, но объяснять людям нажми все Xn чтобы установить режим X странно, если перед глазами компьютер, а не арифмометр
3) "Использовать макрос режима "Без протокола". Записать последовательно байты для каждой посылки. Попробовать отправить. "
Как вариант, впринципе разбор пакетов писал я, могу сделать чтобы он дробил длинные данные по длине пакета и совпавшей crc, добавлял их в очередь , и по хорошему надо бы, но опять же ради одной программы...
Было бы чудесно иметь в закромах возможность исполнить сразу несколько команд подряд, у меня есть одна плата на ПЛИС, там около 12 разных регистров пишется, чтобы задать параметры работы и естественно все в разных местах по адресам, эти параметры пишутся не один и не два раза за сеанс
Возможность отправлять сразу несколько сообщений за раз появилась с добавлением расширенных макросов. Функционал получился схож с тем, что на картинке :)
Подробнее здесь:
Кроссплатформенный терминал Modbus TCP / RTU / ASCII с открытым исходным кодом: Часть 4
Возможно, невнимательно читал. Несколько устройств сразу можно опрашивать?
Нет. Сейчас опрашивать можно только по одному.
Эта возможность появилась с добавлением расширенных макросов. В одном макросе можно настроить несколько команд для опроса разных устройств.
Подробнее здесь:
Кроссплатформенный терминал Modbus TCP / RTU / ASCII с открытым исходным кодом: Часть 4
Спасибо за вашу программу. Полезно. Хотелось бы предложить в будущих версиях, если это возможно, добавить:
в пресет добавить адрес устройства по умолчанию
в макросах сделать выбор адреса - по умолчанию / задать. Аналогично и в основном поле набора команды
возможность циклического выполнения макроса
возможность макрос собирать из набора других макросов
Плохо понимаю, зачем нужен адрес по умолчанию. Возможно это удобно, когда работаешь с Modbus TCP, т.к. там чаще всего адрес устройства один и тот же.
Вы могли бы описать случаи, когда необходим адрес устройства по умолчанию?
А насчет пунктов 3 и 4 я и сам уже думаю. Скорее всего в будущем появится возможность собирать макрос из команд. А между командами можно будет ставить задержки.
Я использую Modbus RTU. И изначально моя идея была, что пресет предназначен для работы с одним устройством. При изменении адреса устройства, нужно вручную перелопатить все макросы с ним связанные. Но подумав над вашим вопросом, могу предложить более продвинутую идею. В пресете завести список "Мои устройства", содержащий имя и адрес. И уже в макросе выбирать имя устройства, или задать адрес вручную. Тогда можно будет работать с несколькими устройствами. Не напрягаясь с заменой адреса или вспоминая его.
Макросы изначально подразумевались как автономные единицы, которые не зависят от пресетов. Поэтому у них свои настройки кодировки строки и формата чисел типа float.
Я предполагал появление подобной проблемы, и думал ее решить с помощью создания пресетов макросов по аналогии с пресетами настроек.
Но ваше предложение весьма интересное. Я подумаю над этим.
НЕ работает! От слова совсем :(
Кроссплатформенный терминал Modbus TCP / RTU / ASCII с открытым исходным кодом: Часть 3