Цитата Сообщение от SatanaXIII Посмотреть сообщение
Значит, после добавления в проект библиотек ComService_3.1.0.compiled-library и Modbus(3.1.0).compiled-library, с последующей настройкой проекта как указано в пункте 5.4 мануала SPK_Modbus_v.1.1.pdf связь с аналоговыми модулями появилась.
Но только по порту COM2. При подключении модулей по порту COM3 опроса не происходит.
В чем может быть причина?

В общем виде код программы работы с модбасом выглядит так:
Код:
Код:
PROGRAM COM2
VAR
	COM_Service_COM2: COM_SERVICE; // ФБ настройки и открытия порта COM2
	
	MV110_8A: MB_RD_HOLD_REGS; // ФБ опроса модуля МВ110-8А

	abyBuffer: ARRAY [0..255] OF BYTE; // Буфер ФБ опроса модуля МВ110-8А
	abyMV110_8A_data: ARRAY [0..255] OF BYTE; // Буфер данных, считанных с модуля МВ110-8А
	
	MV110_8A_1_InputsArr: ARRAY [0..7] OF REAL; // Показание входа модуля МВ110-8А
	MV110_8A_1_InputsStatusArr: ARRAY [0..7] OF WORD; // Код ошибки измерения входа
	MV110_8A_1_InputsStatusTextArr: ARRAY [0..7] OF WSTRING; // Cтатус измерения входа

	_2WORD_TO_REAL: Word_Real; // Экземпляр объединия для преобразования двух WORD в REAL
	
	InputsCounter: INT;
	NumCurrModule: INT;
END_VAR
VAR CONSTANT
	InputsShift: INT := 12; // Из мануала к модулю
	
	EmptyRealInputsArr: ARRAY [0..7] OF REAL := [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0];
END_VAR
Код:
COM_Service_COM2
(
	Enable := TRUE,
	Task := OPEN_TSK,
);
COM_Service_COM2.Settings.sPort		:= 3;
COM_Service_COM2.Settings.byStopBits	:= 1;
COM_Service_COM2.Settings.byParity	:= 0;
COM_Service_COM2.Settings.ulBaudrate	:= 9600;
COM_Service_COM2.Settings.ulTimeout	:= 0;
COM_Service_COM2.Settings.ulBufferSize	:= 0;
COM_Service_COM2.sets_ex.byByteSize	:= 8;


MV110_8A
(
	Enable := COM_Service_COM2.Ready,
	Mode := MB_RTU,
	DevAddr := 1,
	FirstAddr := 2,
	Quantity := 45,
	ComHandle := COM_Service_COM2.handle,
	TimeOut := T#1000MS,
	Buffer := abyBuffer,
);

IF MV110_8A.Complete THEN
	IF MV110_8A.Exception = 0 THEN
		abyMV110_8A_data := abyBuffer;
		FOR InputsCounter := 0 TO 7 DO
			MV110_8A_1_InputsStatusArr[InputsCounter] := BYTE_TO_WORD(abyMV110_8A_data[1 + InputsCounter * InputsShift]) OR SHL(BYTE_TO_WORD(abyMV110_8A_data[0 + InputsCounter * InputsShift]),8);
			MV110_8A_1_InputsStatusTextArr[InputsCounter] := Mx110Assistant.MvStatusToWstring(MV110_8A_1_InputsStatusArr[InputsCounter]);
			IF MV110_8A_1_InputsStatusArr[InputsCounter] = 0 THEN
				_2WORD_TO_REAL.abyBytes[3] := abyMV110_8A_data[4 + InputsCounter * InputsShift];
				_2WORD_TO_REAL.abyBytes[2] := abyMV110_8A_data[5 + InputsCounter * InputsShift];
				_2WORD_TO_REAL.abyBytes[1] := abyMV110_8A_data[6 + InputsCounter * InputsShift];
				_2WORD_TO_REAL.abyBytes[0] := abyMV110_8A_data[7 + InputsCounter * InputsShift];
				
				MV110_8A_1_InputsArr[InputsCounter] := _2WORD_TO_REAL.rReal;
			ELSE
				MV110_8A_1_InputsArr[InputsCounter] := 0.0;
			END_IF
		END_FOR;
	END_IF
	MV110_8A(Enable := FALSE, Buffer := abyBuffer);
END_IF
Добрый день.
Вы портом COM2 называете тот, который на корпусе прибора гравируется как COM2 или тот, которому в CODESYS соответствует ID = 2?