Страница 168 из 174 ПерваяПервая ... 68118158166167168169170 ... ПоследняяПоследняя
Показано с 1,671 по 1,680 из 1740

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

  1. #1671

    По умолчанию

    Всем Доброго времени суток.
    Столкнулся с такой бедой как "Числа в формате PIC с плавающей запятой" при опросе по RS485 счетчика газа Ирвис К-300.
    ИрвисК300.png
    Прошу вашей помощи, может кто то сталкивался с такой проблемой ранее, как эти значения привести к понятным REAL?
    В сети нашел только пример на языке С, но я в нем вообще не понимаю, что в нем происходит, может у кого есть пример на ST?
    Код:
    class Program
        {
            static void Main(string[] args)
            {
                 byte[] send = new byte[3] {0x65, 0x29, 0x8A};
                 Console.WriteLine(PICtoIARfloat(send));
                Console.ReadLine();
            }
     
            static float PICtoIARfloat(byte[] PICfloat)
            {
              
                byte[] bt = new byte[4];
     
     
                //Первый байт float IAR
                bt[0] = 0x00;
                //Второй байт
                bt[1] = PICfloat[0];
                //Третий байт
                bt[2] = PICfloat[1];
                bt[2] &= 0x7f;  //Сброс знака
     
                if ((PICfloat[2] & 0x01) > 0)
                {
                    //Если мл.бит установлен
                    bt[2] |= 0x80;
                }
                //Четвертый байт
                bt[3] = PICfloat[2];
                bt[3] >>= 1;
                if ((PICfloat[1] & 0x80)>0)
                {
                    //Если знак отрицательный
                    bt[3] |= 0x80;
                }
                else
                {
                    bt[3] &= 0x7F;
                }
                
     
                return ToFloat(bt);
            }
     
            static float ToFloat(byte[] input)
            {
                return BitConverter.ToSingle(input, 0);
            }
        }
    Вложения Вложения

  2. #1672
    Пользователь
    Регистрация
    27.11.2011
    Адрес
    Краснодар
    Сообщений
    13,584

    По умолчанию

    Им блин что, регистров было жалко?

  3. #1673

    По умолчанию

    Цитата Сообщение от melky Посмотреть сообщение
    Им блин что, регистров было жалко?
    Видимо, хотя на других приборах этой марки с регистрами все было нормально, мне кажется тут дело в микроконтроллере, на котором собран прибор.

  4. #1674

    По умолчанию

    Цитата Сообщение от Ctakah133 Посмотреть сообщение
    Всем Доброго времени суток.
    Столкнулся с такой бедой как "Числа в формате PIC с плавающей запятой" при опросе по RS485 счетчика газа Ирвис К-300.
    ИрвисК300.png
    Прошу вашей помощи, может кто то сталкивался с такой проблемой ранее, как эти значения привести к понятным REAL?

    Вот функция на ST, можете проверить её с примером из документа. У меня результаты совпали.
    Можно упростить, если использовать объединение (UNION).


    Код:
    FUNCTION PIC_TO_REAL : REAL
    VAR_INPUT
        picData : ARRAY[0..2] OF BYTE;  // Три байта в формате PIC: [мл.байт мантиссы, ст.байт мантиссы, порядок]
    END_VAR
    VAR
        abyTemp : ARRAY[0..3] OF BYTE;  // 4 байта
        dwTemp : DWORD;
        result : REAL;
    END_VAR
    Код:
    abyTemp[0] := 0; //Нулевой байт REAL = 0
    abyTemp[1] := picData[0]; // Первый байт REAL = нулевой байт PIC (мл. байт мантиссы)
    abyTemp[2] := picData[1] AND 16#7F; // Второй байт REAL = первый байт PIC (ст. байт мантиссы) со сброшенным знаком
    
    // Проверка младшего бита порядка (из второго байта PIC)
    IF (picData[2] AND 16#01) <> 0 THEN
        // Если младший бит установлен, устанавливаем старший бит второго байта REAL
        abyTemp[2] := abyTemp[2] OR 16#80;
    END_IF
    
    // Третий байт REAL = второй байт PIC, сдвинутый вправо на 1 бит
    abyTemp[3] := SHR(picData[2], 1);
    
    // Установка знакового бита в третьем байте REAL
    IF (picData[1] AND 16#80) <> 0 THEN
        // Если знак отрицательный (старший бит первого байта PIC установлен)
        abyTemp[3] := abyTemp[3] OR 16#80;
    ELSE
        abyTemp[3] := abyTemp[3] AND 16#7F;
    END_IF
    
    // Копируем байты в DWORD
    dwTemp := 	SHL(TO_DWORD(abyTemp[1]), 8) OR 
    			SHL(TO_DWORD(abyTemp[2]), 16) OR
            	SHL(TO_DWORD(abyTemp[3]), 24);
    
    // Копируем DWORD в REAL через указатель
    MEM.MemMove(ADR(dwTemp), ADR(result), SIZEOF(result));
    
    PIC_TO_REAL := result;
    Инженер по продукту ПЛК

    e-mail: a.pineko-skvortsov@owen.ru

  5. #1675

    По умолчанию

    Цитата Сообщение от Александр Пинэко-Скворцов Посмотреть сообщение
    Вот функция на ST, можете проверить её с примером из документа. У меня результаты совпали.
    Можно упростить, если использовать объединение (UNION).
    Огромное спасибо за функцию, работает отлично, данные преобразуются корректно.

  6. #1676
    Пользователь Аватар для Party3AH
    Регистрация
    24.03.2023
    Адрес
    Север
    Сообщений
    110

    По умолчанию

    Здравствуйте!
    Есть несколько похожих проектов на разных объектах, но суть одна.
    ПЛК 210-03 выступает в роли Modbus Slave. Периодически к нему подключаются различные ПЛК-мастера, которые передают свой ID. Если ID = 0, то ПЛК-Slave считает, что никто не подключен.
    На одном объекте при отключении мастера ID всегда обнуляется самостоятельно, на другом объекте при отключении ID остаётся прежним и не сбрасывается в "0".
    Через сравнение проектов практически нет отличий.

    Вопрос - где-то есть настройка на подобии "обработка ошибок" для Master (сохранять последнее значение / установить в ноль), но для Slave-устройства?

    Скрин настроке ПЛК-Slaveslave.jpg
    Последний раз редактировалось Party3AH; 17.02.2026 в 10:41. Причина: добавил скрин настроек

  7. #1677

    По умолчанию

    Цитата Сообщение от Party3AH Посмотреть сообщение
    Здравствуйте!
    Есть несколько похожих проектов на разных объектах, но суть одна.
    ПЛК 210-03 выступает в роли Modbus Slave. Периодически к нему подключаются различные ПЛК-мастера, которые передают свой ID. Если ID = 0, то ПЛК-Slave считает, что никто не подключен.
    На одном объекте при отключении мастера ID всегда обнуляется самостоятельно, на другом объекте при отключении ID остаётся прежним и не сбрасывается в "0".
    Через сравнение проектов практически нет отличий.

    Вопрос - где-то есть настройка на подобии "обработка ошибок" для Master (сохранять последнее значение / установить в ноль), но для Slave-устройства?

    Скрин настроке ПЛК-Slaveslave.jpg
    Добрый день.
    За обнуление отвечает настройка Сторожевой таймер. Вместе с ней нужно установить галочку Закрыть сокет TCP.
    Отмечу, что в версии компонента 3.5.17.0 - 4.2.0.0 был баг, из-за которого эта настройка не работала.
    Начиная с 4.3.0.0 - это исправили.

  8. #1678
    Пользователь Аватар для Party3AH
    Регистрация
    24.03.2023
    Адрес
    Север
    Сообщений
    110

    По умолчанию

    Цитата Сообщение от Евгений Кислов Посмотреть сообщение
    Добрый день.
    За обнуление отвечает настройка Сторожевой таймер. Вместе с ней нужно установить галочку Закрыть сокет TCP.
    Отмечу, что в версия компонента 3.5.17.0 - 4.2.0.0 был баг, из-за которого эта настройка не работала.
    Начиная с 4.3.0.0 - это исправили.
    Благодарю, Евгений! Попробую галочку "Закрыть сокет TCP".

    Насчёт версий:
    Modbus TCP Slave Device: 4.3.0.0 0 - одинаковые в обоих проектах;
    Ethernet: 3.5.15.0 - одинаковые в обоих проектах;
    Device PLC210: 3.5.14.36 - старый проект, в котором данные при отключении мастера обнуляются, 3.5.17.31 - новый проект, с теми же настройками, в котором данные сохраняются.

  9. #1679
    Пользователь
    Регистрация
    27.10.2019
    Адрес
    Астрахань
    Сообщений
    150

    По умолчанию

    Друзья , у меня есть частотник INVT GD350-19 с платой расширения EC-TX510B . Помогите подключить его к ПЛК210-12 по модбас TCP , второй день мучаюсь.

  10. #1680

    По умолчанию

    Цитата Сообщение от wallera Посмотреть сообщение
    Друзья , у меня есть частотник INVT GD350-19 с платой расширения EC-TX510B . Помогите подключить его к ПЛК210-12 по модбас TCP , второй день мучаюсь.

    EC-TX510B(Ethernet IP) - Плата связи (протокол) Ethernet IP для ПЧ INVT GD350/GD350-19

    Это не модбас, это роквеловский протокол, которого в овене нет...

    PS У него на борту есть модбас рту, попробуйте через него...
    Последний раз редактировалось МихаилГл; 18.02.2026 в 09:37.

Страница 168 из 174 ПерваяПервая ... 68118158166167168169170 ... ПоследняяПоследняя

Похожие темы

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

Ваши права

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