Pull to refresh

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.

Я предполагал появление подобной проблемы, и думал ее решить с помощью создания пресетов макросов по аналогии с пресетами настроек.

Но ваше предложение весьма интересное. Я подумаю над этим.

А что именно не работает? Не подключается, сообщения не отсылаются или не получаются? Или может что то еще?

Sign up to leave a comment.

Articles