Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 12

Тема: Снова C#, owen_io.dll и ТРМ138

  1. #1

    По умолчанию Снова C#, owen_io.dll и ТРМ138

    Мне нужно читать и записывать уставки в ТРМ138. Скачал образец программы на C#, внес изменения на предмет импортирования функции ReadStoredDotS и чтения параметра C.SP.

    Импортировал так:
    Код:
    [DllImportAttribute("owen_io.dll", EntryPoint = "ReadStoredDotS", CallingConvention = CallingConvention.StdCall)]
    public static extern int ReadStoredDotS(int adr, int adr_type, System.IntPtr command, ref float value, int index);
    Использую так (адрес 11-ти битный, с 8-мибитным ситуация та же):
    Код:
    IntPtr name = Marshal.StringToCoTaskMemAnsi("C.SP");
    
    float value = 0;
    deviceAddress = 0;
    
    ConnectionError res = (ConnectionError)NativeMethods.ReadStoredDotS(deviceAddress, 1, name, ref value, -1);
    
    if (res == ConnectionError.Ok)
    {
        textBoxMemo.Text = value.ToString();
    }
    else
    {
        MessageBox.Show("Ошибка чтения: " + res.ToString());
    }
    
    Marshal.FreeCoTaskMem(name);
    При установленной в ТРМ138 уставке, равной 90 градусам, моя функция читает волшебное значение 499.6. Конфигуратор ТРМ138 читает и показывает 90.
    Мало того, при просмотре обмена на порту, что от моей программы и обратно, что от конфигуратора и обратно идут абсолютно одинаковые пакеты.

    Это запрос:
    23 47 47 48 47 49 47 49 47 48 55 4E 4E 0D #GGHGIGIGHUNN.

    Это ответ:
    23 47 47 47 49 49 47 49 47 48 4A 4F 4B 54 4C 4E 49 0D #GGGIIGIGHJOKTLNI.

    Откуда же берется такая разница после преобразования?
    Заранее спасибо за помощь.

  2. #2

    По умолчанию

    Еще немного поковырялся, попеременно пробуя работу конфигуратором и моей программой. Выяснилось, что если конфигуратором записать уставку равную 0, то моя программа считает 0. Если уставка равна 10 градусов, моя программа считает 419,6. При 20 - 429,6 и так далее. То есть, откуда-то берутся дополнительные 409,6. Я, конечно, могу их отнять в моей программе, но что, если через некоторое время это волшебное число изменится на какое-нибудь другое .

    ЗЫ Оказывается, эти волшебные 409,6 в двоичном виде выглядят как 110011001.10011001100110011001100. Очень красивое и обладающее системой число .
    Последний раз редактировалось YuriKarelin; 18.06.2015 в 02:39.

  3. #3
    Пользователь Аватар для murdemon
    Регистрация
    03.02.2014
    Адрес
    Санкт-Петербург
    Сообщений
    844

    По умолчанию

    Там в протоколе овен какой то хитрый формат float - 3 байта ..

  4. #4

    По умолчанию

    Да, вроде, по описанию C.SP не float, а знаковое с фиксированной точкой. И пользуюсь именно той функцией, которую они в tag.txt при библиотеки прописали. Пробовал прочитать этот параметр функцией ReadIEEE32 - функция возвращает ошибку формата, как и должно.

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

    По умолчанию

    Цитата Сообщение от YuriKarelin Посмотреть сообщение
    Да, вроде, по описанию C.SP не float, а знаковое с фиксированной точкой. И пользуюсь именно той функцией, которую они в tag.txt при библиотеки прописали. Пробовал прочитать этот параметр функцией ReadIEEE32 - функция возвращает ошибку формата, как и должно.
    почему не модбас, там стандартный флоат?
    если протокол овен, то когда Вы употребляете фразу знаковое с фиксированной точкой что имеет ввиду, переводить его во флоат не нужно это двухбайтное число целочисленное от -999 до 9999
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

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

  6. #6

    По умолчанию

    Я не нашел, как изменить протокол обмена в моем ТРМ. Меню уровня PL-4 заканчивается параметром n.Flt. К тому же, я посчитал, что самый быстрый способ разработки - использование библиотек изготовителя. А сейчас уже просто стало интересно, почему вижу то, что вижу.
    Разобрал ответы от ТРМ, оказалось, что уставки передаются в двух байтах в формате знакового целого с запятой, как и описано в документации. И те самые 409,6 (4096) это и есть экспонента (10^-1) в 12 бите двухбайтового числа. То есть, получив целое, я могу отмаскировать 12-14 биты, получив экспоненту, а биты 0-11 будут мантиссой.
    Осталось понять, почему стандартная функция для чтения ReadStoredDotS не делает этого сама, а выдает мне сырой результат. Буду пользоваться ReadUInt и вручную проделывать описанные выше операции, если не разберусь, как делать правильно.

  7. #7
    Пользователь Аватар для murdemon
    Регистрация
    03.02.2014
    Адрес
    Санкт-Петербург
    Сообщений
    844

    По умолчанию

    Пошлите вопрос... OWEN поддержке.... пусть они бар репорт заведут и в следующем релизе поправят

  8. #8

    По умолчанию

    Всем спасибо за помощь и поддержку. Победил тем методом, что описал, через одно нехарактерное место.
    Что странно, функция WriteStoredDotS, в отличие от ReadStoredDotS, работает нормально.

  9. #9

    По умолчанию

    Свежую версию библиотеки не пробовали с сайта скачать?

    http://www.owen.ru/catalog/biblioteka_win_dll/opisanie

  10. #10

    По умолчанию

    Цитата Сообщение от Дмитрий Егоренков Посмотреть сообщение
    Свежую версию библиотеки не пробовали с сайта скачать?

    http://www.owen.ru/catalog/biblioteka_win_dll/opisanie
    Ее, родимую, и качал .

Страница 1 из 2 12 ПоследняяПоследняя

Похожие темы

  1. owen_io.dll + C#
    от binaryman в разделе Помощь Разработчикам
    Ответов: 2
    Последнее сообщение: 22.10.2014, 16:06
  2. ТРМ138-Р без owen_io.dll
    от SergioSV в разделе Сервисное ПО
    Ответов: 4
    Последнее сообщение: 03.11.2009, 12:32
  3. owen_io.dll
    от Arkady в разделе Помощь Разработчикам
    Ответов: 8
    Последнее сообщение: 27.07.2007, 07:36
  4. owen_io.dll
    от Vladimir в разделе Помощь Разработчикам
    Ответов: 4
    Последнее сообщение: 27.04.2007, 15:13
  5. owen_io.dll - ТРМ138
    от Соловьев Владимир в разделе Сервисное ПО
    Ответов: 20
    Последнее сообщение: 26.03.2007, 12:47

Ваши права

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