PDA

Просмотр полной версии : Задание параметров ПЧВ по RS-485



bdm2010
23.11.2014, 21:11
Здравствуйте господа форумчане. Подскажите пож-та.
1) Основной шкаф автоматики: СП270 (слейв)+ПЛК110 (мастер)+СПЕКТР4333IO (беспроводной удлинитель интерфейса RS-485)
2) Шкаф на самоходной телеги: СПЕКТР433IO+ПЧВ3
Все замечательно работает! Управление ПЧВ происходит при помощи командного слова. В ПЧВ заложено несколько заданных скоростей (параметр 3-10: 0-10Гц, 1-20Гц, 2-50Гц). Собственно к проблеме: как мне при помощи панели изменять эти значения, т.е. как мне по RS-485 изменять эти значения? Возможно ли вообще изменять параметры или можно только считывать? В примерах нашел изменение частоты по RS-485. Не совсем понятно какой конкретно параметр он изменят, фиксированную частоту??
Вообщем как мне реализовать многоскоростной режим по rs-485??? Как мне изменять значения 0,1,2 скоростей параметра 3-10 по RS-485???
Заранее благодарю за ответы!!!

RV9WFJ
24.11.2014, 08:56
Что-то вы не самым простым путем пошли ИМХО, записывайте просто задание в регистр 16#C359 в процентах (0..16384):

(*Записываем задание*)
wVar:=REAL_TO_WORD(PCHV[i].rReference/100*16384);

IF wVarwOldReference THEN

SendModbus06( (*Функция 06 - Запись значения регистра*)
Enable:=bEnable, (*Разрешение работы блока*)
Mode:=MB_RTU, (*Режим передачи ASCII/ RTU*)
DevAddr:=i+1, (*Адрес ведомого устройства*)
RegAddr:=16#C359, (*Номер регистра для записи*)
ComHandle:=csSettings.Port, (*Номер COM-порта*)
TimeOut:=tTimeOut, (*Максимальная задержка ведомого устройства на обработку запроса*)
Value:=wVar, (*Значение регистра*)
Complete=>bComplete, (*Признак завершения операции*)
Exception=>byException); (*Исключения протокола MODBUS или ошибки:
0x00 – ошибок или исключений MODBUS не обнаружено,
0xFE – аппаратная ошибка ПЛК,
0xFF – ошибка таймаута.*)
IF bComplete THEN
IF byException=0 THEN (*Если нет ошибок*)
wOldReference:=wVar;
PCHV[i].bErrorCon:=FALSE;
byLoss[i]:=0;
ELSE
IF byLoss[i]>byLossMax THEN
PCHV[i].bErrorCon:=TRUE;
ELSE
byLoss[i]:=byLoss[i]+1;
END_IF;
END_IF;
byStep:=byStep+1; (*Переходим к следующей команде*)
END_IF;
ELSE
byStep:=byStep+1;
END_IF;

Иванов Виктор
24.11.2014, 09:46
Спасибо! Уже пробую.