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

Тема: 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,285

    По умолчанию

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

  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
    Адрес
    Север
    Сообщений
    97

    По умолчанию

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

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

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

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

    По умолчанию

    Цитата Сообщение от 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
    Адрес
    Север
    Сообщений
    97

    По умолчанию

    Цитата Сообщение от Евгений Кислов Посмотреть сообщение
    Добрый день.
    За обнуление отвечает настройка Сторожевой таймер. Вместе с ней нужно установить галочку Закрыть сокет 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 из 172 ПерваяПервая ... 68118158166167168169170 ... ПоследняяПоследняя

Похожие темы

  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

Ваши права

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