Все, что нельзя запрограммировать на ассемблере, приходится паять.
Этот сайт посвящен моим проектам на PIC контроллерах, доступных для публичного освещения. Все приведенные схемы реализованы в железе и работают в настоящее время в быту или производстве.
Для написания программ использован пакет MPLAB/х , свободно распространяемый фирмой MICROCHIP.
Используется программатор PICKIT2/3, ICD2/3.
Любую конструкцию можно собрать самому, даже если она платная и получить бесплатно код разблокировки.
Также можно приобрести в качестве набора для сборки или готового изделия.
Принимаются заказы на разработку аналогово-цифровой или цифровой электроники, систем управления и электроники для производства с применением контроллеров.
Вопросы и предложения писать на почту Gennadiy.V@gmail.com
Если у Вас есть интересные предложения, закакзы или вопросы и форум Вам не помог - адрес тот же.
Интерфейс MODBUS RTU MASTER
Данный контроллер поддерживает интерфейс связи с подчиненными контроллерами DEVICE PICµBASIC . В качестве протокола выбран распространенный стандарт MODBUS RTU.
Для управления и контроля подчиненными контроллерами использованы стандартные функции протокола. Применительно к встроенному языку операторы поддерживают обмен значениями переменных BASIC между контроллерами по инициативе мастер устройства. Для подчиненного устройства обмен происходит в фоновом режиме, не зависимо от исполняемой там программы.
Дополнительно реализован служебный обмен данными для прозрачной работы удаленного терминала и загрузки обновленных прошивок через сеть Ethernet
Общий алгоритм обмена выглядит следующим образом.
- Мастер (WEB PICµBASIC) выполняет программу и с помощью соответствующих операторов запрашивает переменную или передает переменную в подчиненный контроллер с выбранным адресом.
- Слейв DEVICE PICµBASIC в фоновом режиме, не прекращая выполнения своей программы, обрабатывает запрос и выполняет указанные действия. Модифицирует свою переменную в соответствии с принятым значением или передает значение своей переменной. В случае такого обмена имена переменных в обоих контроллерах совпадают.
После выполнения операции Слейв отсылает подтверждающий пакет о выполненных действиях или пакет с данными.
- Мастер принимает ответ и возвращает из функции статус операции – успешно или ошибка, также принимает данные в указанную переменную, если пришли данные. Время выполнения данных функций вариабельно и зависит от времени ответа слейв устройства. Максимальное время ожидания ответа до ошибки тайм аута - 500 mS.
Дополнительную информацию о временных параметрах обмена смотрите в приложении.
Доступ в режиме терминала.
Если программа остановлена, и контроллеры находятся в терминальном режиме, то появляется доступ к терминалу слейв устройства. Для этого необходимо в программе терминала, после соединения с WEB PICµBASIC перевести в режим MODBUS с указанием адреса подчиненного устройства. После этого все команды от и к терминалу будут транслироваться на подчиненное устройство. Аналогично работает загрузка и выгрузка программ на Basic. Для удаленного обновления ПО Basic следует использовать Ethernet загрузчик .
В дальнейшем Слейв устройство может работать, как с обменом данными с мастером, или как самостоятельное устройство.
Адреса MODBUS RTU
Диапазон адресов – 1-127
Адрес = 0 – широковещательный – принимают все контроллеры. С этим адресом выполняется только одна команда - генерация нового случайного адреса.
Внимание, пред использованием этих команд необходимо включить и настроить порт UART – интерфейс RS485 115200 8N1
MDС |
Оператор запроса консоли для DEVICE PICµBASIC |
MDC а,data |
Отправляет текстовый пакет data, в устройство с адресом а, заданным переменной или числом, с номером функции 0x43 или 0x42. Добавляет заголовок, символы конца строки и контрольную сумму. |
MDWR |
Функция записи переменной для DEVICE PICµBASIC |
A=MDWR{a,D} |
В контроллер DEVICE PICµBASIC с адресом a из контроллера WEB PICµBASIC копируется переменная, указанная после запятой. В случае текстовой переменной, копируется весь текст(массив) до 63 байт. |
MDRD |
Функция чтения переменной для DEVICE PICµBASIC |
A=MDRD{a,D} |
Из контроллера DEVICE PICµBASIC с адресом a в контроллер WEB PICµBASIC копируется переменная, указанная после запятой. В случае текстовой переменной, копируется весь текст(массив) до 63 байт. |
MDRI |
Функция чтения информации для DEVICE PICµBASIC |
$(0)= MDRI{a} |
В текстовую переменную $(0) читается информация об устройстве с адресом а. В случае отсутствия или недоступности возвращается пустая строка. |
Операторы и функции работы с модулями расширения на шине MODBUS
MDBSR |
Функция чтения данных устройства MODBUS ( функция 0x41) Для модулей расширения датчиков и выходов |
A=MDBSR{a,N} |
Отправляет пакет в устройство с адресом = a, на чтение одного параметра с адресом параметра = N. Ожидает ответ не более 50 мс. Переменной А присваивает значение из ответа. Если ответа не было, переменной присваивается значение -32768. Устройство также может отдать значение -32768 если данный параметр не используется в нем. |
MDBSW |
Функция записи данных устройства MODBUS ( функция 0x42) Для модулей расширения датчиков и выходов |
A=MDBSW{a,N,D} |
Отправляет пакет в устройство с адресом = a, на запись одного параметра с адресом параметра = N, значением D. Ожидает ответ не более 50 мс. Переменной А присваивает значение из ответа. Если ответа не было или запись не удачна то переменной присваивается значение -32768 Если запись удачна, то A=D. |
MDBS$ |
Функция запроса из консоли. Для модулей расширения датчиков и выходов |
MDBS$ "data" |
Отправляет пакет data, принимает ответ, ответ отправляет в консоль. К отправляемому пакету добавляет контрольную сумму. Проверяет контрольную сумму принятого пакета, в консоль контрольная сумма не передается. |
MDwr |
Функция записи |
A=MDwr{a,M,D} |
Во внешнее устройство с адресом a из контроллера PICµBASIC записывается значение D в регистр с адресом M. Переменной А присваивается значение 1 в случае удачной операции или 0 в случае ошибки / недоступности. . |
MDrd |
Функция чтения |
A=MDrd{a,M,D} |
Из внешнего устройства с адресом a в контроллер PICµBASIC читается значение регистра с адресом M и помещается в переменную D . Переменной А присваивается значение 1 в случае удачной операции или 0 в случае ошибки / недоступности. В случае не удачи, значение в переменной D не изменяется. Поддерживается чтение только одного регистра за 1 раз. |
ПРИЛОЖЕНИЯ
Функции MASTER MODBUS RTU WEB PICµBASIC
В качестве регистров хранения (Read Holding Registers) в контроллерах выступают переменные.
3 (0x03) — чтение значений из одного или нескольких регистров хранения (Read Holding Registers).
Запрос состоит из адреса первого элемента таблицы, значение которого требуется прочитать, и количества считываемых элементов. Адрес и количество данных задаются 16-битными числами, старший байт каждого из них передается первым.
В ответе передаются запрошенные данные. Количество байт данных зависит от количества запрошенных элементов. Перед данными передается один байт, значение которого равно количеству байт данных.
Формат пакетов MODBUS
Запрос
1 байт – Адрес устройства
2 байт – Функция 0x03
3 байт - Адрес первой ячейки(параметра) (HIGH)
4 байт - Адрес первой ячейки(параметра) (LOW)
5 байт - Число ячеек(HIGH)
6 байт - Число ячеек(LOW)
7 байт - CRC (LOW)
8 байт - CRC (HIGH)
Ответ
1 байт – Адрес устройства
2 байт – Функция 0x03
3 байт - Счетчик байт данных
4 байт - Данные(addr) singed (HIGH)
5 байт - Данные(addr) singed (LOW)
--/ *+1 байт --/ Данные(addr+1) singed (HIGH)
--/ *+2 байт --/ Данные(addr+1) singed (LOW)
...
7/n-1 байт - CRC (LOW)
8/n байт - CRC (HIGH)
В случае указания числа ячеек = 2 происходит чтение/запись одной переменной singed 16 бит (A-Z, a-z).
В случае указания числа ячеек = 1 происходит чтение/запись индексной переменной.
Любая переменная передастся двумя байтами, в случае индексной переменной, старший = 0.
В случае указания числа ячеек = 0 происходит чтение/запись текстовой переменной с ее длинной (до 63 байт).
16 (0x10) — запись значений в несколько регистров хранения (Preset Multiple Registers)
Запрос
1 байт – Адрес устройства
2 байт – Функция 0x10
3 байт - Адрес первой ячейки(параметра) (HIGH)
4 байт - Адрес первой ячейки(параметра) (LOW)
5 байт - Число ячеек (параметра) (HIGH)
6 байт - Число ячеек (параметра) (LOW)
7 байт - Счетчик байт данных
8 байт - Данные(addr) singed (HIGH)
9 байт - Данные(addr) singed (LOW)
--/ *+1 байт --/ Данные(addr+1) singed (HIGH)
--/ *+2 байт --/ Данные(addr+1) singed (LOW)
...
7/n-1 байт - CRC (LOW)
8/n байт - CRC (HIGH)
Ответ
1 байт – Адрес устройства
2 байт – Функция 0x06
3 байт - Адрес первой ячейки(параметра) (HIGH)
4 байт - Адрес первой ячейки(параметра) (LOW)
5 байт - Число ячеек (параметра) (HIGH)
6 байт - Число ячеек (параметра) (LOW)
7 байт - CRC (LOW)
8 байт - CRC (HIGH)
В случае указания числа ячеек = 2 происходит чтение/запись одной переменной singed 16 бит (A-Z, a-z).
В случае указания числа ячеек = 1 происходит чтение/запись индексной переменной.
В случае указания числа ячеек = 0 происходит чтение/запись текстовой переменной с ее длинной (до 63 байт).
17 (0x11) — Чтение информации об устройстве (Report Slave ID)
Пример
-> ADR, 0x11, CRC_L, CRC_H
<- ARD, 0x11, кол-во байт, text- xx BYTES , CRC_L, CRC_H
Запрос
1 байт – Адрес устройства
2 байт – Функция 0x11
3 байт - CRC (LOW)
4 байт - CRC (HIGH)
Ответ
1 байт – Адрес устройства
2 байт – Функция 0x11
3 байт - Счетчик байт данных
4 байт и далее – Данные TEXT max 64b
...
/n-1 байт - CRC (LOW)
/n байт - CRC (HIGH)
Пользовательские функции
66 (0x42) — Данные BOOTLOADER
-> ARD, 0x42, text- xx BYTES , CRC_L, CRC_H
<- ARD, 0x42, text- xx BYTES , CRC_L, CRC_H
Запрос
1 байт – Адрес устройства
2 байт – Функция 0x42
3 байт и далее – Данные TEXT max 64b
/n-1 байт - CRC (LOW)
/n байт - CRC (HIGH)
Ответ
1 байт – Адрес устройства
2 байт – Функция 0x42
3 байт и далее – Данные TEXT max 64b
...
/n-1 байт - CRC (LOW)
/n байт - CRC (HIGH)
67 (0x43) — Данные терминала
-> ARD, 0x43, кол-во байт xx, text- xx BYTES , CRC_L, CRC_H
<- ARD, 0x43, кол-во байт xx, text- xx BYTES , CRC_L, CRC_H
Запрос
1 байт – Адрес устройства
2 байт – Функция 0x43
3 байт - Счетчик байт данных
4 байт и далее – Данные TEXT max 64b
...
/n-1 байт - CRC (LOW)
/n байт - CRC (HIGH)
Ответ
1 байт – Адрес устройства
2 байт – Функция 0x43
3 байт - Счетчик байт данных
4 байт и далее – Данные TEXT max 64b
...
/n-1 байт - CRC (LOW)
/n байт - CRC (HIGH)
Формат пакетов MODBUS RTU модулей расширения.
Запрос
1 байт – Адрес устройства
2 байт - Функция
3 байт - Адрес первой ячейки(параметра) (HIGH)
4 байт - Адрес первой ячейки(параметра) (LOW)
5 байт – Чтение - Число ячеек(HIGH) / Запись – Данные singed (HIGH)
6 байт - Чтение - Число ячеек(LOW) / Запись - Данные singed (LOW)
7 байт - CRC (LOW)
8 байт - CRC (HIGH)
Адресное пространство, выбор адреса – перемычками.
1 байт - Адрес = 0x10 - 0x1F - Блок датчиков
1 байт - Адрес = 0x20 - 0x2F - Блок силовых выходов
Поддерживаемые функции устройствами Блок датчиков и Блок силовых выходов
2 байт - Функции
17 (0x11) — Чтение информации об устройстве (Report Slave ID)
Пример
-> ADR, 0x11, CRC_L, CRC_H
<- ARD, 0x11, text- 32 BYTES , CRC_L, CRC_H
65 (0x41) Чтение данных устройства
-> ADR, 0x41, адрес ячейки -2 байта, число параметров 2 байта = 1(0x01 0x00), CRC_L, CRC_H
<- ARD, 0x41, число байт - 1байт = 0x02 , Данные 2 байта singed , CRC_L, CRC_H
66 (0x42) Запись данных в устройство
-> ADR, 0x42, адрес ячейки -2 байта, Данные 2 байта singed CRC_L, CRC_H
<- ARD, 0x42, адрес ячейки -2 байта, Данные 2 байта singed CRC_L, CRC_H
В случае успешной записи данные выходные = входным, не успешной данные выходные = -32768 (0x80,0x00)
70 (0x46) Запуск загрузчика (reboot)
-> ADR, 0x46, CRC_L, CRC_H
<- ADR, 0x46, CRC_L, CRC_H
Адреса ячеек данных и их возможные значения
В случае отсутствия/неисправности возвращает значение -32768
Блок датчиков
0 18B20 #1 температура (-55 … +127)
1 18B20 #2 температура (-55 … +127)
2 18B20 #3 температура (-55 … +127)
3 18B20 #4 температура (-55 … +127)
4 ADC 1 Значение АЦП (0-255)
5 ADC 2 Значение АЦП (0-255)
6 ADC 3 Значение АЦП (0-255)
7 ADC 4 Значение АЦП (0-255)
8 DHT22 температура (-400.. +800 = -40,0С - +80,0С)
9 DHT22 влажность (0-1000 = 0,0% - 100,0%)
Блок реле
Формат запроса - ответа
Адрес
Функция
Адрес первой ячейки (HIGH)
Адрес первой ячейки(LOW)
R- Число ячеек(HIGH)/W-data high
R- Число ячеек(LOW)/W-data low
********************
1 быйт - Адрес = 0x20 - 0x2F
2 байт - команды
17 (0x11) — Чтение информации об устройстве (Report Slave ID)
-> ADR, 0x11,crc,crc
<- ARD, 0x11, text- 32 BYTES ,crc,crc
65 (0x41) Чтение данных устройства
-> ADR, 0x41, addr register 2bytes, число параметров 2bytes = 1(01 00), crc,crc
<- ARD, 0x41, число байт 1 bytes = 2 (02 ), data 2 BYTES singed ,crc,crc
66 (0x42) Запись данных в устройство
-> ADR, 0x42, addr register 2bytes, data singed 2bytes (xx xx), crc,crc
<- ARD, 0x42, addr register 2bytes, data singed 2bytes (xx xx), crc,crc
70 (0x46) Запуск загрузчика
-> ADR, 0x46,crc,crc
<- ADR, 0x46,crc,crc
CRC - 2 байта
Адреса регистров
0 OUT #1 R/W
1 OUT #2 R/W
2 OUT #3 R/W
3 OUT #4 R/W
4 IN #1 R
5 IN #2 R
6 IN #3 R
7 IN #4 R
0x8
0x9
0xA
0xB
0xc
0xd
0xe
0xf
Для адресов 0-3 возможна запись и чтение.
Запись «1» в регистр обозначает включение, «0» - выключение
Чтение возвращает текущее состояние
Для адресов 4-7 возможно только чтение.
Значение «1» в регистре обозначает замкнутый вход , «0» - разомкнутый
На входы подключаются концевые выключатели или «сухой контакт»
Обработка ошибок
Ведущий отправляет запрос к Ведомому, в котором в поле «код функции» указывает ему на необходимое действие.
Байты данных содержат информацию, необходимую для выполнения данной функции.
Ведомый, в случае удачного выполнения этой функции, повторяет код функции в ответе.
При возникновении ошибки, код функции в ответе модифицируется — старший бит выставляется в 1.
В байтах данных передается причина ошибки. Например при исполнении Ведомым функции 0x0F возникла ошибка, тогда он ответит Ведущему полем функции равным 0x8F.
В дополнении к изменению кода функции, Ведомый размещает в поле данных уникальный код, который указывает на тип и причину ошибки.
Стандартные коды ошибок
01— Принятый код функции не может быть обработан.
02— Адрес данных, указанный в запросе, недоступен.
03— Значение, содержащееся в поле данных запроса, является недопустимой величиной.
04— Невосстанавливаемая ошибка имела место, пока ведомое устройство пыталось выполнить затребованное действие.
05— Ведомое устройство приняло запрос и обрабатывает его, но это требует много времени. Этот ответ предохраняет ведущее устройство от генерации ошибки тайм-аута.
06— Ведомое устройство занято обработкой команды. Ведущее устройство должно повторить сообщение позже, когда ведомое освободится.
07— Ведомое устройство не может выполнить программную функцию, заданную в запросе. Этот код возвращается для неуспешного программного запроса, использующего функции с номерами 13 или 14. Ведущее устройство должно запросить диагностическую информацию или информацию об ошибках от ведомого.
08— Ведомое устройство при чтении расширенной памяти обнаружило ошибку паритета. Ведущее устройство может повторить запрос, но обычно в таких случаях требуется ремонт
CRC-16 - циклически избыточный код - полином A001h
Физический интерфейс – RS485 115200 8N1
Адресное пространство
Диапазон адресов – 1-127
Адрес = 0 – широковещательный – принимают все контроллеры. С этим адресом выполняется только одна команда - генерация нового случайного адреса.
Временные диаграммы
Обработка запросов с функциями 3 (0x03), 16 (0x10), 17 (0x11) всегда выполняется в фонововом режиме, независимо от программы пользователя.
Одновременно может выполняться только один запрос. Минимальное время тишины 1,5 ms. Минимальное время до начала ответа – 0mS, типичное 1mS, максимальное 200 Ms (если контроллер занят функциями работы с другими критичными во времени интерфейсами). Время ожидания ответа мастером до ошибки таймаута - 500 mS.
Обработка запроса 67 (0x43) возможна в случае остановленной программы пользователя(консоль). Если запущена, то обрабатывается только одна команда - BREAK.
Обработка запроса 66 (0x42) возможна только в режиме BOOTLOADER. Минимальное время тишины 300us.
В случае ответа множеством посылок, сам контроллер формирует время тишины 2,5 mS.
Для модулей расширения
Минимальное время тишины 1,5 ms. Минимальное время до начала ответа – 0mS, типичное 1mS, максимальное 30 mS.
ПО распространяется под лицензией Shareware. Вы можете скачать с сайта схемы, инструкции, прошивки бесплатно.
Новые версии прошивок и документации скачивать в разделе Файлы / Files
Обсудить на форуме
Купить
Страницы
Общее описание и технические характеристики
Аппаратная платформа. Схемы, разводка.
Программное обеспечение. Bootloader - прошивка и программа загрузки.
Web PICµBASIC. Загрузка и установка
Программное обеспечение. BASIC_Terminal.
WEB PICµBASIC. Описание языка программирования
WEB PICµBASIC. Список команд, операторов, функций. Часть 1.
WEB PICµBASIC. Список команд, операторов, функций. Часть 2.
Web PICµBASIC. WebServer - настройка и программирование
Web PICµBASIC. Файловая система.
Web PICµBASIC. Модули расширения.
Дисплей HD44780. Схема подключения. Список команд, операторов, функций.
Интерфейс UART, RS232/RS485. Схема подключения. Список команд, операторов, функций.
Шина 1-Wire. Ключи и датчики. Схема подключения. Список команд, операторов, функций.
RFID EM-Marin 125 кГц. Схема подключения. Список команд, операторов, функций.
Датчик AM2302/DHT22. Схема подключения. Список команд, операторов, функций.
Дискретные входы. Схема подключения. Список команд, операторов, функций.
Интерфейс MODBUS RTU MASTER. Список команд, операторов, функций.
Клавиатура и силовые ключи. Схема подключения. Список команд, операторов, функций.
Примеры программирования.
Графический дисплей на контроллере UC1601s.