Страница 2 из 2 ПерваяПервая 12
Показано с 11 по 20 из 20

Тема: owen_io.dll + .NET 4.0 + C#

Комбинированный просмотр

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

    По умолчанию

    Цитата Сообщение от iKarma Посмотреть сообщение
    Но всё равно не работает, код ошибки - NaN, т.е. я даже не знаю, что за ошибка. Есть идеи?
    Вы же вроде год назад озадачивались этой темой, тут читали: http://www.owen.ru/forum/showthread....ht=owen_io.dll

  2. #2

    По умолчанию

    А вообще если вам ReadFloat24 надо используйте http://www.owen.ru/forum/showthread.php?t=16224 а ком порт как нибудь сами откроете.

  3. #3

    По умолчанию

    Удалось победить проблему?

  4. #4

    По умолчанию

    Всё, наконец-то разобрался

    Причина была в некорректном дллимпорте и вызове.

    Вот корректный код (вдруг кому ещё поможет):

    Код:
    //...
    
    [DllImportAttribute("owen_io.dll", CharSet = CharSet.Unicode, EntryPoint = "ReadFloat24", CallingConvention = CallingConvention.StdCall)]
    public static extern int ReadFloat24(int adr, int adr_type, System.IntPtr command, ref float value, int index);
    
    //...
    
    IntPtr name = Marshal.StringToCoTaskMemAnsi("PV");
    result = NativeMethods.ReadFloat24(32, 0, name, ref value, -1);
    
    //...

  5. #5

    По умолчанию

    Добрый день! Срочно нужна помощь! Пишу программку на c# что то вроде диспетчеризации. С чтением данных разобрался полностью, а вот запустить машину, или перевести в дежурный режим никак! контроллер ТРМ133м02

    пытался записать параметр "STAT"
    int adr = Convert.ToInt32(textBox1.Text); // адрес прибора
    IntPtr command = Marshal.StringToCoTaskMemAnsi("STAT");
    int value = Convert.ToInt32(textBox3.Text); // величина, которую будем записывать

    try
    {
    int result = RS485.WriteWord(adr, 0, command, value, -1);
    MessageBox.Show("процесс " + result.ToString() + "\n" + "значение " + value.ToString());
    }
    catch
    {
    MessageBox.Show("ошибка чтения данных");
    }
    возвращает ошибку 104

    импорт выполнен так:
    class RS485
    {
    [DllImportAttribute("owen_io.dll", EntryPoint = "OpenPort", CallingConvention = CallingConvention.StdCall)]
    public static extern int OpenPort(int n, int sped, 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 = "SetMaxRetriesGlobal", CallingConvention = CallingConvention.StdCall)]
    public static extern void SetMaxRetriesGlobal(int n);

    [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 = "ReadSInt", CallingConvention = CallingConvention.StdCall)]
    public static extern int ReadSInt(int adr, int adr_type, IntPtr command, ref int param, int index);

    [DllImportAttribute("owen_io.dll", EntryPoint = "WriteWord", CallingConvention = CallingConvention.StdCall)]
    public static extern int WriteWord(int adr, int adr_type, IntPtr command, int value, int index);
    }
    Пожалуйста, подскажите, как мне запустить или остановить этот контроллер! Уже мозг кипеть начинает!

  6. #6

    По умолчанию

    ну подскажите пожалуйста, где же ошибка? в длл импорте?
    [DllImportAttribute("owen_io.dll", EntryPoint = "WriteWord", CallingConvention = CallingConvention.StdCall)]
    public static extern int WriteWord(int adr, int adr_type, IntPtr command, int value, int index);
    может надо добавить ключевое слово ref или out? Блин все перепробовал, ни фига не получается. Люди же сталкивались с такой задачей.....

  7. #7

    По умолчанию

    Короче, подключил сниффер COM порта (виртуального) и посмотрел пакеты.
    RS485.WriteWord(adr, 0, command, value, -1);
    эта хрень отправляет пакеты
    в которых размер блока данных почему то равен двум (0010), вместо ожидаемого одного (0001). как я понял, за величину блока данных отвечает параметр index. Но могу и ошибаться. Методом научного тыка определил, что при изменении index меняется размер блока данных. Однако, единицы добиться так и не смог. Решил записать правильные пакеты, и отправлять их напрямую в порт через класс SerialPort. посмотрим, что выйдет.

  8. #8

    По умолчанию

    Позвольте поинтересоваться, по вашему мнению, какой должен быть размер поля данных при вызове функции WriteByte()?

  9. #9

    По умолчанию

    Может просветите меня, неуча, как оно должно выглядеть? Ладно, два байта. Почему конфигуратор отправляет два пакета, а данная функция один пакет? почему хэш коды разные?

  10. #10

    По умолчанию

    Я думал, 1. проснифил конфигуратор, он отправляет два пакета. Первый с размером два байта, не зависимо от записываемой величины, и с неизвестным мне хэш кодом 2728 или 2827 не помню уже. А второй пакет содержит записываемую величину, размер 1 байт и хэш код 9C5B, что , собственно, я и ожидал увидеть. Сегодня отправлял пакеты напрямую с ком порта, получается. Так, собственно, и думаю решить проблему. Ибо для меня все равно остается загадкой этот нюанс, а сроки поджимают.

Страница 2 из 2 ПерваяПервая 12

Похожие темы

  1. ТРМ101 + АС4 + owen_io + VB.NET 2008
    от tralivali в разделе Помощь Разработчикам
    Ответов: 1
    Последнее сообщение: 22.03.2011, 13:24
  2. owen_io.dll + C# = проблема???
    от Diman в разделе Помощь Разработчикам
    Ответов: 6
    Последнее сообщение: 19.04.2010, 13:03
  3. owen_io.dll
    от Arkady в разделе Помощь Разработчикам
    Ответов: 8
    Последнее сообщение: 27.07.2007, 06:36
  4. owen_io.dll
    от Vladimir в разделе Помощь Разработчикам
    Ответов: 4
    Последнее сообщение: 27.04.2007, 14:13
  5. owen_io.dll - ТРМ138
    от Соловьев Владимир в разделе Сервисное ПО
    Ответов: 20
    Последнее сообщение: 26.03.2007, 11:47

Ваши права

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