Что-то вы не самым простым путем пошли ИМХО, записывайте просто задание в регистр 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;