Цитата Сообщение от viktor1980 Посмотреть сообщение
Со связью разобрался. К сожалению причина собственная невнимательность (не создал задачу для программы). Но сейчас пытаюсь разобраться с чтением (на примере первого входа) подаваемого напряжения. В таблице Г.3 руководства указаны три разных адреса регистра для первого канала(1 - 0х100, 2 - 0х108, 3 - 0х120, 0х121, 0х122) для чтения измеренного значения. Какой из них необходимо использовать для получения значения с первого канала? В программе пробовал подставлять все из этих значений - итог, читается только "0". Для наглядности приведу код программы.
Объявленные переменные:
Скрытый текст:
Код:
VAR
	COM_Service_Com3:			ComService.COM_SERVICE;		// ФБ настройки и открытия порта COM3
	Settings_COM3:				ComService.COM_SETTINGS;	// Структура настроек порта COM3
	SettingsEX_COM3:			ComService.COM_SETTINGSex;	// Структура расширенных настроек порта COM3
	
	MV110_8A:					ModBus.MB_RD_INPUTS;		// ФБ опроса модуля МВ110-8АC    MB_RD_HOLD_REGS
	
	rMV110_8A_input1:			REAL;						// Показания входа 1 модуля МВ110-8АC
	wMV110_8A_input1_status:	WORD;						// Код ошибки измерения входа 1
	wsMV110_8A_input1_status:	WSTRING;					// Статус измерения входа 1
	
	abyBuffer:					ARRAY [0..255] OF BYTE;		// Буфер ФБ опроса модуля МВ110-8АC
	abyMV110_8A_data:			ARRAY [0..255] OF BYTE;		// Буфер данных, считанных с модуля МВ110-8АC
	
	_2WORD_TO_REAL:				Word_Real;					// Экземпляр объединения для преобразования двух WORD в REAL
END_VAR

И собственно сама программа:
Скрытый текст:
Код:
// [1] настраиваем COM-port
Settings_COM3.sPort := 3; 
Settings_COM3.byStopBits := 1;
Settings_COM3.byParity := 0;
Settings_COM3.ulBaudrate := 115200;
Settings_COM3.ulTimeout := 0;
Settings_COM3.ulBufferSize := 0;

SettingsEX_COM3.byByteSize := 8;

// [2] открываем COM-port
COM_Service_Com3
(
	Enable := TRUE,
	Settings := Settings_COM3,
	Sets_EX := SettingsEX_COM3,
	Task := ComService.OPEN_TSK
);

// [3] запускаем ФБ опроса модуля МВ110-8А
MV110_8A
(
	Enable := COM_Service_Com3.Ready,
	Mode := ModBus.MB_RTU,
	DevAddr := 1,
	FirstAddr := 16#100,
	Quantity := 1,
	ComHandle := COM_Service_Com3.Handle,
	TimeOut := T#45MS,
	Buffer := abyBuffer,
);

// [4] если ФБ опроса модуля завершил работу
IF MV110_8A.Complete THEN
	IF MV110_8A.Exception =0 THEN
		// байты 0 и 1 содержат статус измерения входа 1
		// склеиваем их в WORD и декодируем в текстовое сообщение
		wMV110_8A_input1_status := BYTE_TO_WORD(abyMV110_8A_data[1]) OR SHL(BYTE_TO_WORD(abyMV110_8A_data[0]), 8);
		wsMV110_8A_input1_status := Mx110Assistant.MvStatusToWstring(wMV110_8A_input1_status);
		
		// байты 4-7 содержат значение на входе 1 с плавающей точкой.
		// переставляем байты местами и преобразуем в REAL
		_2WORD_TO_REAL.abyBytes[3] := abyMV110_8A_data[4];
		_2WORD_TO_REAL.abyBytes[2] := abyMV110_8A_data[5];
		_2WORD_TO_REAL.abyBytes[1] := abyMV110_8A_data[6];
		_2WORD_TO_REAL.abyBytes[0] := abyMV110_8A_data[7];
		
		rMV110_8A_input1 := _2WORD_TO_REAL.rReal;
	END_IF
	
	// завершаем опрос модуля МВ110-8А
	MV110_8A(Enable := FALSE, Buffer := abyBuffer);
END_IF
Все три регистра позволяют считывать значение с первого канала.

Вы "0" видите где? В буфере какие-нибудь данные получаете?

Не вижу у Вас в коде копирование буфера ФБ в пользовательский буфер, чтобы далее его распарсить.