Modbus Master and Slave на STM32F103 и Uno

Мессаф
Ср 18 января 2017 г. 11:29
Добрый день!
У меня проблема:
Я использую Arduino IDE и сборы на STM32F103C8T6, вы должны установить соединение через RS-485 между Master (STM32F103) и рабов (Arduino Uno). Используйте библиотеку Simplemodbus ng (https: // github.com/angeloc/simplemodbusng). Наброски собираются без проблем. Чтобы использовать пример из библиотеки STM32F103 (SimpleModBusMasterExample.INO) и используйте UART1-SERIAL1 (PA9-TX1, PA10-PX1 и контроль передачи / приема PA8 для MAX485). Например, uno использовал SimpleModbusslaveExample.INO и Serial (по умолчанию TX, PX и PIN 2 - управление передачи / приема).
Итак, проблема в том, что ООН не отвечает на запросы STM32. Мастер возвращает ошибку тайм -аута. Но дело в том, что если наброски Master Flash в Arduino Mega 2560 является проблемой в связи между мастером и рабом, нет, все работает, и данные передаются, и даже пытались рабы Использование приложения для Windows "Modbus Master"- проблемы с этим тоже не возникают.
Пожалуйста, ответьте, в чем может быть проблема?

Стивестронг
Ср 18 января 2017 г. 12:41
Попробуйте подключить Serial 1 из F103 с ПК по сравнению с RS485, посмотрите, получает ли ПК данные, когда F103 является мастером, а ПК - рабов.

Вы можете опубликовать здесь свой набросок.

Тиро
Чт 19 января 2017 г. 15:52
Я использую разные библиотеки для Modbus Master функциональности. Автор - Док Уокер. Он полностью работает и был протестирован с использованием Arduino Uno, Arduino Mega, Arduino Nano. Но когда я собрал этот код для использования с синей таблеткой или Maple Mini Device, не получают ответов от устройств. Может, это тоже не звонит на правильные звонки. Прежде чем комбинировать у меня проблемы с функциональностью CRC. Функция «Слово» и тип данных «слово» не совместима с STM32F103, поэтому я обновил, используя примеры, как изменить слово на разные типы, найденные на форумах. Я думаю, что могут возникнуть проблемные ошибки.

Итак, мне было бы очень интересно найти решение, чтобы сделать Maple Mini работать как Modbus Master. В противном случае мне придется добавить что -то вроде Attiny85 между устройством Modbus Slave и Maple Mini, чтобы сыграть роль переводчика.

Стивестронг
Чт 19 января 2017 г., 19:47
У меня есть 2 синие таблетки, общающиеся друг с другом по сравнению с RS485 без каких -либо специальных либеров. Он просто использует нормальную последовательную связь и один управляющий сигнал для направления.
Возможная проблема, которую вы можете испытать, заключается в том, что адаптеры Oroginal RS485 используют чипы, которые работают с 4.5 В и выше. Так что это, скорее всего, не будет работать с 3.3 В с доски F103. Я решил проблему, заменив встроенный чип RS485 на 3.3V Работа ADM3485.

Мессаф
Пн 23 января 2017 г. 2:50 утра
Привет, ребята. Спасибо за ответы! Прошу прощения за то, что не ответил.
Я уже выяснил в его проблеме, он появляется в исходном коде библиотеки Modbus Master Function по отправке пакета: void sendpacket (Unsigned Char Buffersize). Так что обратите внимание на этот код: void sendPacket(unsigned char bufferSize) { digitalWrite(TxEnablePin, HIGH); for (unsigned char i = 0; i < bufferSize; i++) Serial2.write(frame[i]); Serial2.flush(); // allow a frame delay to indicate end of transmission delayMicroseconds(T3_5); digitalWrite(TxEnablePin, LOW); previousTimeout = millis(); // initialize timeout delay }

Тиро
Пн 23 января 2017 г., 21:28
Мессаф написал:Не могли бы вы поделиться кодом с проблемой «Слово» и типа данных «Слово» ?

Стивестронг
Пн 23 января 2017 г. 22:26
Относительно перегруженного "send ()".
Я полагаю, вы знаете, сколько байтов или слов вы хотите отправить.
Так что просто бросьте прошедшие параметры/константы, такие как: send( (uint8_t)0x5a );

Тиро
Вт 24 января 2017 г. 9:06 утра
Когда я вернулся в этот код библиотеки, я увидел, что внутри «Слово» есть «Слово». И эта функция тоже использует еще один: void ModbusMaster::send(uint8_t data) { send(word(data)); }

Rogerclark
Вт 24 января 2017 г. 10:16
Как правило, не рекомендуется использовать такие типы, как «слово», если вам нужна кросс -платформная совместимость, так как значение, по -видимому, варьируется в зависимости от архитектуры процессора / ширины данных.

Лучше использовать uint16_t и т.д

Тиро
Вт 24 января 2017 г. 10:33
Rogerclark написал:Как правило, не рекомендуется использовать такие типы, как «слово», если вам нужна кросс -платформная совместимость, так как значение, по -видимому, варьируется в зависимости от архитектуры процессора / ширины данных.

Тиро
Вт 24 января 2017 г. 8:51 вечера
Я проверил эти обновления сегодня. Скомпилируется на MEGA2560, он работает правильно, получает ответ от рабов и после компиляции в Maple Mini. Здесь есть что -то более скрытое, я не знаю, где искать :(

victor_pv
Вт 24 января 2017 г. 8:59 вечера
Тиро написал:Я проверил эти обновления сегодня. Скомпилируется на MEGA2560, он работает правильно, получает ответ от рабов и после компиляции в Maple Mini. Здесь есть что -то более скрытое, я не знаю, где искать :(

Тиро
Вторник 24 января 2017 г. 9:06 вечера
victor_pv написал: Наверное, вы уже знаете, но STM32 использует 3.3V IO, в то время как UNO использует 5V. Вы соединяете доски напрямую во время тестирования? Если это так, вам, вероятно, нужен конвертер уровня.
При использовании чипсов RS485 убедитесь, что тот, который используется в конце STM32, может работать с 3.3 В в стороне MCU.

Тиро
Вт 24 января 2017 г. 9:34 вечера
И вот мои первые результаты. Я пытаюсь подключиться к рабов с идентификатором 170, прочтете 1 Регистр удержания (операция 0x03) по адресу 0

Arduino2560 Serial Call выглядит так: AA 20 00 04 57 FA

Стивестронг
Вторник 24 января 2017 г. 9:36 вечера
Будьте осторожны от Endianess, CRC - лучшее место, где он может пойти не так.
Можете ли вы показать нам свой код?

Поезд Mega2560 неверен, он не содержит 0x03. Maple Mini выглядит хорошо.

Тиро
Вт 24 января 2017 г. 22:53
Стивестронг написал:Можете ли вы показать нам свой код?

victor_pv
Ср 25 января 2017 г., 17:22
Тиро написал:Стивестронг написал:Можете ли вы показать нам свой код?

Тиро
Ср 25 января 2017 г., 18:40
victor_pv написал: Проверьте, можете ли вы найти версию библиотеки, протестированной в Due или Teensy 3.x, могут быть некоторые проблемы с типами и эндезией, как указал Стив.

victor_pv
Ср 25 января 2017 г., 19:30
Тиро написал:victor_pv написал: Проверьте, можете ли вы найти версию библиотеки, протестированной в Due или Teensy 3.x, могут быть некоторые проблемы с типами и эндезией, как указал Стив.

Мессаф
Солнце 29 января 2017 г. 10:27 утра
Привет, ребята!
Я добавил небольшую библиотеку для работы с STM32F103 (библиотека :: Modbusmaster Автор :: Doc Walker), я надеюсь, что он не поклянется. : D
Теперь все работает очень хорошо. Я проверил две доски Arduino (Slave) и Blue Pill STM32F103 (Мастер). Вот ссылки на файлы:
Modbusmaster_stm32_rs-485
Modbusslave_arduinouno_rs-485

Тиро
Солнце 29 января 2017 12:27
Мессаф написал:Привет, ребята!
Я добавил небольшую библиотеку для работы с STM32F103 (библиотека :: Modbusmaster Автор :: Doc Walker), я надеюсь, что он не поклянется. : D
Теперь все работает очень хорошо. Я проверил две доски Arduino (Slave) и Blue Pill STM32F103 (Мастер). Вот ссылки на файлы:
Modbusmaster_stm32_rs-485
Modbusslave_arduinouno_rs-485

Стивестронг
Солнце 29 января 2017 г. 15:42
Можете ли вы сказать нам, в чем именно проблема, как вы ее решали?

Мессаф
Пн 30 января 2017 г., 2:54
Стивестронг написал:Можете ли вы сказать нам, в чем именно проблема, как вы ее решали?

Стивестронг
Пн 30 января 2017 г., 7:18 утра
Лучше всего поделиться кодом на GitHub, а не в ZIP -пакете.

Мессаф
Вт 31 января 2017 г. 2:26 утра
Стивестронг написал:Лучше всего поделиться кодом на GitHub, а не в ZIP -пакете.

Мессаф
Вторник 31 января 2017 г. 2:30 утра
Я заинтересован в этом вопросе (хотя его нет в этой теме): как настроить Pligin Arduino для Eclipse, который использовал бы все библиотеки для плат STM32, многие не пытались настроить - я ничего не выходит ... Подскажите, пожалуйста, или может быть какой -то уже готовый Manul на эту тему?

Стивестронг
Вт 31 января 2017 г. 8:07
Вот возможность: http: // wiki.STM32duino.com/index.PHP?тип ... th_eclipse

Мессаф
Вт 31 января 2017 г. 10:53 утра
Стивестронг написал:Вот возможность: http: // wiki.STM32duino.com/index.PHP?тип ... th_eclipse

Zouk199
Вт 25 апреля 2017 г. 9:07
Привет, сэр

Я делаю F103 с ENC28J60, чтобы стать Modbus TCP.

У вас есть библиотека для Modbus TCP для STM32.

Что касается

Зук

Стивестронг
Вт 25 апреля 2017 г. 9:44
@Zouk199,
Остановите несколько публикаций, ваша проблема не будет решена, если вы публикуете в каждом возможном потоке.
Если у вас уже есть ENC26, работая над F103, то Modbusip (ссылка из вашего другого поста) должен работать из коробки.
Просто попробуй Один из этих примеров.

Zouk199
Пт 5 мая 2017 г. 3:36 утра
всем привет

Есть ли способ сделать UNO в качестве Master и STM32 F103 в качестве раба??? :)

отличаться
Пт 16 июня 2017 г. 6:05
Привет,
Полезная работа. Я получаю следующую ошибку в Arduino 1.8.2

Sketch \ modbusmaster.H: 54: 53: фатальная ошибка: libmaple/usart.H: нет такого файла или каталога

#включать <Libmaple/USART.час> // модифицированный Egor Orlenok

Киловатт21
Вт, 3 июля 2018 г., 9:30 утра
Привет,

Есть ли библиотека Modbus RTU для использования между STM32S? Я попробовал Simplemodbus без повезло.