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

Тема: C#, ТРМ202, Протокол OWEN, owen_io.dll : помогите считать float параметры

  1. #1

    По умолчанию C#, ТРМ202, Протокол OWEN, owen_io.dll : помогите считать float параметры

    Имеется ТРМ202 старой модификации (без modbus, только OWEN). Никак не могу считать float параметры. Целочисленные читаются.
    Порт открывается
    Код:
                ConnectionError res = (ConnectionError)NativeMethods.OpenPort(
                    (int)numericUpDown1.Value, (int)BaudRate.Baud115200, (int)Parity.None, (int)DataBits.Eight, (int)StopBits.One, (int)ConverterType.Auto);
    
                if (res != ConnectionError.Ok)
                {
                    label8.Text = "Ошибка открытия порта: " + res.ToString();
                }
                else
                {
                    label8.Text = "Com port открыт";
                }
    Методы из библиотеки owen_io.dll
    Код:
        partial class NativeMethods
        {
            [DllImportAttribute("owen_io.dll", EntryPoint = "OpenPort", CallingConvention = CallingConvention.StdCall)]
            public static extern int OpenPort(int n, int speed, int part, int bits, int stop, int vid);
    
            [DllImportAttribute("owen_io.dll", EntryPoint = "ClosePort", CallingConvention = CallingConvention.StdCall)]
            public static extern int ClosePort();
    
    
            [DllImportAttribute("owen_io.dll", EntryPoint = "ReadIEEE32", CallingConvention = CallingConvention.StdCall)]
            public static extern int ReadIEEE32(int adr, int adr_type, System.IntPtr command, ref float value, ref int time, int index);
    
    
            [DllImportAttribute("owen_io.dll", EntryPoint = "ReadUInt", CallingConvention = CallingConvention.StdCall)]
            public static extern int ReadUInt(int adr, int adr_type, System.IntPtr command, ref int value, int index);
    
            [DllImportAttribute("owen_io.dll", EntryPoint = "ReadSInt", CallingConvention = CallingConvention.StdCall)]
            public static extern int ReadSInt(int adr, int adr_type, System.IntPtr command, ref int value, int index);
    
    
            [DllImportAttribute("owen_io.dll", EntryPoint = "ReadFloat24", CallingConvention = CallingConvention.StdCall)]
            public static extern int ReadFloat24(int adr, int adr_type, System.IntPtr command, ref float value, int index);
    
    
            [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);
        }
    Целочисленные параметры читаются

    Код:
                int bitMask = 0;
    
                ConnectionError res;
    
                IntPtr  name = Marshal.StringToCoTaskMemAnsi(textBox1.Text);
    
                res = (ConnectionError)NativeMethods.ReadUInt(
                            (int)numericUpDown2.Value, 0, name, ref bitMask, -1);
    
                        if (res == ConnectionError.Ok)
                        {                        
                            textBox2.Text = bitMask.ToString();
                        }
    А вот float вообще никак не хочет читаться

    Код:
    IntPtr name = Marshal.StringToCoTaskMemAnsi(textBox1.Text);
    
                float value = 0;
    
                ConnectionError res = (ConnectionError)NativeMethods.ReadStoredDotS((int)numericUpDown2.Value, 1, name, ref value, -1);
    Посоветуйте как float вычитать. Или примерами поделитесь рабочими. Заранее благодарен.

  2. #2
    Пользователь
    Регистрация
    01.04.2010
    Адрес
    Лыткарино
    Сообщений
    174

    По умолчанию

    Я поехал и Сервис-центр и перепрошил 202 новой прошивкой и появился модбас

  3. #3

    По умолчанию

    Цитата Сообщение от liga_blunt Посмотреть сообщение
    Я поехал и Сервис-центр и перепрошил 202 новой прошивкой и появился модбас
    202, которые у меня, старой модификации. Прошивка невозможна (Это ответ поддержки).

  4. #4
    Пользователь
    Регистрация
    01.04.2010
    Адрес
    Лыткарино
    Сообщений
    174

    По умолчанию

    У меня были 2009г. как то так

  5. #5

    По умолчанию

    Цитата Сообщение от liga_blunt Посмотреть сообщение
    У меня были 2009г. как то так
    от 2006го в наличии

  6. #6
    Пользователь
    Регистрация
    24.03.2013
    Сообщений
    5

    По умолчанию

    Цитата Сообщение от Avol Посмотреть сообщение
    Имеется ТРМ202 старой модификации (без modbus, только OWEN). Никак не могу считать float параметры. Целочисленные читаются.
    Порт открывается

    Методы из библиотеки owen_io.dll

    Посоветуйте как float вычитать. Или примерами поделитесь рабочими. Заранее благодарен.
    Код:
        [DllImport("owen_io.dll", EntryPoint = "ReadFloat24")]
        public static extern int ReadFloat24(uint adr, uint adr_type, string command, ref float value,  int index);
    Параметры
    adr Адрес устройства.
    adr_type Длина адреса.(0 - 8 бит ;1- 11 бит)
    command Команда.
    value Значение считанного параметра.
    index Индекс.
    Возвращаемое значение При успехе ERR_OK, при неудаче <0.


    Код:
    float val=0;
    if(ReadFloat24((int)numericUpDown2.Value, 1, textBox1.Text, ref value, -1)==ERR_OK)
    {куда то там вывести val;}
    adr и index зависит от того какой у вас параметр, некоторые читаются с истинными адресами прибора, некоторые со сдвигом адресанекоторые по линейному индексу-курите на прибор доки и зрите в конфигуратор

  7. #7

    По умолчанию

    Напишу как читается, может пригодиться кому-нибудь:
    Код:
    Целочисленные: 
    ConnectionError res = (ConnectionError)NativeMethods.ReadUInt(AdresDevice, 0, NameParam, ref value, Index);
    Index = -1 для параметров не требующих индексации. Например: Addr, rSdL...
    
    Float24:
    ConnectionError res = (ConnectionError)NativeMethods.ReadFloat24(DeviceAddress + (Chanel - 1), 0, name, ref value, Index);
    Для считывания оперативных параметров PV, LuPV... смещать нужно DeviceAddress, Index = -1. Т.е. для первого канала DeviceAddress, для второго DeviceAddress + 1.
    Последний раз редактировалось Avol; 09.10.2015 в 05:12.

Похожие темы

  1. owen_io.dll + C#
    от binaryman в разделе Помощь Разработчикам
    Ответов: 2
    Последнее сообщение: 22.10.2014, 16:06
  2. Опрос прибора ТРМ202 без использования библиотеки owen_io.dll
    от Илья59 в разделе Помощь Разработчикам
    Ответов: 0
    Последнее сообщение: 20.06.2012, 12:34
  3. Помогите разобраться с owen_io.dll и СИ8
    от D1z_pr0 в разделе Помощь Разработчикам
    Ответов: 2
    Последнее сообщение: 11.09.2008, 17:39
  4. owen_io.dll
    от Arkady в разделе Помощь Разработчикам
    Ответов: 8
    Последнее сообщение: 27.07.2007, 07:36
  5. owen_io.dll
    от Vladimir в разделе Помощь Разработчикам
    Ответов: 4
    Последнее сообщение: 27.04.2007, 15:13

Ваши права

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