Библиотека Сетевые переменные и управление/чтение портов различных МК в сети
- Войдите на сайт для отправки комментариев
Пт, 01/04/2016 - 07:12
Допустим МК соединены по какой нибудь сети - RS485, Serial или CAN (а возможно ли это в STM32?). Хочется чтобы между ними были единые перемменные, ну или правельнее сказать, навереное, переменные которые синхронизируются между собой. Возможна ли примерно такая библиотека? или это утопия. Также хотелось бы по простому рулить портами различных контроллеров в сети.
например как то так для сети RS485
#include <RS485.h> mainRS485 MK_01; // адрес данного МК в сети rs485 int RTCHour; // объявление сетевых переменных rs485 int RTCMinute; rs485 int RTCSecond; void setup() { Serial.begin (9600); RS485.begin (MK_01, MK_02, MK_03, MK_04,); //инициализация контроллеров в сети } void loop() { RS485.read(); // синхронизация с другими контроллерами сети if (RTCMinute == 0 && digitalRead (MK_03.port_10, LOW)) { //если сетевая переменная RTCMinute = 0 и порт 10 в контроллере MK_03 в LOW digitalWrite (MK_03.port_13, HIGH); // включить встроенный светодиод на контроллере МК_03 } }
Спустя год все таки дошли руки победить мою хотелку. А все потому что есть такая программа FLProg. В ней реализовано программирование ардуино графически, жутко непонятная вещь для меня. Но там есть создание сети Модбас (на RS485). В первых вариантах программы у меня ничего не получалось, т.к. регистры данных модабаса все были в одной области памяти (нельзя было например создать в сети переменную boolean, только int). но вот вышло обновление FLProg до версии 2.4. Посмотрел, увидел изменения в организации модбаса (тут уже разделения по регистрам и автор проги перестал использовать стандартную корявую библиотеку модбас для ардуино, а создал свою), попробовал - получилось.
В итоге FLProg использую только для создания скетча сети модбаса и прикручиваю всё это к моим скетчам. Не легко это, т.к. FLProg создает скетчи при компиляции хоть и такие же - в ардуино IDE, но, ппц трудно читаемые.
Короче всё что за loop )) тупо копипастю, переменные до setup тоже. Ну а в loopе не трудно догадаться что и куда приравнять.
В итоге Сделал мастер и слейв, см. ниже скетчи. На мастере тактовая кнопка, встроенный светодиод 13, часы реального времени далласа. На слейве тактовая кнопка, встроенный светодиод 13, LCD экран.
Первое. Состояние светодиода засинхронизировано - горит на обоих МК или выключен на обоих МК. Т.е. включили на одном кнопкой (светики включились на обоих МК), выключить можем на другом (при этом естевенно выключаться тоже оба). За это отвечает bool переменная модбаса. Тут инфа ходит туда сюда, мастер - слейв, слейв - мастер.
Второе. Время (часы и минуты) передаются от мастера к слеву. На слейве часы выводятся на экран. За это отвечают int переменные модбаса. Тут инфа ходит только от мастера к слейву. (но можно также сделать тутда сюда, или только от слейва к мастеру).
мастер
слейв
MaksVV. А то на то и выходит. Или хрень на FLProg или хрень на С++. Последняя это потому хрень, что С++ большинство банально плавают и даже (о ужас) тонут.