21 июня 2011 г.

Модуль KM6551 и организация радиоканала

Модули KM6551 позволяют организовать беспроводной канал связи (стандарт IEEE 802.15.4) между ПЛК. Расстояние – до 300 м в зоне прямой видимости. Вариантов организации сети три: «точка-точка», «главный-ведомый» (до 7 ведомых), «широковещательный» (7+ ведомых). В последнем случае данные передаёт только главный модуль, ведомые являются только «слушателями» сети, ничего не отдавая. Вещание ведётся на частотах 2405, 2410, 2415… 2480 МГц. Примерный цикл обмена – 20*N мс, где N – количество ведомых.


Программная реализация беспроводного обмена начинается с библиотеки TcKM6551.lib. Для главного ПЛК (у меня это CX1010-0111) используются два фукциональных блока: один (fb_KM6551_MAIN) – для инициализации канала, второй (fb_KM6551_Master_10BYTE) – для циклического записи/чтения. Как видно, за один программный цикл главный передаёт и принимает по 10 байт данных. Это 80 переменных типа BOOL, 5 переменных типа WORD/INT, или же 2 переменные типа DWORD/DINT.

(*Объявление ФБ и переменных*)
fbMainKM6551: fb_KM6551_MAIN;
fbMasterKM6551: fb_KM6551_Master_10BYTE;
KM6551_DATA_IN AT %I*: ARRAY [1..12] OF BYTE;
KM6551_DATA_OUT AT %Q*: ARRAY [1..12] OF BYTE;
DATA_IN: ARRAY [0..4] OF INT;
DATA_OUT: ARRAY [0..4] OF INT;


В нашем примере используется тип INT, отсюда размерность массива [0..4] – пять переменных. Следует обратить внимание, что входыfb_KM6551_MAIN.KM6551_IN и fb_KM6551_MAIN.KM6551_OUT есть ни что иное, как «process data» нашего радио-модуля KM6551. Они должны быть привязаны к нашей конфигурации. Для этого в System Manager’e выбирается искомый модуль (на рисунке – «Term 9(KM6551)»):


Создаётся «Multi link» к его «Inputs/Outputs» (к слову, на момент написания этого поста нигде в документации об этом ничего не сказано), ведущий на наши массивы KM6551_DATA_IN и KM6551_DATA_OUT:



Жмём OK. Активируем конфигурацию и приступаем к разбору программы главного ПЛК. Тут всё ещё проще. Сначала инициализируем канал (в нашем случае №1):

(*Инициализация канала*)
fbMainKM6551(
   bActivate := TRUE,
   iChannal_Set := 1,
   KM6551_IN := KM6551_DATA_IN,
   KM6551_OUT := KM6551_DATA_OUT);


Затем организуем передачу/приём данных от ведомого:

(*Приём/передача*)
fbMasterKM6551(
   bStart := fbMasterKM6551.bActive,
   iSlaveAddr := 1,
   strLinkData := fbMasterKM6551.strLinkData,
   ptData_IN := ADR(DATA_IN),
   iLenData_IN := SIZEOF(DATA_IN),
   ptData_OUT := ADR(DATA_OUT),
   iLenData_OUT := SIZEOF(DATA_OUT));


Для ведомого (в моём случае это BC9050) разрабатывается полностью аналогичный проект за исключением одной детали. В качестве ФБ приёма/передачи данных используется fb_KM6551_Slave_10BYTE.

Комментариев нет:

Отправить комментарий