Страница 96 из 153 ПерваяПервая ... 46869495969798106146 ... ПоследняяПоследняя
Показано с 951 по 960 из 1527

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

  1. #951

    По умолчанию

    Цитата Сообщение от Евгений Кислов Посмотреть сообщение
    У вас цель - полностью сделать "правильную" реализацию Modbus TCP с использованием данного ФБ или решить конкретную проблему с вашим конкретным слэйвом с "кривой реализацией" протокола?
    Если второе - то достаточно хардкодом задать нужные запросы и написать примитивный парсер ответов, вычленяющий данные по известным байтовым смещениям.
    Вся нужная для этого информация на вашем скриншоте с Communication Traffic есть.
    Цель - решить проблему с кривым слейвом. Имея готовую "правильную" реализацию Modbus TCP это сделать очень просто - заменить проверку длины ответа (строгое равенство =) на >=.

    Со слейва нужно вытаскивать много данных разными запросами, т.е. нужен полноценный Modbus TCP. Слейв просто лепит везде лишний байт, а так отвечает нормально.

  2. #952

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    В ответе слейва прямо в двух местах вставляются байты обозначающие сколько пакет несёт полезной информации, эмулятор слейва читается без проблем?
    Вопрос только в лишнем байте (последнем), который не дает использовать (предположительно) штатный Modbus TCP / реализацию Modbus TCP в OwenCommunication.

    Утилиты опроса по Modbus (например, Modbus Poll), опрашивают данный слейв, отображают данные, несмотря на некорректные ответы (лишний байт в конце).

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

    По умолчанию

    Имея готовую "правильную" реализацию Modbus TCP
    Тогда вам придется реализовать его самостоятельно.
    Мы не распространяем исходники своих библиотек.

  4. #954

    По умолчанию

    Цитата Сообщение от Евгений Кислов Посмотреть сообщение
    Тогда вам придется реализовать его самостоятельно.
    Мы не распространяем исходники своих библиотек.
    Имелся в виду пример CoDeSys-реализации Modbus TCP с использованием UNM_TcpRequest. Не исходники "правильного" MB_TcpRequest.

  5. #955
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    13,200

    По умолчанию

    Цитата Сообщение от vozlov Посмотреть сообщение
    Имелся в виду пример CoDeSys-реализации Modbus TCP с использованием UNM_TcpRequest. Не исходники "правильного" MB_TcpRequest.
    Это синонимичные вещи. MB_TcpRequest построен на базе UNM_TcpRequest.
    Поскольку обычно производители слэйвов не имеют привычки вставлять в ответ лишние байты - то ни у кого не возникало поводов создавать альтернативную open-source реализацию.

  6. #956

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    Ещё раз спрошу, Ваш мастер без проблем опрашивает правильные слейвы. Не сторонние мастера, а что там у Вас плк или панель?
    Да. Мастер (ПЛК200) без проблем опрашивает правильные слейвы штатным драйвером CoDeSyS и блоком MB_TcpRequest библиотекой OwenCommunication.

    Этот слейв оба варианта не могут опросить.

  7. #957

    По умолчанию

    Подскажите, для управления ПЧ AFD-E есть шаблон в котором управление происходит по отправке командного слова и подтверждающий Бит записи
    01.png
    хочу повторить код запроса без шаблона, часть кода есть - это отправка самого командного слова
    Код:
    VAR
       ...
       fbKnopTrig: R_TRIG;
    END_VAR
    
    
    // Проверка привода на готовность
    fbComControl1
    (
    	xEnable     := TRUE,
    	udiComPort  := 5,
    	udiBaudrate := 9600,
    	udiByteSize := 8,
    	eParity     := OCL.COM_PARITY.NONE,
    	eStopBit    := OCL.COM_STOPBIT.ONE
    );
    
    IF fbComControl1.xActive THEN
    	
            fbKnopTrig(CLK := xKnop);
    
    	IF fbKnopTrig.Q THEN
    	   eState := 20;
    	END_IF
    	
    	CASE eState OF
    
                     0: // ожидание команды
    		
    		10: // Опрос состояния AFD-E
    				
    		20: // запуск AFD-E
    		
                    wCmdWord := 22;
    		fbMbSerialRequest.xExecute 	:= TRUE;
    		fbMbSerialRequest.hCom		:= fbComControl1.hCom;
    		fbMbSerialRequest.xIsAsciiMode	:= FALSE;
    		fbMbSerialRequest.usiSlaveId 	:= 15; 		                       // адрес слейва
    		fbMbSerialRequest.eFuncCode	:= OCL.MB_FC.WRITE_SINGLE_REGISTER;    // функция
    		fbMbSerialRequest.uiDataAddr 	:= 4864; 		               // адрес начального запроса
    		fbMbSerialRequest.uiDataCount	:= 1; 		                       // число регистров
    		fbMbSerialRequest.pData	        := ADR(wCmdWord);
    		fbMbSerialRequest.szSize	:= SIZEOF(wCmdWord);
    
                    fbMbSerialRequest();
    
    		// fbMbSerialRequest.xError	:= xError;
    		// fbMbSerialRequest.eError	:= wError;
    		
    				
    		IF fbMbSerialRequest.xDone OR fbMbSerialRequest.xError THEN
    			
    			fbMbSerialRequest(xExecute := FALSE);
                            eState := 0;
    			
    		END_IF
    		
    	END_CASE
    
    END_IF
    а вот куда записывать бит не понятно
    В тех поддержу обращался, но там не поняли что надо и сбросили файл в котором они тестировали подключение.

    02.png03.png04.png

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

    По умолчанию

    а вот куда записывать бит не понятно
    Аналогом бита записи шаблона является вход xExecute в fbMbSerialRequest.
    В вашем коде аналогом этого бита является xKnop.

  9. #959

    По умолчанию

    Цитата Сообщение от Евгений Кислов Посмотреть сообщение
    Аналогом бита записи шаблона является вход xExecute в fbMbSerialRequest.
    В вашем коде аналогом этого бита является xKnop.
    В тех поддержке написали что регистр 4864 всегда должен быть в значении 22
    Т.Е. надо сделать зацикливание в программе я правильно понимаю?
    Код:
    IF fbMbSerialRequest.xDone OR fbMbSerialRequest.xError THEN
    			
    	fbMbSerialRequest(xExecute := FALSE);
            eState := 20;
    			
    END_IF

  10. #960

Страница 96 из 153 ПерваяПервая ... 46869495969798106146 ... ПоследняяПоследняя

Похожие темы

  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, 13:38

Ваши права

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