Страница 57 из 130 ПерваяПервая ... 747555657585967107 ... ПоследняяПоследняя
Показано с 561 по 570 из 1291

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

  1. #561

  2. #562
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,224

    По умолчанию

    Цитата Сообщение от Евгений Кислов Посмотреть сообщение
    Нет, по протоколу ОВЕН. Параметр 'p.min' в принципе не доступен по Modbus.
    хорошо, а если в трм251 записать в 258 регистр 0, а после в 257 например четыре, то именно эта уставка и будет на первом шаге?
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

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

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    хорошо, а если в трм251 записать в 258 регистр 0, а после в 257 например четыре, то именно эта уставка и будет на первом шаге?
    Не могу прокомментировать, и у меня в данный момент нет цели тестировать этот функционал.
    Вы можете задать этот вопрос в разделе ТРМ или написать запрос на support@owen.ru

  4. #564
    Пользователь
    Регистрация
    31.10.2020
    Адрес
    МО, пгт. Менделеево
    Сообщений
    14

    По умолчанию Решение проблемы записи целых чисел P.min, P.max, P.nom, i.upr, i.min

    Цитата Сообщение от Евгений Кислов Посмотреть сообщение
    Проблема воспроизвелась.
    К сожалению, оперативно устранить ее не получится.
    Насколько критична для вас невозможность записи значения этих параметров без дробной части?
    Уточните, пожалуйста, какие параметры (кроме 'p.min') вынуждают вас использовать протокол ОВЕН вместо Modbus.
    Для параметров P.min, P.max, P.nom, i.upr, i.min чтение можно осуществлять через формат с фиксированной точкой REAL_FRM.FIX_BIN, а вот запись необходимо осуществлять используя формат для целых чисел INT_FRM.UINT_FRM.
    Структура формата REAL_FRM.FIX_BIN 16 битная:
    0-11 - значение без точки.
    12-14 бит - десятичный сдвиг точки
    15 бит - знак, если 0 - то плюс, 1 - значит минуc
    Примеры:
    3.1=2#0001_0000_0001_1111
    -3.1=2#1001_0000_0001_1111
    0,300=2#0011_0001_0010_1100
    Проблема крылась в том, что при записи целых положительных чисел биты 12-14 равны 0, тогда в битах 0-11 храниться целое значение. Но алгоритм работает с ошибкой, а при записи с десятичной точкой в битах 12-14 есть значения, т.е. все свелось к принудительной установке хотя бы одной точки после запятой.
    Соответственно, для параметров P.min, P.max, P.nom, i.upr, i.min достаточно одной цифры после запятой, и необходимо знать знак числа.
    Всем успехов
    Код проверен на ТРМ251 v1.10.
    Мой пример реализации ниже.
    Код:
    GetReal:OWEN_GET_REAL;
    SetDint:OWEN_SET_DINT;
    
    i_min: // Огр. мин. интеграла
    	IF pribor^[prib_name].oper.StateTask[state].isRead THEN
    		GetReal(
    			Enable:= com_active, 
    			Addr:= com_prib.addr[prib_name], 
    			AddrLen:=com_prib.addrlen, 
    			Name:='i.min' , 
    			Index:= 16#FFFF, 
    			RealType:= REAL_FRM.FIX_BIN, 
    			ComHandle:= hComTrm, 
    			TimeOut:=com_prib.TimeOut*T#1MS , 
    			Complete=>, 
    			Value=> , 
    			wTime=> , 
    			Error=> );
    		IF GetReal.Complete OR GetReal.Error<>0 THEN
    			pribor^[prib_name].oper.StateTask[state].error:=SetReal.Error;
    			CASE GetReal.Error OF
    				NoError: 
    					pribor^[prib_name].pid.i_min:=GetReal.Value;
    					pribor^[prib_name].oper.StateTask[state].ValReal:=GetReal.Value;
    					state:=StateNoError(state:=state,StateTaskPt:=ADR(pribor^[prib_name].oper.StateTask));
    				NACK: 
    					state:=end_pooling;
    				ELSE
    					state:=StateNoError(state:=state,StateTaskPt:=ADR(pribor^[prib_name].oper.StateTask));
    			END_CASE
    			GetReal(Enable:=FALSE);
    		END_IF
    	ELSE
    		IF pribor^[prib_name].pid.i_min >-0.001 THEN
    			SetDint.Value:=2#0001_0000_0000_0000; // Положительное число, одна цифра после запятой
    			ELSE
    			SetDint.Value:=2#1001_0000_0000_0000;	// Отрицательное число, одна цифра после запятой
    		END_IF
    		SetDint(
    			Enable:= com_active, 
    			Addr:= com_prib.addr[prib_name], 
    			AddrLen:= com_prib.addrlen, 
    			Name:= 'i.min', 
    			Index:= 16#FFFF, 
    			IntType:=INT_FRM.UINT_FRM, 
    			Value:=REAL_TO_DINT(ABS(pribor^[prib_name].pid.i_min*10)) + SetDint.Value, // Сдвиг запятой на 1 знак в право.
    			ComHandle:= hComTrm, 
    			TimeOut:= com_prib.TimeOut*T#1MS, 
    			Complete=> , 
    			Error=> );
    		IF SetDint.Complete OR SetDint.Error<>0 THEN
    			pribor^[prib_name].oper.StateTask[state].error:=GetDint.Error;
    			CASE SetReal.Error OF
    				NoError: 
    					state:=StateNoError(state:=state,StateTaskPt:=ADR(pribor^[prib_name].oper.StateTask));
    				NACK: 
    					state:=end_pooling;
    				ELSE
    					state:=StateNoError(state:=state,StateTaskPt:=ADR(pribor^[prib_name].oper.StateTask));
    			END_CASE
    			SetDint(Enable:=FALSE);
    		END_IF	
    	END_IF

  5. #565

  6. #566

    По умолчанию

    Здравствуйте, коллеги, подскажите, пожалуйста, у меня СПК107, CS3.5.14, модули подхватились отлично по шаблонам, а кастомное модбас ТСР устройство, которое я добавил, валится в ошибку постоянно (восклицательный знак мигает), вроде всё настроил нормально, но открывается соединение, тут же ошибка сокета и дисконект, судя по логам. Есть предположение, что это из-за несоответствия версий устройств кодсиса таргету ПЛК. Где скачать и как правильно установить устройства модбас тср мастер, слэйв и т.д соответствующих версий?соответствующих версий?

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

    По умолчанию

    Цитата Сообщение от borgivan Посмотреть сообщение
    Здравствуйте, коллеги, подскажите, пожалуйста, у меня СПК107, CS3.5.14, модули подхватились отлично по шаблонам, а кастомное модбас ТСР устройство, которое я добавил, валится в ошибку постоянно (восклицательный знак мигает), вроде всё настроил нормально, но открывается соединение, тут же ошибка сокета и дисконект, судя по логам. Есть предположение, что это из-за несоответствия версий устройств кодсиса таргету ПЛК. Где скачать и как правильно установить устройства модбас тср мастер, слэйв и т.д соответствующих версий?соответствующих версий?
    Добрый день.
    Скорее всего, то не связано с версией устройства.
    Посмотрите код ошибки (Вид - Просмотр - Watch 1 - <имя слэйва из дерева проекта>.byModbusError) и выложите ваш проект и документацию на слэйв-устройство.

  8. #568

    По умолчанию

    Цитата Сообщение от Евгений Кислов Посмотреть сообщение
    А, вы используете ФБ прямо из примера.
    Лучше вместо него использовать одноименный ФБ из библиотеки OwenCommunication - у него этот выход есть.
    https://owen.ru/forum/showthread.php?t=31816
    Спасибо за предоставленный пример.
    Прием в слейве заработал.

  9. #569

    По умолчанию

    Добрый день. Столкнулся со следующей проблемой: Для обмена по ModBus использую библиотеку OwenCommunication, при перезагрузке ПЛК функциональный блок MB_SerialRequest завершается с ошибкой 12 (WRONG_PARAMETER). Однако, если не перезагружать ПЛК, а только перезалить софт и запустить программу, то все работает корректно, никаких ошибок не возникает. Куда можно копать, чтобы понять в чем проблема?

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

    По умолчанию

    Цитата Сообщение от SemAndr Посмотреть сообщение
    Добрый день. Столкнулся со следующей проблемой: Для обмена по ModBus использую библиотеку OwenCommunication, при перезагрузке ПЛК функциональный блок MB_SerialRequest завершается с ошибкой 12 (WRONG_PARAMETER). Однако, если не перезагружать ПЛК, а только перезалить софт и запустить программу, то все работает корректно, никаких ошибок не возникает. Куда можно копать, чтобы понять в чем проблема?
    Добрый день.
    Сколько экземпляров ФБ вы используете в программе?

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

Похожие темы

  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

Ваши права

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