Страница 38 из 38 ПерваяПервая ... 28363738
Показано с 371 по 372 из 372

Тема: CODESYS V3.5. Настройка обмена с другими устройствами (Modbus, ОВЕН, OPC и др.)

  1. #371

    По умолчанию

    Цитата Сообщение от 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" видите где? В буфере какие-нибудь данные получаете?

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

  2. #372

Страница 38 из 38 ПерваяПервая ... 28363738

Похожие темы

  1. Настройка ПР200, управление 3-мя устройствами через RS-485
    от Orbes в разделе Среда программирования OWEN Logic
    Ответов: 20
    Последнее сообщение: 15.05.2017, 16:45
  2. СП3ХХ Пример настройка обмена с ПЛК на CODESYS 2.3
    от Denis_Kay в разделе Панели оператора (HMI)
    Ответов: 6
    Последнее сообщение: 02.03.2017, 15:12
  3. Ответов: 43
    Последнее сообщение: 13.04.2015, 14:05
  4. Универсальная функция для обмена с устройствами OwenIO и всеми любимый LabView.
    от Алексей Крагель в разделе Помощь Разработчикам
    Ответов: 0
    Последнее сообщение: 30.05.2014, 14:38

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •