Вы находитесь на странице: 1из 39

МОСКОВСКИЙ АВИАЦИОННЫЙ ИНСТИТУТ

(национальный исследовательский университет)


Институт “Системы управления, информатика и электроэнергетика”
Кафедра “Системы автоматического и интеллектуального управления”

Лабораторная работа №2
Основы моделирования в SimInTech элементов
измерительно-управляющих комплексов

Москва 2020 год


1. Цель лабораторной работы
Целью лабораторной работы является разработка микропроцессорного
измерительно-управляющего блока на базе современных технологий для
автоматизации эксперимента на примере лабораторной установки «Методы и
технические средства измерения давлений». Необходимо разработать алгоритмы и
программное обеспечение с использованием среды разработки SiminTech от
компании 3В сервис, позволяющее использовать устройство с набором
измерительно-управляющих модулей как универсальный измерительно-
управляющий блок для автоматизации эксперимента на примере лабораторной
установки “Методы и технические средства измерения давлений»

2. Структурная схема блока управления


Для разработки микропроцессорного измерительно-управляющего блока
необходимо осуществить выбор компонентов, комплектующих, программного
обеспечения и системы проектирования.

2.1.Описание лабораторной установки “Методы и технические средства


измерения давлений”

Данная установка используется для определения (проверки, калибровки)


статических характеристик датчиков давления.

В установке за рабочий эталон принимается один из датчиков, его


характеристики используется при организации управления давлением внутри
рабочей камеры установки.
В состав установки “Методы и технические средства измерения давлений”
входит: электропневмоклапаны, резервуар, трубопроводы, компрессор, датчики
давления и др.
Фотография лабораторной установки “Методы и технические средства
измерения давлений” представлена на рисунке 1.
Рис. 1
- Лабораторная установка

В установке воздух выступает в качестве рабочего тела. Компрессор создает


внутри давление. Требуемое давление внутри установки достигается путём
соответствующего управления компрессором и электроклапанами. Проходное
сечение стравливающего клапана №1 больше, чем у клапана №2. Это позволяет
получать разные скорости стравливания давления и достигать требуемого качества
его регулирования.
Датчик Д1 принимается в качестве рабочего эталона и его сигнал используется
в контуре управления.
Электропневмоклапан №3 служит для разделения всей рабочей полости на две
зоны – большую и малую. Объём малой зоны невелик и стравливание воздуха из
неё происходит весьма интенсивно, что позволяет с помощью соответствующей
методики оценивать динамические характеристики испытуемого датчика.
Внутренняя часть лабораторной установки “Методы и технические средства
измерения давлений” представлено на рисунке 2.
Рис. 2 – Внутреннее расположение элементов

Схематическое изображение лабораторной установки “Методы и технические


средства измерения давлений” представлено на рисунке 3.

UВых.
UВых.
Трубка

Д Д2
1
Компрессор
Клапан Клапан
3 22
Реле

Манометр
Резервуар

Клапан
1

Рис. 3 – Схематическое изображение лабораторной установки


В лабораторной установке "Датчики давления " используются:
Нулевой Диапазон
Номер
МРх4250DP сигнал при изменения Использование в
датчи
«Motorola» напряжении выходного установке
ка
питания 5 В. сигнала
Тензо-
Д1  5 мВ. 0250 мВ. Образцовый
резистивный
Тензо-
Д2  5 мВ. 0250 мВ. Испытуемый
резистивный

В «автоматическом» режиме используется тот или иной алгоритм для


управления исполнительными органами с помощью системы управления.
2.2. Элементная база измерительно–управляющего блока
Датчики 5П14.2А

Два датчика 5П14.2А (КР293КП4А) - сдвоенное однонаправленное МОП-


реле с низким сопротивлением 60В/2.5Ом, корпус DIP.

Габаритная схема, контактный чертеж и фотография представлены на рисунке


4.

Рис. 4 - схема датчика КР293КП4А

Характеристики КР293КП4А (5П14.2А) :

-Напряжение коммутации 60 В.
-Ток коммутации 350 мА.
-Выходное сопротивление 2.5 Ом.
-Входной рабочий ток 5 мА.

МОП-реле содержит кристаллы инфракрасного AsGaAl-светодиода,


фотовольтаического драйвера со схемой̆ ускорения выключения и кристаллы
МОП-транзисторов. Оптическая связь осуществляется посредством
полусферического световода. Внутренние соединения выполнены золотой
проволокой. Высокая стабильность сопротивления в открытом состоянии
обеспечивается благодаря золотым покрытиям контактирующих поверхностей.
Типовое значение тока переключения реле составляет 0.5 мА. Реле работает с
постоянным напряжением.

Одноплатный компьютер Raspberry Pi

Raspberry Pi является одноплатным компьютером маленького размера.


Имеет разъём HDMI для подключения монитора, USB-порты для подключения
USB устройств, GPIO разъём для подключения низкоуровневой периферии,
Ethernet-порт для подключения к сети. Самая мощная модель - Raspberry Pi 3 имеет
встроенный Wi-Fi и Bluetooth, 4 ядерный 64-битный процессор ARM 1.2Ghz, 1GB
оперативной памяти. Внешний вид Raspberry Pi с обеих сторон изображен на
рисунках 5 и 6.[Error! Reference source not found.]

Рис. 5 - Внешний вид Raspberry Pi


Рис. 6 - Внешний вид Raspberry Pi
Описание компонентов, размещенных на Raspberry Pi представлено на
рисунке 7.

Рис. 7 - Описание компонентов, размещенных на Raspberry Pi


Технические характеристики Raspberry Pi
:

- Процессор: Broadcom BCM2387 1.2ГГц четырехъядерный ARM Cortex-A53;


-GPU:двухъядерный VideoCoreIV;
-Оперативная память:1ГБLPDDR2;
- Беспроводная связь: Wi-Fi (802.11 b/g/n) и Bluetooth 4.1 (классический
BluetoothиLE);
- Операционная система: Запуск с Micro SD карты, дистрибутивы Linux или
Windows10IoT;
-Размер:85x5617мм:
- Питание: Micro USB socket 5.1В/2.5А.

Размерами Raspberry Pi 3 сравнима со типовой банковской картой. Невзирая


на это, производительность данного Одноплатного компьютера находится на
уровне наилучших полноценных персональных компьютеров 2005 года. Raspberry
Pi 3 обеспечена двухъядерным графическим процессором VideoCore4, который
способен кодировать, декодировать и выводить Full HD(1080p) видео с частотой 30
кадров в секунду. И процессор, и графика объединены в одном чипе - Broadcom
BCM2387. Так же присутствует 1 Гб оперативной памяти. Она размещена на
обратной стороне платы, но данная память делится с графической подсистемой.
Операционная система устанавливается на карту памяти Micro SD, слот для
которой находится так же с обратной стороны платы. Рядом с ним располагается
чип беспроводных подключений Wi-Fi и Bluetooth – Broadcom BCM43438.
Raspberry Pi 3 имеет следующие интерфейсы для подключений периферии:
- 4 порта USB 2.0
- сетевой адаптер Ethernet(RJ-45),работающий со скоростью 100 Мб\сек
За их работу отвечает USB 2.0 концентратор(HUB) и Ethernet – контроллер
LAN9514-JZX.
Для подключения аудио-разъемов предусмотрен разъем:
- mini-Jack 3.5 мм, который совмещен с композитным RCA-видеовыходом и
может использоваться для вывода видео в форматах PAL и NTSC
- HDMI ( спецификации 1.3 и 1.4) для вывода графики на монитор ПК или
телевизор
Далее находится разъем Micro USB для подключения питания (минимальное
= 2 ампера. Для корректной и бесперебойной работы Raspberry Pi 3 производителем
рекомендуется 2.5 А)
Рядом располагаются два индикатора работы одноплатного компьютера - 2
светодиода. Красный показывает наличие питания, а зеленый сигнализирует об
обращении к SD-карте.
Так же на самой плате распаяны два разъема :
-CSI (Camera Serial Interface) – 15-пиновый MIPI для подключения камеры
-SI (Display Serial Interface) – для подключения дисплея.
Рядом с разъемом для подключения дисплея находится антенна Wi-Fi и
Bluetooth контроллера беспроводной связи.
Так же на лицевой стороне находится разъем
-GPIO (general-purpose input\output(интерфейс ввода\вывода общего
назначения))
40-пиновый разъем (2*20) . Схема разъема представлена на рис. 8.

Рис. 8 - 40 клеммный разъем


12 пинов для обеспечения питания: 8 пинов “земля”, два по 3.3В и два 5.5 В.
Данный разъем необходим для подключения внешних устройств и
взаимодействия с ними.
Чтобы работать с одноплатным компьютером Raspberry Pi, нужно иметь карту
памяти Micro SD c минимальном объемом 4 Гб и классом скорости устройства не
ниже 10-го. На карте памяти должен быть записан образ операционной системы,
который можно скачать с официального сайта Raspberrypi.org.

Аналогово-цифровой преобразователь ADS 1256


АЦП — электронное устройство, которое преобразует напряжение в
двоичный цифровой код.
Технические характеристики ADS1256

Архитектура АЦП сигма-дельта(sigma-delta)

Разрешение (Бит) 24

Частота дискретизации (выб/сек.) 30k

Число каналов A/D (конвертеров) 1

Число входных каналов измерения 2

дифференциальный, с общей
Тип входа
землей

Интерфейс данных SPI

Напряжение питания: аналоговое /


5 в/1.8…3.6 в
цифровое

Тип монтажа Поверхностный

Корпус (размер) 28-SSOP (0.209", 5.30mm Width)

Корпус 28-SSOP
Фотография и распиновка ADS1256 представлена на рисунке 9.

Рис. 9 - Фотография и распиновка ADS1256

Модели семейства ADS1255 и ADS1256 владеют гораздо лучшими


параметрами. При максимальной частоте дискретизации 30 кГц потребляемая
мощность не превосходит 35 мВт. Особенностью этих АЦП является применение
программируемого цифрового ФНЧ, благодаря которому
получается достичь очень низкого уровня шумов и высокой̆ эффективной̆
разрядности. Например, при коэффициенте усиления PGA = 64 и частоте
дискретизации 30 кГц, среднеквадратичное напряжение шумов, приведенное ко
входу, составляет 1,2 мкВ, а значение эффективной̆ разрядности равно 17.
Возможна работа АЦП в режиме одно- кратного преобразования с последующим
переходом в экономичный̆ режим Standby с энергопотреблением 0,4 мВт.
Дополнительно в состав ИМС входит детектор состояния входного датчика,
отключаемый̆ входной̆ буферный̆ усилитель, входной̆ мультиплексор на 4
дифференциальных входа у ADS1256, усилитель PGA и встроенный̆ тактовый̆
генератор, способный̆ функционировать в режиме внешней̆ синхронизации или с
подключаемым к специальным выводам ИМС кварцевым резонатором. Кроме
последовательного интерфейса ADS1255 имеет два, а ADS1256 — четыре
цифровых ввода/вывода общего на значения (GPIO), параметры которых
устанавливаются записью соответствующих управляющих битов в регистр
ввода/вывода АЦП. GPIO остаются активными и в режимах Standby и Power-down
и автоматически переходят в режим ввода после перехода ИМС в активный̆ режим.
Если данные выводы не используются, для экономии энергии изготовитель ИМС
рекомендует установить их как линии вывода и оставить свободными или
установить как линии ввода и соединить с общим проводом. Следует отметить, что
для питания цифровой части АЦП ADS1255/6 необходим источник напряжением
от 1,8 до 3,6 В (рекомендуемое значение 3,3 В).

2.3. Структурная схема разрабатываемого блока.


Структурная схема разрабатываемого блока визуально показывает алгоритм
работы измерительно-управляющей системы. Оператор с помощью одноплатного
компьютера Raspberry Pi управляет клапанами и компрессором установки “Методы
и технические средства измерения давлений”. Далее после того, как датчики
реагируют на изменение давления, сигнал с них получает АЦП ADS 1256, которое
преобразует напряжение в двоичный код. Этот код попадает обратно в
одноплатный компьютер Raspberry Pi, с помощью которого проанализировать
результаты. Взаимодействие Raspberry Pi и других компонентов системы возможно
организовать с использованием среды динамического моделирования SimInTech.

Наглядное изображение схемы представлено на рисунке 10.


Рис. 10 - Изображение схемы разрабатываемого блока

Описание программного пакета


В качестве программы для создания модели и построения графиков была
выбрана российская система модельно-ориентированного проектирования систем
автоматического управления-SimInTech.

Программное обеспечение SimInTech включает себя исполнительную среду


реального времени NordWind и графическую среду разработки.

SimInTech – является средой для создания математических моделей,


интерфейсов управления, алгоритмов управления, и автоматической генерации
кода для графических дисплеев и программируемых контроллеров.

C помощью исполнительной системы реального времени NordWind,


программа позволяет запускать построенные алгоритмы на контроллере .

SimInTech был разработан для детального анализа и исследования


нестационарных процессов в разнообразных системах управления. В виде
структурного проектирования логико-динамических систем, описываемых во
отношениях входа-выхода, в виде систем обыкновенных дифференциальных
уравнений и/или дифференциально-алгебраических уравнений в программном
пакете SimInTech происходит создание математических моделей и алгоритмов
управления.

С помощью SimInTech решаются задачи моделирования объектов


ВПК/ОПК, атомных объектов, энергетических объектов, нефтегазовых объектов,
аэрокосмических объектов, транспортных объектов и многих других. Кроме
этого, SimInTech предназначен для создания тренажёров.

Рисунок 1 – Логотип компании

Основной функционал и библиотеки SimInTech в виде списка:


библиотека Динамики ЛА;
библиотека Внешних модели;
библиотека Обмена данными;
клиент OPC;
клиент удаленного управления;
сервер удаленного управления;
теплогидравлический расчетный код;
библиотека Свойств воды и водяного пара;
библиотека Точечной кинетики нейтронов;
библиотека Гидравлических и пневматических систем (силовых);
библиотека Баллистики КА;
база данных сигналов;
графический редактор;
генератор кода Си;
генератор кода ST.
библиотека Статистики;
библиотека Обработки сигналов;
библиотеки Автоматики;
библиотека Конечных автоматов;
библиотека Электротехнического оборудования для анализа электрических
цепей в действующих значениях;
библиотека Электротехнического оборудования для анализа электрических
цепей в мгновенных значениях;
библиотека Электрических приводов;
библиотека Механики;
библиотека Связи;
модуль трехмерной визуализации;
система расчета надежности, отказоустойчивости и стоимости
обслуживания;
средства верификации Verilog;
библиотека Нейронных сетей;
библиотека Обработки изображений;
библиотека Нечеткой логики;

Для разработки собственных библиотек и для подключения сторонних


программные модули на различных языках программирования (Си,
Паскаль, Фортран и других) SimInTech обладает открытым интерфейсом.
В SimInTech есть шаблоны, позволяющие произвести сборку исполняемого
кода для различных операционных систем:
ОСРВ QNX/КПДА;
ОСРВ Linux;
Schneider Electric;
B&R;
любых микроконтроллеров без ОСРВ (например, для микроконтроллеров
АО «ПКК «Миландр, ОА «НИИЭТ», STM32, Texas Instruments, Arduino и
других).
Автоматический генератор кода SimInTech для дисплеев позволяет
сохранить графические изображения в виде файлов в форматах «xml» и
«svg», которые могут быть интерпретированы плеером видеокадров,
работающим под операционными системами QNX/КПДА.

Исполнительная система реального времени NordWind


Исполнительная система реального времени NordWind для исполнения
сгенерированного кода на целевой системе (контроллере) обладает модульной
(микроядерной) архитектурой, позволяющей гибко настроить контроллер.

В состав NordWind входят следующие модули:

Система сетевого обмена;


Система восстановления канала управления;
Кольцевой архив;
Сервер доступа к базе данных;
Сервер удаленной отладки
Комплект разработчика ПО.
Среда реального времени NordWind работает на целевой системе
(контроллерах) под операционными системами QNX/КПДА и Linux.

На основании полученной модели на конечных установки в SimInTech


изображения, которой представлено на рисунках, произведем генерацию кода.

Рис. 36 – Внешний вид SimInTech модели интерфейса

Рис. 35 – Внешний вид карты состояний конечного автомата


Рис. 29 – Внешний вид окна “Сброс”

Рис. 30 – Внешний вид окна “Накачка”


Рис. 31 – Внешний вид окна “Спуск”

Рис. 32 – Внешний вид окна “Запись значений”


Рис. 34 – Внешний вид окна “Конец эксперимента”
Для начала соединим все необходимые элементы схемы на мактной плате.
Фотография соединения Raspberry Pi и остальных компонентов, размещенных на
макетной плате, представлено на рисунке 39.

Рис. 39 – Соединение Raspberry Pi и компонентов


Следующим шагом будет соединение макетной платы и Raspberry Pi с
установкой “Методы и технические средства измерения давления”. Изображение
предоставлено на рисунке 40.

Рис. 40 – подключение микропроцессора Raspberry Pi к установке


“Измерение давлений”

Чтобы соединить Raspberry Pi и SimInTech нужно настроить удаленный


доступ к Rpi, что включает в себя удаленную командную строку и удаленный
доступ к файлам. Соединение ПК и Raspberry Pi происходит по протоколу SSH
через кабель Ethernet.

В верху рабочего окна программы SimInTech выберем режим отладки


удаленный и запустим генератор кода Си, откроем файл конфигурации.

После открытия кодогенератора выбираем вкладку загрузка и нажимаем


“Пересобрать модули и конфигурацию ”. Изображение окна Кодогенератора Си
представлено на рисунке 41.

Рис. 41 – Внешний вид окна Кодогенератора Си

После этого в папке, в которой содержится данный проект, будет создана


директория src. Там будут, так же еще 4 файла, которые нужно будет скопировать
в путь: /home/NordWind на Raspberry Pi с помощью файлового менеджера WinSCP..
Эти фаилы - default.conf, my_diagram.extvars, my_diagram.invars, my_diagram.so -
будут загружены в приложение. Изображение окна WinSCP представлено на рис.
42.

Рис. 42 – Внешний вид окна окна WinSCP

Далее через терминальное окно Putty переходим в командную строку. После


ввода пароля подключения к Raspberry Pi вводим следующие команды:

- sudo –i . Эта команда необходима для получения прав администратора.

Изображение окна PuTTY представлено на рисунке 43.


Рис. 43 – Внешний вид окна окна PuTTY

Далее прописываем путь к папке, где лежат файлы на RPi:

cd /home/NordWind и ./GdbServer . Этими командами запускается сервер


удаленной отладки. Изображение сервера удаленной отладки представлено на
рисунке 44.

Рис. 44 – Внешний вид окна удаленной отладки


Далее в окне кодогенерации на вкладке “Отладчик” нажать “Подключится к
прибору”.

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


конфигурации и Run (зеленая стрелочка) на верхней панели

SimInTech. Изображение окна кодогенерации, вкладка “Отладчик” в


готовности подключения к прибору представлено на рисунке 45.

Рис. 45 – Внешний вид окна кодогенерации “Отладчик”

После окончания цикла программы, SimInTech вывел следующие графики:

Испытание №1.
Данный график получен с учетом того, что выход давления из клапанов шел
из двух клапанов, и сигнал сначала не проходил на установку из-за плохого
контакта. Изображение окна представлено на рисунке 46.

Красного цвета – значения напряжения эталонного датчика

Желтый – график значений напряжения в точке исследуемого датчика. Точка


соответствует времени стабилизации давления в установке после спуска Розовый –
значения напряжения проверяемого датчика

Рис. 46 - Испытание №1. Значение напряжения датчиков

Так же график работы Компрессора, и Клапанов 1,2,3.

Компрессор – синий, Клапан 1- розовый, Клапан 2 – желтый, Клапан 3 –


голубой. Изображение представлено на рисунке 47.
Рис. 47 - Испытание №1. Компрессор и клапаны

Испытание №2.

Интерфейс SimInTech в процессе работы программы и получения результатов


представлен на рисунке 48.
Рис. 48 - Интерфейс SimInTech в процессе работы программы и получения
результатов

Красного цвета – значения напряжения эталонного датчика

Желтый – график значений напряжения в точке исследуемого датчика. Точка


соответствует времени стабилизации давления в установке после спуска.

Розовый – значения напряжения проверяемого датчика.

Окно с изображением графиков эксперимента №2 представлено на рисунке 49.


Рис. 49 - Испытание №2. Датчики

Поверяемый датчик содержит помехи и скачки показаний на некоторых этапах


проведения опыта в связи с нестабильностью напряжения в сети при включении и
выключении компрессора, но на подавляющей его части графики показаний
совпадают. Отсюда можно сделать заключение о том, что поверяемый датчик
показывает сопоставимые показатели с эталонным. Следовательно, работает
корректно.

Так же присутствует график включения\отключения Компрессора – синий, и


Клапана 1 – розовый цвет, Клапана 2 – желтый цвет и Клапана 3 – голубой цвет.
График представлен на рисунке 50.
Рис. 50 - Испытание №2. Компрессор и клапаны

Как видно из предоставленного графика, все записи значений с испытуемого


датчика получаются как раз во время работы Клапана 2 – на спуске давления.

Для каждой контролируемой точки диапазона проводим расчеты погрешности


датчика - отклонения результата измерений от действительного значения
измеряемой величины. В связи с тем, что на выходе датчика измеряется
напряжение, в качестве измеряемой величины принимаем - напряжение.(Данное
допущение обоснованно в связи с наличием однозначной зависимости значения
напряжения на выходе датчика от значения давления на его входе).

Значение абсолютной погрешности в любойточке рассчитывается по формуле:

где х—значение напряжения на выходе исследуемого


(поверяемого) датчика;
X0 — действительное значение измеряемой величины – напряжения на выходе
эталонного датчика.

Значения погрешностей при измерении напряжения на выходе с исследуемого


датчика составили от 0 до 0.02мВ.

ПРИЛОЖЕНИЕ

//************* ФУНКЦИИ РАБОТЫ С СИМИНТЕК **********//


// Считываетм с первых друх каналов, поэтому число каналов ch_num = 2
static const uint8_t ch_num = 2;
static const uint8_t ctrl_num = 4;
uint8_t id; // id прибора - не трогать
int32_t adc_0; // Отсчеты АЦП
int32_t adc_1; // Отсчеты АЦП

double fvolt_0; // Вольты на АЦП


double fvolt_1;

double ctrl_0; // Управление


double ctrl_1;
double ctrl_2;
double ctrl_3;

uint8_t i;
int32_t iTemp;
uint8_t buf[3];

struct GROUP mes = {0}; // Группа сигналов измерений


struct GROUP ctrl = {0}; // Группа сигналов оценок управлений
/******************************************************************
************
FUNCTION my_init()
Процедуру предназначенна для инициализации структур данных пользователя
и
полностью формируется пользователем

(процедура вызывается Исполняемой средой после инициализации основных


переменных необходимых для работы библиотеки)

ARGUMENT
нет
OUTPUT:
нет

RETURN VALUE:
нет

******************************************************************
*************/
void my_init(void)
{
// Имена сигналов измерений
char *name_mes[] = {"mes_v0","mes_v1"};
// Имена сигналов оценок
char *name_ctrl[] = {"ctrl_u0","ctrl_u1","ctrl_u2","ctrl_u3"};
// Группа сигналов измерений
make_group(&mes,name_mes,ch_num);
// Группа сигналов оценок
make_group(&ctrl,name_ctrl,ctrl_num);
//while(1);

// Инициализация прибора (АЦП и цифровые ножки)


// АЦП
// ЧИСЛО КАНАЛОВ
//ch_num = 2; // max = 8
if (!bcm2835_init())
{
printf("INIT FAIL\n");
while(1);
}
// GPIO SETUP
bcm2835_gpio_fsel(19, BCM2835_GPIO_FSEL_OUTP);
bcm2835_gpio_fsel(16, BCM2835_GPIO_FSEL_OUTP);
bcm2835_gpio_fsel(26, BCM2835_GPIO_FSEL_OUTP);
bcm2835_gpio_fsel(20, BCM2835_GPIO_FSEL_OUTP);
/*
while(1){
bcm2835_gpio_write(21,1);
bcm2835_delay(50);
bcm2835_gpio_write(21,0);
bcm2835_delay(50);
}
*/

bcm2835_spi_begin();
bcm2835_spi_setBitOrder(BCM2835_SPI_BIT_ORDER_LSBFIRST ); // The
default
bcm2835_spi_setDataMode(BCM2835_SPI_MODE1); // The default
bcm2835_spi_setClockDivider(BCM2835_SPI_CLOCK_DIVIDER_1024); //
The default
bcm2835_gpio_fsel(SPICS, BCM2835_GPIO_FSEL_OUTP);//
bcm2835_gpio_write(SPICS, HIGH);
bcm2835_gpio_fsel(DRDY, BCM2835_GPIO_FSEL_INPT);
bcm2835_gpio_set_pud(DRDY, BCM2835_GPIO_PUD_UP);
//ADS1256_WriteReg(REG_MUX,0x01);
//ADS1256_WriteReg(REG_ADCON,0x20);
//ADS1256_CfgADC(ADS1256_GAIN_1, ADS1256_15SPS);
id = ADS1256_ReadChipID();
printf("\r\n");
printf("ID=\r\n");
if (id != 3)
{
printf("Error, ASD1256 Chip ID = 0x%d\r\n", (int)id);
}
else
{
printf("Ok, ASD1256 Chip ID = 0x%d\r\n", (int)id);
}
ADS1256_CfgADC(ADS1256_GAIN_1, ADS1256_30000SPS);
ADS1256_StartScan(0);

// /*********Пример**************************/
// char *name[] = {"z1_xy01", "z1_xy02", "z1_xy03", "z1_xy04",
"z1_xy05"};
// /*Создаем группу из 5 сигналов*/
// make_group(&gr1, name, 5);
// /*********Конец Примера******************/

/******************************************************************
************
FUNCTION read_io()
Процедура вызывается исполняемой средой перед началом работы расчетных
модулей
Формируется пользователем. Предполагается считывание сигналов с
устройств ввода
вывода и запись их в бд сигналов для последующей обработки расчетными
модулями

ARGUMENT
нет

OUTPUT:
нет
RETURN VALUE:
нет
******************************************************************
*************/
void read_io(void)
{
// Чтение с АЦП
/*
for (i = 0; i < ch_num; i++)
{
adc[i] = ADS1256_GetAdc(i);
volt[i] = (adc[i] * 100) / 167;
fvolt[i] = adc[i]/pow(2.0,23.0)*5.0; // ЭТО ПОЙДЕТ В БД
сигналов (СИмИнТек)
}
*/
while((ADS1256_Scan() == 0));

adc_0 = ADS1256_GetAdc(0);
fvolt_0 = adc_0/pow(2.0,23.0)*5.0; // ЭТО ПОЙДЕТ В БД сигналов
(СИмИнТек)

adc_1 = ADS1256_GetAdc(1);
fvolt_1 = adc_1/pow(2.0,23.0)*5.0; // ЭТО ПОЙДЕТ В БД сигналов
(СИмИнТек)

printf("\n%f\t%f\n\n", fvolt_0,fvolt_1);

// Запись сигналов в группу измерений


set_value_in_group(&mes, 0, &fvolt_0); // АЦП0
set_value_in_group(&mes, 1, &fvolt_1); // АЦП1

// Обновление группы сигналов


write_group(&mes);

// /*********Пример**************************/
// static unsigned char count = 0;
// static double count_d = 0;
// /*Запишем в группу*/
// /* второй фактический параметр 0 - соответствует первому сигналу в
группе
// * z1_xy01
// */
// set_value_in_group(&gr1, 0, &count);
// /* второй фактический параметр 3 - соответствует четвертому сигналу
в группе
// * z1_xy04
// */
// set_value_in_group(&gr1, 3, &count_d);
// /*Записываем значения сигналов в группе в бд*/
// write_group(&gr1);
// count++;
// count_d++;
// /*********Конец Примера******************/

/******************************************************************
************
FUNCTION write_io()
Процедура вызывается исполняемой средой после работы исполняемых
модулей.
Предполагается запись сигналов из бд в устройства вывода
ARGUMENT
нет

OUTPUT:
нет
RETURN VALUE:
нет
******************************************************************
*************/
void write_io(void)
{
// Считать сигналы управления из БД
// Данные логического типа из одного числа
unsigned char MyDataType = 0;
int MyLen = 0;

read_group(&ctrl);
get_value_from_group(&ctrl, 0, &ctrl_0, &MyDataType, &MyLen);
get_value_from_group(&ctrl, 1, &ctrl_1, &MyDataType, &MyLen);
get_value_from_group(&ctrl, 2, &ctrl_2, &MyDataType, &MyLen);
get_value_from_group(&ctrl, 3, &ctrl_3, &MyDataType, &MyLen);

printf("%f\n",ctrl_0);
printf("%f\n",ctrl_1);
printf("%f\n",ctrl_2);
printf("%f\n",ctrl_3);

// Цифровой вывод
// bcm2835_gpio_write(PIN,HIGH/LOW)
/*
if (ctrl_0 < 0.5) bcm2835_gpio_write(RPI_GPIO_P1_11,LOW); else
bcm2835_gpio_write(RPI_GPIO_P1_11,HIGH);
if (ctrl_1 < 0.5) bcm2835_gpio_write(RPI_GPIO_P1_11,LOW); else
bcm2835_gpio_write(RPI_GPIO_P1_11,HIGH);*/
if (ctrl_0 < 0.5) bcm2835_gpio_write(19,0); else bcm2835_gpio_write(19,1);
if (ctrl_1 < 0.5) bcm2835_gpio_write(16,0); else bcm2835_gpio_write(16,1);
if (ctrl_2 < 0.5) bcm2835_gpio_write(26,0); else bcm2835_gpio_write(26,1);
if (ctrl_3 < 0.5) bcm2835_gpio_write(20,0); else bcm2835_gpio_write(20,1);
/*bcm2835_gpio_write(21,1);
bcm2835_delay(50);
bcm2835_gpio_write(21,0);
bcm2835_delay(50);*/

printf("\n");

/*
for (i = 0; i < ctrl_num; i++)
{
get_value_from_group(&mes, i, &ctrl[i], &MyDataType, &MyLen);
printf("%b\n",ctrl[i]);
}
*/

// /*********Пример**************************/
// unsigned char data_type1 = 0;
// unsigned char data_type2 = 0;
// int len1 = 0;
// int len2 = 0;
// unsigned char x = 0;
// double y = 0;
// /*Читаем группу из бд*/
// read_group(&gr1);
// /*Получим из группы значение сигнала*/
// /* второй фактический параметр 1 - соответствует второму сигналу в
группе
// * z1_xy02
// */
// get_value_from_group(&gr1, 1, &x, &data_type1, &len1);
// printf("x: %d len: %d type: %d \n", (int)x, len1, data_type1);
// /* второй фактический параметр 3 - соответствует четвертому сигналу
в группе
// * z1_xy04
// */
// get_value_from_group(&gr1, 3, &y, &data_type2, &len2);
// printf("y: %f len: %d type: %d \n", y, len2, data_type2);
// /*********Конец Примера******************/

Вам также может понравиться