Показано с 1 по 6 из 6

Тема: Получение значений от влагомера по TCP

  1. #1

    По умолчанию Получение значений от влагомера по TCP

    Добрый день.
    Помогите пожалуйста разобраться, третий день не могу собрать все в рабочий вариант,уже кучу всего перепробовал. (Готов отблагодарить,наверное это самый правильный путь, так как знаний не хватает, пишите в личку)
    Есть СПК и влагомер который по протоколу TCP/IP при подключении к порту 4002 отправляет данные с интервалом 500мс :
    [0…3] – значение влажности в формате float ( [0] - младший байт, [3] - старший байт )
    [4] – номер текущего рецепта расчета значения влажности от 0 до 20,
    [5] – максимально возможное количество рецептов 20.
    До чего дошел:
    С помощью библиотеки CAA Net Base Services, устанавливаю соединение, значения удается получить.
    Но вот как их правильно обработать не знаю:
    1)Если получаю значения в переменную типа String(6),потом разбираю ее на массив байт [1..6], то значения [4] и [5] спокойно можно обработать из этого массива, а вот как свернуть первые 4 байта из массива в float не могу понять никак.
    Пример
    fbTcpRead
    (
    xEnable := TRUE,
    hConnection := fbTcpClient.hConnection,
    pData := ADR(VlString),
    szSize := SIZEOF(VLString),
    );

    2) Если делаю передаю указатель на Real, то периодически получаю нужное мне значение в переменной VLREAL, но как получить другие [4..5] не представляю.

    fbTcpRead
    (
    xEnable := TRUE,
    hConnection := fbTcpClient.hConnection,
    pData := ADR(VLREAL),
    szSize := SIZEOF(VLREAL),
    );
    Понимаю логически,что мне необходимо работать с буфером целиком и часть байт с 0...3 отправлять в переменную REAL,a 4 и 5 байт записывать в целочисленное, но как это сделать не понимаю.
    Возможно есть примеры?


    Также при необходимости обратно нужно отправлять команды в формате:
    [0] = 1 - код команды выбора рецепта
    [1]- номер требуемого рецепта (0-20), вот с этим тоже вопрос, в какой тип данных необходимо отправить,я понимаю, что размер команды 2 байта, но в какой тип переменной их нужно записать?

    fbTcpWrite
    (
    xExecute := TRUE,
    hConnection := fbTcpClient.hConnection,
    pData := ADR(sClientString),
    szSize := SIZEOF(sClientString)
    );
    Последний раз редактировалось oif; 12.02.2021 в 14:02.

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

    По умолчанию

    Добрый день.
    1. Для Read - под указатель поместите ARRAY [0..5] OF BYTE, покажите, какие значения будут записаны в массив и каким реальным данным они соответствуют.
    2. Для Write - тип переменной зависит от типа, который нужен прибору - возможно, это просто ARRAY [0..1] OF BYTE - должно быть указано в документации на протокол прибора.

  3. #3

    По умолчанию

    1)VLString[0];=128
    VLString[1];=50
    VLString[2];=71
    VLString[3];=64
    VLString[4];=15
    VLString[5];=20
    С 0...3 это реально приблизительно float= 3.1
    4= реально 16 рецепт(Все нормально,так как отсчет с 0)
    5= реально 20 (тоже все отлично)
    2)Указан протокол TCP/IP по IEEE 802.3

  4. #4

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    не пробовали подключить оскат библиотеку и поиграться функциями DWORD_OF_BYTE а затем DW_TO_REAL ?
    Сейчас попробую,нашел ее описание. Спасибо большое!

  5. #5

    По умолчанию

    Цитата Сообщение от oif Посмотреть сообщение
    Сейчас попробую,нашел ее описание. Спасибо большое!
    Все супер. Этот вопрос снялся. Все данные получены. Все удалось преобразовать с помощью oscat.

  6. #6

    По умолчанию

    Цитата Сообщение от Евгений Кислов Посмотреть сообщение
    Добрый день.
    1. Для Read - под указатель поместите ARRAY [0..5] OF BYTE, покажите, какие значения будут записаны в массив и каким реальным данным они соответствуют.
    2. Для Write - тип переменной зависит от типа, который нужен прибору - возможно, это просто ARRAY [0..1] OF BYTE - должно быть указано в документации на протокол прибора.
    По второму вопросу вы правы,так и есть.
    Спасибо огромное!!!!

Похожие темы

  1. Получение значений температуры 100П
    от bosch в разделе Программируемые реле
    Ответов: 7
    Последнее сообщение: 05.03.2020, 14:01
  2. Получение значений float32
    от инок в разделе СПК2хх
    Ответов: 57
    Последнее сообщение: 29.11.2015, 14:34
  3. Получение данных из ПЛК на ПК
    от bladerunner в разделе ПЛК1хх
    Ответов: 4
    Последнее сообщение: 06.01.2015, 08:51
  4. Получение сертификата.
    от smk1635 в разделе Трёп (Курилка)
    Ответов: 8
    Последнее сообщение: 13.08.2011, 20:58
  5. Получение данных от МВА8
    от КИПиА в разделе ПЛК1хх
    Ответов: 4
    Последнее сообщение: 03.03.2008, 14:10

Ваши права

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