Для настройки модуля CP-9052 нам понадобится изучить "Описание протокола модуля CP-9052". Из этого документа следует, что формат посылки в модуль и ответ от него один и тот же и имеет размер 11 байт:
Номер байта в пакете |
Условное обозначение байта |
Назначение |
1 |
ADR |
Адрес устройства. Для модуля CP-9052 адрес всегда 1. В ответном пакете этот адрес будет иметь значение 0 т.к. предполагается, что компьютер имеет нулевой адрес.
|
2 |
TYPE |
Тип устройства. Модуль CP-9052 всегда имеет тип 52. Таким образом при ответе на запрос модуль указывает в данном байте значение 52. При получении пакета от компьютера модулем CP-9052 данный байт никак не учитывается.
|
3 |
COM |
Команда устройству. Данный байт определяет функцию, которую необходимо выполнить устройству. Более подробно будет описано ниже.
|
4 |
PAC |
Номер подпакета. Данный байт служит для пакетной передачи данных. Применяется когда необходимо передать устройству более 2 байт данных.
|
5 |
D2 |
Данные. Данные в зависимости от команды могут иметь разное назначение. Например, при команде 1 имеют значения активных реле, а при команде 2 значение нового адреса устройства.
|
6 |
D1 |
7 |
MY_ADR |
Адрес устройства отправителя. Байт содержит адрес устройства, от которого отправлен пакет. Таким образом, при ответе на запрос модуль указывает в данном байте значение своего адреса т.е. 1. При получении пакета от компьютера модулем CP-9052 данный байт никак не учитывается.
|
8 |
CRC2 |
Два байта контрольной суммы CRC16. Проверка CRC16 модулем CP-9052 не осуществляется в режиме конфигурирования. Кроме того, проверку CRC16 можно отключить с помощью соответствующей команды (См.описание команд ниже).
|
9 |
CRC1 |
10 |
0D |
Байты окончания пакета. В шестнацетиричном формате 0x0D, 0x0A. Всегда добавляются в конце пакета.
|
11 |
0A |
Теперь разберёмся с командами. Их для данного модуля шесть:
№ |
Значение байта СOM (в шестнацетеричном формате) |
Описание команды |
1 |
0x01 |
Команда управления реле. |
2 |
0x03 |
Команда изменить скорость работы модуля |
3 |
0x04 |
Команда запрос состояния реле |
4 |
0x05 |
Команда Вкл./Откл. обработку CRC16 модулем |
5 |
0x06 |
Команда сменить пароль Bluetooth |
6 |
0x0A |
Команда чтение настроек модуля |
При этом команды:
- 0x03 (изменить скорость);
- 0x05 (Вкл./Откл. обработку CRC16);
- 0x06 (сменить пароль Bluetooth для варианта исполнения с Bluetooth);
- 0x0A (по части чтения пароля Bluetooth для варианта исполнения с Bluetooth);
возможно выполнить только в режиме конфигурирования. Режим конфигурирования включается установкой перемычки "CONFIG" на модуле CP-9052 в положение "Enabled".
Не зависимо от настроек рабочего режима в режиме конфигурирования основные параметры всегда одни и те же. Настройки рабочего режима с завода имеют те же значения что и настройки в режиме конфигурирования.
Основные параметры |
Значение в режиме конфигурирования |
Значение установленные с завода в рабочем режиме |
Скорость работы |
9600 |
9600 |
Обработка CRC16 |
Отключено |
Отключено |
Пароль Bluetooth |
1234 |
1234 |
Теперь можно перейти к процедуре настройки. Для этого подключим к модулю блок питания 12В, входящий в комплект поставки. А сам модуль подключим к компьютеру USB кабелем A->B. В диспетчере устройств должен появиться COM порт - USB Serial Port ( у нас COM15). После чего переведем модуль в режим конфигурирования, установив перемычку CONFIG в положение "Enabled". Если все правильно, то должен загореться светодиод CONFIG.
Для настройки модуля будем использовать терминальную программу COM Port Toolkit от Михаила Голикова. Скачать можно с официального сайта автора. Пользуюсь данной программой уже очень давно и в плане стабильности и отсутствия программных глюков еще ни разу не подводила.
Открываем программу COM Port Toolkit, выбираем вкладку "Настройка" / "COM - порт". В открывшемся окне выбираем COM порт на котором висит модуль (у нас это COM15) и скорость 9600 (остальные параметы порта оставляем стандартными: данные - 8, паритет - Нет, стоп биты - 1, упр. потоком Нет).
Жмем ОК. После чего открываем вкладку "Сообщение" / "Отправить...". В открывшемся окне параметр "Тип данных" устанавливаем - "HEX", параметр "Посылка" устанавливаем - "Одиночная".
В верхнем окне "Сообщения" будем вводить последовательность из 11 байт в соответствующем формате.
1. Команда изменить скорость работы модуля.
Команда на изменение скорости работы модуля в рабочем режиме на 19200 bit/s |
№ байта |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
Условное обозначение |
ADR |
TYPE |
COM |
PAC |
D2 |
D1 |
MY_ADR |
CRC2 |
CRC1 |
0D |
0A |
Значение в HEX формате |
01 |
00 |
03 |
00 |
00 |
04 |
00 |
00 |
00 |
0D |
0A |
Разберём почему посылка имеет именно такой вид.
- ADR = 1, тут я думаю всем понятно. Данный модуль всегда имеет адрес 1;
- TYPE = 0, при посылке в модуль данный параметр никак не учитывается и мы его будем всегда слать нулевым. В ответном пакете в данном байте модуль сообщит нам свой тип 52, т.е. в формате HEX будет 0x34;
- COM = 3, ранее описывался перечень команд, и 0x03 команда на изменение скорости;
- PAC = 0, для команды 0x03 байт PAC может быть только 0;
- D2 = 0, для команды 0x03 байт D2 может иметь любое значение, так так он не учитывается. Мы установим его равным нулю;
- D1 = 4, для команды 0x03 байт D1 устанавливает скорость работы модуля в рабочем режиме:
Значение байта D1 |
Значение скорости передачи данных, бит/с |
0 |
2400 |
1 |
4800 |
2 |
9600 |
3 |
14400 |
4 |
19200 |
5 |
38400 |
6 |
57600 |
7 |
115200 |
- MY_ADR = 0, при посылке в модуль данный параметр никак не учитывается и мы его будем всегда слать нулевым. В ответном пакете в данном байте модуль сообщит нам свой адрес, который всегда равен одному;
- CRC1 = 0, CRC2 = 0, при посылке в модуль данный параметр никак не учитывается так как в режиме конфигурирования контрольная сумма не проверяется.
- 0x0D, 0x0A, два байта признака окончания пакета, добавляются всегда в конце пакета.
В ответных пакетах от модуля значение байт аналогично значениям байт в пакете запроса.
2. Команда Вкл./Откл. обработку CRC16 модулем.
Команда отключить обработку CRC16 модулем |
№ байта |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
Условное обозначение |
ADR |
TYPE |
COM |
PAC |
D2 |
D1 |
MY_ADR |
CRC2 |
CRC1 |
0D |
0A |
Значение в HEX формате |
01 |
00 |
05 |
00 |
00 |
00 |
00 |
00 |
00 |
0D |
0A |
- COM = 5, ранее описывался перечень команд, и 0x05 команда на Вкл./Откл. обработку CRC16 модулем;
- PAC = 0, для команды 0x05 байт PAC может быть только 0;
- D2 = 0, для команды 0x05 байт D2 может иметь любое значение, так так он не учитывается. Мы установим его равным нулю;
- D1 = 0, для команды 0x05 байт D1 устанавливает будет ли проверять контрольную сумму модуль (в рабочем режиме) при приеме пакета или нет (D1=0 - проверка CRC16 откдючена, D1=1 - проверка CRC16 включена).
В ответных пакетах от модуля значение байт аналогично значениям байт в пакете запроса.
Если включить обработку контрольной суммы, то при отсылки пакета модулю в рабочем режиме необходимо будет подсчитать контрольную сумму и добавить в байты CRC1, CRC2. Для этого предварительно рассчитаем таблицу значений с помощью функции:
void MakeCRC16Table(void)
{
unsigned char j;
unsigned int i, r;
for(i=0;i<256;i++)
{
r = i<<8;
for(j=0;j<8;j++)
{
if(r&(1<<15)) r=(r<<1)^0x8005;
else r=r<<1;
}
crctable[i]=r;
}
}
Данная функция выполняется 1 раз. Далее для расчета CRC16 используется функция:
unsigned int GetCRC16(unsigned char *buf,unsigned char len)
{
unsigned int CRC;
CRC = 0xFFFF;
while(len--)
{
CRC = crctable[((CRC>>8)^*buf++)&0xFF] ^ (CRC<<8);
}
CRC ^=0xFFFF;
return(CRC);
}
Функции GetCRC16 для расчета передаются первые 7 байт пакета.
Пример расчета CRC16 с помощью функции GetCRC16:
unsigned int CRC16;
// Подсчёт CRC. Функции GetCRC16 передается массив p[] из 7 элементов, где
// p[0] – байт 1 - сетевой адрес устройства.
// p[1] – байт 2 - тип сетевого устройства.
// p[2] – байт 3 – команда устройству.
// p[3] – байт 4 – номер подпакета.
// p[4] – байт 5 – байт данных.
// p[5] – байт 6 – байт данных.
// p[6] – байт 7 – адрес устройства отправителя.
CRC16 = GetCRC16(p,7);
// после чего переменная CRC16 разбивается на два байта: CRC1 и CRC2, где
// CRC2 – содержит старшие 8 бит, CRC1 – содержит младшие 8 бит.
3. Команда сменить пароль Bluetooth.
Для варианта исполнения с Bluetooth предусмотрена команда смены пароля:
Команда сменить пароль Bluetooth |
№ байта |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
Условное обозначение |
ADR |
TYPE |
COM |
PAC |
D2 |
D1 |
MY_ADR |
CRC2 |
CRC1 |
0D |
0A |
Значение в HEX формате |
01 |
00 |
06 |
00 |
12 |
34 |
00 |
00 |
00 |
0D |
0A |
- COM = 6, ранее описывался перечень команд, и 0x06 команда на смену пароля Bluetooth;
- PAC = 0, для команды 0x06 байт PAC может быть только 0;
- D2 = 0x12, D1 = 0x34 –данные байты содержат значение нового пароля Bluetooth в двоично-десятичном формате. Старшие четыре бита байта D2 содержат значение первой с лево цифры пароля. Младшие четыре бита байта D2 содержат значение второй с лево цифры пароля и т.д. Значение полубайта должно быть в пределах 0 – 9. Таким образом, при D2 = 0x12, D1 = 0x34 будет установлен пароль “1234”. Изменить пароль Bluetooth модуля CP-9052 возможно только в режиме конфигурирования.
В ответных пакетах от модуля значение байт аналогично значениям байт в пакете запроса.
Продолжение во второй части: Часть 2 >>
Похожий материал: "Изучаем USB релейный модуль СP-9052"
|