В данной обзорной статье речь пойдет об организации TCP/IP стека в вашем проекте на основе встраиваемых модулей от Tibbo Technology.
В большинстве случаев разработчики работают со своим МК через последовательный порт. Это не всегда удобно. Часто возникает задача «общаться» с устройством удаленно через TCP/IP стек. Проблема поднимается не впервые. Например, вот здесь эта задача озвучена и решена с достаточно подробным описанием. В приведенной ссылке даже есть фото и краткое упоминание о модуле Tibbo EM100. Дело в том, что наша компания является официальным представителем Tibbo Technology в РФ. Поэтому немного обидно, что о нашем продукте упомянули вскользь, не раскрыв полного функционала и возможностей продукта. Я прекрасно знаю эту оранжевую коробочку под названием EM100, которая выпускается уже более 10 лет и которая используется на многих объектах наших бескрайних просторов. Но уже много воды утекло с момента релиза данного модуля. Попробуем создать TCP/IP стек для устройства на основе модуля Tibbo, параллельно рассмотрев возможности продукта.
Создание TCP/IP стека.
Для решения данной задачи нам понадобяться:
- Embedded module Tibbo
- Бесплатная прошивка с открытыми исходниками Serial Over Ip
- Бесплатная утилита Device Explorer (в составе TIDE)
- Бесплатный набор утилит Tibbo Device Server ToolKit (TDST)
Embedded Modules (EM) — это небольшие интеллектуальные модули, которые имеют собственный микропроцессор, минимально-необходимую обвязку для быстрого старта, различные встроенные протоколы. Как правило, в EM запущена собственная операционная система, которая не предназначена для общения с человеком. Цель использования EM – это в максимально короткие сроки и с минимальными затратами организовать тот или иной функционал в устройстве.
Семейство продукции Embedded modules от Tibbo Technology – это достаточно мощные модули, на которых уже реализованы физический уровень интерфейса 10/100 BaseT, организована полноценная работа со стеком протоколов TCP/IP, имеется от 1 до 4 последовательных портов UART на CMOS уровне (TTL совместимый). В продаже существуют модификации модулей с интегрированным разъемом Ethernet и без него. Для подключения последнего требуются внешние разъем и трансформаторы или разъем со встроенными трансформаторами. Размеры модулей варьируются, но в целом они не превышают (или превышают незначительно) разъем RJ45.
Я выбрал модель EM1206+RJ203, краткие характеристики:
- Основан на высокопроизводительном 88МГц ASIC (T1000) контроллере.
- 100BaseT со встроенной трансформаторной развязкой (при использовании RJ203).
- До 1024КБ flash-памяти под прошивку, приложения и данные.
- 2КБ EEPROM для хранения данных.
- Часы реального времени (RTC)..
- До 17 линий ввода/вывода общего назначения (включая 8 линий прерываний).
- Линии контроля двух внешних светодиода состояния.
- 4 встроенных светодиода:
- зелезный и красный светодиоды состояния;
- зеленый и желтый светодиоды статуса Ethernet.
- Программно-контролируемый встроенный PLL.
- Надежные схемы сброса питания.
- Питание: 230мА @ 3.3В (100BaseT режим, PLL включен).
- Размеры: 33.2x18.1x5.5мм.
Для полноценной и качественной работы с модулем, на плате необходимо предусмотреть: подачу стабилизированного питания (3.3В), микросхему сброса (желательно), в случае, если розетка Ethernet не реализована, распаять соответствующий разъем.
Последовательный порт, необходимо завести на контроллер вашего устройства. Как я писал выше, на модуле EM1206 реализован CMOS уровень (TTL совместимый), так что линии Rx/Tx можно подключать к ножкам МК напрямую.
Удобное ПО для работы
В программной части все еще проще. Запускаем Device Explorer, который автоматически обнаруживает модуль в сети (средствами посылки UDP broadcast запросов), заливаем прошивку. Процесс занимает не более 1 минуты.
Запускаем DS Manager, который позволяет задать параметры как последовательного интерфейса, так и параметры хоста:
Краткие характеристики прошивки Serial Over IP:
- Полно- и полудуплексные режимы последовательного порта.
- Доступные режимы: сервер, клиент и сервер/клиент.
- Множество других опций для соединений последовательного порта и ethernet.
- 8КБ на каждый буффер приема/передачи (в каждом направлении по одному буферу).
- Конфигурация хранится в EEPROM.
- Детальная индикация состояния через светодиоды.
- Настройка через RS232 или ethernet (UDP команды, Telnet).
- Удаленный контроль всех линий ввода/вывода (включая RTS, CTS, DTR и DSR).
- «On-the-fly» комманды для конфигурации последовательного порта.
- «Модемные» команды через RS232 для управления сетевым соединением.
- Прямое управление ADSL модемом.
- Поддержка UDP, TCP, ARP, ICMP (ping), DHCP, PPPoE, LCP протоколов.
- Встроенный веб-интерфейс управления.
Теперь наше устройство прозрачно пробрасывает поток данных в сеть Ethernet и обратно. На удаленной машине можно установить драйвер виртуального COM порта.
Опционально, при использовании внешнего модуля расширения GA1000, устройства Tibbo позволяют передавать данные по беспроводному протоколу передачи данных WiFi (802.11 b/g). GA1000 элементарно подключается к контроллеру, через утилиту DS Manager можно настроить параметры подключения к точке доступа.
Помимо стандартных режимов работы в локальной сети, в embedded модулях Tibbo реализован объект, позволяющий автоматически подключаться к провайдеру по технологии PPPoE, что позволяет использовать устройство, как клиент, для подключения к удаленным серверам по всему миру.
И это все? А где же интеллект, где же логика?
Embedded modules Tibbo являются свободно программируемыми, при этом процесс отладки и загрузки приложений осуществляется через сеть Ethernet. Программирование осуществляется на объектно-ориентированных событийных языках Tibbo Basic и Tibbo C. Для кодирования используется среда разработки от производителя Tibbo IDE. На устройствах запущена операционная система TiOS, которая обрабатывает приложение, написанное пользователем и скомпилированное в мнемокоды в режиме интерпретации. Модули имеют на борту линии ввода/вывода общего назначения (GPIO), что позволяет использовать embedded module как микроконтроллер.
На большинстве моделей реализован веб-сервер, который позволяет пользователю запрограммировать веб-интерфейс управления. На некоторых моделях реализованы часы реального времени RTC.
Таким образом, функционал модуля определяется только разработчиком. Если не достаточно прошивки SoI, откройте исходники и добавьте то, что нужно. Или с нуля создайте собственный проект. Например, реализовав протокол вашего контроллера и подцепив к проекту OPC Server (от Tibbo), устройство можно подключить к SCADA системе, а используя программную библиотеку AggreGate Agent появляется возможность подключения устройства к AggreGate Server.
Давайте рассмотрим простенький пример: необходимо сравнить полученный параметр от МК с константой, и если параметр превысил значение, передать предупреждение на сервер. Элементарно:
Инициализируем последовательный порт:
sub on_sys_init
ser.num=0 'выбираем первый последовательный порт
ser.rxbuffrq(4) 'Резервируем 4*256-16=1008 байт под буфер прием последовательного порта
ser.txbuffrq(4) 'Резервируем 4*256-16=1008 байт под буфер передачи последовательного порта
.....
sys.buffalloc 'Зарезервируем выделенные буферы памяти.
ser.num=0
ser.flowcontrol=DISABLED 'Выключаем управление потоком
ser.baudrate=12 'ser.div9600/(38400/9600) устанавливаем скорость 38400
ser.enabled=YES 'Включаем порт
.......
end sub
Инициализируем сокет:
sub on_sys_init
.....
sock.num=0
sock.rxbuffrq(4)
sock.txbuffrq(4)
.....
sys.buffalloc
sock.num=0
sock.protocol=PL_SOCK_PROTOCOL_TCP
sock.localportlist="2000,3000"
sock.inconmode=PL_SOCK_INCONMODE_ANY_IP_ANY_PORT
sock.targetip="192.168.1.100"
sock.targetport="1001"
end sub
Получим данные, сравним и отправим на сервер критическое событие:
sub on_ser_data_arrival
'Событие. Активируется при появлении данных на последовательном интерфейсе.
dim s as string
s = ser.getdata(ser.rxlen)
If val(s) > Critical_value then
sock.num = 0
sock.connect
sock.setdata("Внимание! Превышение параметра: "+s)
sock.send
end if
end sub
Как видно, программирование совсем не сложное.
Если вам не хочется возиться с распайкой, можно использовать готовые отладочные платы, например, EM500EV:
Достаточно подключить шлейф на интерфейсный разъем и вы получаете тот же функционал, что и при встраиваемом решении.
Замена МК на Tibbo embedded module.
Если в вашем проекте не требуется мгновенных реакций, то Tibbo EM можно использовать как главный микроконтроллер вашего устройства. Модули создавались для максимально удобной работы с ними. Свободное программирование на высокоуровневых языках Tibbo Basic и Tibbo C позволят сократить время на разработку прошивки в разы. Как пример, можно рассмотреть создание собственного контроллера доступа с реле для управления замками или подключения внешней сигнализации, веб-сервером, последовательными портами, беспроводной связью WiFi, клавиатурой и дисплеем (принципиальные схемы можно скачать здесь):
Последовательные порты могут использоваться для подключения считывателей RFID или магнитных карт. Реле служат для управления замками. Нужно открыть дверь? Для этого необходимо активировать реле. Из принципиальной схемы мы видим, что реле у нас «висит» на линии DTR0 (или GPIO5), нужно активировать эту линию:
....
io.num = PL_IO_NUM_5
io.enabled = YES
io.state = LOW
....
Наконец, если вам интересно создание собственных устройств автоматизации, посмотрите обзор аппаратной платформы автоматизации TPS от Tibbo.
Другие примеры использования продукции Tibbo можно посмотреть здесь.
P.S.
От нашей компании предоставляется услуга бесплатного тестирования всей линейки оборудования Tibbo.
Если вас заинтересовали наши продукты и вы хотели бы приобрести их, при заказе в нашем офисе скажите кодовое слово «Хабрахабр» и вы получите небольшую приятную скидку. Акция действует до 31 января 2014.
Автор: TibboRussian