logo
Блок управления источником питания Bertan 210

2.2 Программное обеспечение

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

Программное обеспечение, необходимое для микроконвертора, включает:

-Основную программу, постоянно работающую на контроллере

-Программу, отвечающую за общение с системой управления по протоколу Modbus

Функции основной программы

Для защиты памяти основной программы, в структуре памяти контроллера была выделена область, называемая далее буфером (Рис. 2). Основная программа, запущенная на контроллере должна свободно работать с этой областью, а Modbus должен иметь доступ только к этой области памяти. Буфер характеризуется адресом его начала в памяти и размером в байтах.

Рис. 2 «Буфер»

Для предотвращения коллизий должна существовать возможность блокировать Modbus в те моменты, когда основная программа работает с буфером.

Основная программа должна периодически проверять, не изменилось ли какое-либо значение в буфере. В случае изменений необходимо преобразовать значение напряжения, полученное в инженерном формате, в 12ти разрядное положительное число, а затем выставить это число на АЦП.

Также, основная программа должна периодически считывать значения с АЦП, и цифрового входа, отображающие текущие значения выходных напряжения и тока блока питания и его полярности. При получении Modbus запроса от мастера с просьбой узнать значение этих параметров, основная программа должна сообщить последние сохранённые значения.

В функции основной программы также входит самокалибровка АЦП и ЦАП, используя показания встроенного температурного сенсора.

Описание протокола Modbus

Выбранный протокол Modbus не определяет физический уровень передачи данных. Существуют реализации Modbus для RS-232/485, TCP/IP, Ethernet. Было бы нецелесообразно использовать Ethernet или TCP/IP реализацию Modbus, из-за относительно большого объёма метаданных в посылках и ограниченности имеющихся ресурсов [4].

Остановимся на стандартной спецификации Modbus для интерфейса RS-232, определяющего назначение выходов разъёмов, уровни сигналов, скорости передачи данных и наличие проверки чётности [5].

Устройства взаимодействуют, используя технологию главный-подчиненный, при которой только одно устройство (главный, master) может инициировать передачу (сделать запрос). Другие устройства (подчиненные, slave) передают запрашиваемые главным устройством данные, или производят запрашиваемые действия.

В данной реализации master - управляющий компьютер, а slave - контроллер внутри разработанного устройства.

Мастер может адресоваться к определённому подчиненному или инициировать широковещательный запрос ко всем подчиненным устройствам. Подчиненное устройство возвращает сообщение в ответ на запрос, адресуемый именно ему. При широковещательном запросе ответы не возвращаются.

Рис. 3 Цикл запрос - ответ

Запрос: Код функции в запросе подчиненному устройству определяет, какое действие необходимо произвести (Рис. 3). Поле данных содержит информацию необходимую для выполнения запрошенной функции.

Ответ: Если подчиненный отправляет нормальный ответ, код функции в ответе повторяет код функции в запросе. В поле данных содержится потребованная информация. Если произошла ошибка, то код функции модифицируется, и в поле данных передается код причины ошибки.

В любой посылке присутствует поле проверки ошибок.

При использовании MODBUS необходимо выбрать один из двух режимов последовательной передачи данных: ASCII или RTU. При использовании ASCII режима каждый байт сообщения передается как два ASCII символа. Существенным различием между режимами является то, как подчинённое устройство определяет, принадлежность очередного пришедшего символа к той или иной посылке. В ASCII режиме пакеты разделяются определённым символом, а в режиме RTU необходимо отмерять промежутки времени, прошедшего с приёма предыдущего символа.

Содержимое поля проверки ошибок определяется по алгоритму, выбор которого зависит от выбранного режима Modbus (ASCII или RTU).

При написании Modbus для микроконтроллеров семейства Intel 8051, размеры RAM которых не превышают 256 байт, было бы неоптимально реализовывать режим ASCII, т.к. потребовалось бы сохранение всех пришедших символов до момента прихода символа «:», разделяющего посылки. Таким образом, оптимальней использовать режим RTU (Рис. 4).

Рис. 4 Структура пакета Modbus RTU

Создание библиотеки Modbus slave

Учитывая то, что в автоматизации работы установки ГДЛ используется большое количество контроллеров семейства MCS-51, возникло желание создать библиотеку для унификации работы контроллеров семейства Intel MCS-51 по стандартному промышленному протоколу. В качестве протокола был выбран Modbus, работу с которым можно реализовать для выбранного семейства.

Специфика работы заключается в крайней ограниченности ресурсов микроконтроллера MSC-51 (в частности RAM), которые делятся между основной программой и программой работы по Modbus.

Рассматривая основные параметры контроллеров во всём семействе MSC-51, отметим, что объём памяти RAM для разных моделей меняется от 128 байт до 256 байт. Длина пакета Modbus ограничена сверху 256 байтами [6], то есть slave сможет обработать не всякую посылку. Также, спецификация Modbus позволяет использовать до 255 различных кодов функций, но для работы каждого slave, нужны далеко не все.

Необходимо создать интерфейс к данной библиотеке, позволяющий запускать на контроллере Modbus slave с определёнными ограничениями. Например, необходимо программно отслеживать слишком длинные пакеты и неподдерживаемые коды функций, а затем реагировать на них согласно спецификации протокола.

Данная библиотека, находящаяся сейчас в разработке, должна позволять запустить на определённом контроллере семейства Intel 8051 протокол Modbus с учётом значений следующих параметров:

- Последовательная скорость передачи (9600 бит/c , 19200 бит/c и т.п.)

- Объём RAM

- Адрес начала в оперативной памяти и размер буфера

- Список используемых функций Modbus

- Наличие/отсутствие проверки чётности

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

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

- Запуск Modbus с заданными значениями параметров

- Заблокировать работу Modbus на время обработки транзакции

- Разблокировать работу Modbus

- Прекращение работы Modbus

С точки зрения разработчика библиотеки выделяются следующие функции:

-Инициализация и запуск протокола с заданными параметрами

-Приём очередного байта посылки, для этого необходимо последовательно совершить следующие действия:

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

· Определить, к какой части посылки относится данный байт (пришёл ли нам адрес устройства, код функции, байт данных или байт контрольной суммы)

· Проверить корректность полученного значения в соответствии с функциональным назначением байта (например, не было ли обращения к регистру за пределами буфера, совпадает ли пришедший адрес с собственным адресом устройства)

· Сохранить байт

- После окончания приёма всей посылки, проверить правильность контрольной суммы по алгоритму CRC (определён спецификацией для Modbus RTU)

- Выполнить запрашиваемое мастером действие, например:

· Считать значение регистра по заданному адресу

· Задать указанные значения для группы регистров и т.д.

- Отослать мастеру ответ

- Заблокировать/ разблокировать работу Modbus slave

- Отключить библиотеку

Инструменты

Для разработки программного продукта была использована интегрированная среда разработки µVision3, поставляемая в комплекте с платой AduC842 SAR Eval Board Rev A3. Эта среда включает редактор, управление проектами и создание объектного кода. Встроенные в µVision3 инструменты включают компилятор С, макроассемблер, линкер и генератор hex файлов. Есть возможность отладки программного кода.

Учитывая специфику работу, связанную с ограниченностью ресурсов, было поставлено требование, использовать как можно меньшие объёмы памяти контроллеров. Для решения этой задачи подходит язык макроассемблера [7].

Результаты

На текущий момент изучены соответствующие спецификации [1-7] и инструменты разработки, а также реализованы функции:

- Инициализация и запуск протокола с заданными параметрами

- Приём очередного байта посылки:

· Определение принадлежности байта посылке, подсчёт таймингов

· Распознание части посылки, к которой принадлежит байт

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

· Сохранить байт

- Проверка контрольной суммы CRC

- Временная блокировка работы Modbus slave

- Для основных функций Modbus выполнение запрашиваемых действий и формирование ответа (чтение и запись регистра по заданному адресу)

Отлажена посылка и получение одного байта. Необходимо отладить написанные функции для работы с Modbus.

Для завершения реализации решения необходимо :

- Написать интерфейс для библиотеки Modbus master с использованием LabView

- Отладить работу написанных функций

- Отладить взаимодействие макетной платы AduC842 SAR Eval Board Rev A3 с добавленными сопрягающими компонентами и источника питания Bertan 210