Страница 36 из 130 ПерваяПервая ... 2634353637384686 ... ПоследняяПоследняя
Показано с 351 по 360 из 1291

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

  1. #351

    По умолчанию

    Цитата Сообщение от viktor1980 Посмотреть сообщение
    Добрый день. Возник вопрос при работе с библиотекой Modbus. Используем СПК 107 м01 и МВ110-8А.
    Написали код в точности как в руководстве по Модбас, за исключением используемого порта. При включении СПК и модуля МВ связь между ними не устанавливается. Срины настроек модуля и отображаемой инфы при подключении к СПК прикладываю.
    Подскажите, что не так я делаю и что нужно исправить.
    Вложение 42425
    Вложение 42426
    Вложение 42427
    Добрый день, Виктор!

    Документ разрабатывался еще для старых линеек СПК. В новой линейке СПК1xx с интерфейсом Ethernet нумерация физических портов и нумерация CODESYS совпадает. Другими словами, если используете физический COM1 (RS-485-1), то и в CODESYS указываете 1 и так далее. В старых линейках приходилось к номеру порту прибавлять единицу.

    Мы продублировали информацию о соответствии портов на тыльной стороне контроллера и во вкладке Информация в таргет-устройстве.

    2019-04-24_9-49-59.png

    Документ, посвященный протоколу Modbus в CODESYS V3.5 будет полностью переделан в этом году.

    P.S. Обратите внимание, что пример создан для опроса модуля МВ110-8А. У Вас - МВ110-8АС и карта регистров Modbus для модуля уже другая.

    2019-04-24_9-33-26.png
    Последний раз редактировалось Ильнур Гибадуллин; 24.04.2019 в 09:50.

  2. #352

    По умолчанию

    На самом деле по поводу номеров портов я в курсе. Возможно в проекте отправил с неправильным номером, поскольку начал уже играться с ними когда увидел, что связи нет. В реальности у меня модуль подключен к СОМ3 и соответственно в программе указывал Settings_COM3.sPort := 3;
    К сожалению вложение открыть не удалось ((. Единственное, что не пробовал уменьшать скорость (сейчас настроено на 115200).

  3. #353

    По умолчанию

    Цитата Сообщение от viktor1980 Посмотреть сообщение
    На самом деле по поводу номеров портов я в курсе. Возможно в проекте отправил с неправильным номером, поскольку начал уже играться с ними когда увидел, что связи нет. В реальности у меня модуль подключен к СОМ3 и соответственно в программе указывал Settings_COM3.sPort := 3;
    К сожалению вложение открыть не удалось ((. Единственное, что не пробовал уменьшать скорость (сейчас настроено на 115200).
    Проверьте, на модуле стоит перемычка для сброса на заводские сетевые настройки?

    Перезагружали модуль после настройки в Конфигураторе M110?

  4. #354

    По умолчанию

    Со связью разобрался. К сожалению причина собственная невнимательность (не создал задачу для программы). Но сейчас пытаюсь разобраться с чтением (на примере первого входа) подаваемого напряжения. В таблице Г.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

  5. #355

    По умолчанию

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

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

  6. #356

  7. #357

    По умолчанию

    Доброе утро! Должен ли при работе по нестандартному протоколу (CAA_Serialcom) мигать светодиод СОМ? При настройке Modbus в конфигураторе моргает и работает. А при использовании библиотеки порт показывает что открывает (COM.Open) и даже операция Read завершается успешно без ошибок, но ответ всегда нулевой.

  8. #358
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    12,064

    По умолчанию

    Цитата Сообщение от tegs Посмотреть сообщение
    Доброе утро! Должен ли при работе по нестандартному протоколу (CAA_Serialcom) мигать светодиод СОМ? При настройке Modbus в конфигураторе моргает и работает. А при использовании библиотеки порт показывает что открывает (COM.Open) и даже операция Read завершается успешно без ошибок, но ответ всегда нулевой.
    Добрый день. Да, должен.
    CAA.Read читает данные из буфера COM-порта - т.е. с точки зрения ФБ считывание нулей это не ошибка, а просто текущее положение дел.
    Вы, возможно, однократно его вызываете?
    Надо в цикле вызывать до тех пор, пока не будут получены нужные данные или не истечет таймаут (таймаут, кстати, лучше считать через собственный таймер - вход udiTimeout не работает адекватно, насколько я помню).

  9. #359

    По умолчанию

    Цитата Сообщение от Евгений Кислов Посмотреть сообщение
    Добрый день. Да, должен.
    CAA.Read читает данные из буфера COM-порта - т.е. с точки зрения ФБ считывание нулей это не ошибка, а просто текущее положение дел.
    Вы, возможно, однократно его вызываете?
    Надо в цикле вызывать до тех пор, пока не будут получены нужные данные или не истечет таймаут (таймаут, кстати, лучше считать через собственный таймер - вход udiTimeout не работает адекватно, насколько я помню).
    у меня чтение в цикле. другое дело что вызов Write не вызывает свечения светодиода, такое ощущение что он ничего не записывает на шине. Я экспериментировал с номером порта, поидее у СПК105 всего два порта RS232 - 1 и RS485 - 2. Я пробовал и 2 и 1 и 0 и даже 3. таймаут у меня сделан собственным таймером. Вообще код почти полностью повторяет код примера "Нестандартные протоколы". В случае неверного подключения А и В могут быть такие результаты?

  10. #360

Страница 36 из 130 ПерваяПервая ... 2634353637384686 ... ПоследняяПоследняя

Похожие темы

  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

Ваши права

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