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

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

  1. #1

    По умолчанию owen_io.dll + .NET 4.0 + C#

    Здравствуйте.

    Написал простенькое консольное приложение на шарпах с библиотекой owen_io.dll.

    Код:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Runtime.InteropServices;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace ConsoleApplicationOWENDLLImport
    {
        class Program
        {
            internal class OwenIO
            {
                [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", CharSet = CharSet.Unicode, EntryPoint = "ReadFloat24", CallingConvention = CallingConvention.StdCall)]
                public static extern int ReadFloat24(int adr, int adr_type, string command, float value, int index);
            }
    
            static void Main(string[] args)
            {
                int result;
                float value = 0;
    
                result = OwenIO.OpenPort(2, 8, 0, 1, 0, 1);
                Console.WriteLine(result); //возвращается 0 - успешно
    
                result = OwenIO.ReadFloat24(32, 0, "PV", value, 0);
                Console.WriteLine(result); //возвращается -104 - сетевая ошибка nErr
                Console.WriteLine(value); //возвращается 0, т.к. значение не изменилось
    
                result = OwenIO.ClosePort();
                Console.WriteLine(result); //возвращается 0 - успешно
    
                Console.ReadLine();
            }
        }
    }
    Как видно из моих комментариев порт открывается и закрывается нормально, т.е. без ошибок (код возврата 0), а вот чтение параметра PV не удаётся (код возврата -104, что соответствует сетевой ошибке nErr). Грешу на PChar и string.

    Подскажите, пожалуйста, в чём может быть проблема. Заранее благодарен

    З.Ы.: у меня owen_io.dll версии 1.2.0.17 - это последняя версия библиотеки?

  2. #2

    По умолчанию

    С каким устройством пытаетесь общаться? Как оно подключено? На прямую в COM порт или через преобразователь интерфейса типа ОВЕН ЕКОН134? Сталкивался с подобной проблемой при работе через «ОВЕН ЕКОН134». Причиной была неправильная настройка порта.

  3. #3

    По умолчанию

    И при работе через преобразователи COM-портов в Ethernet фирмы Moxa была такая же ситуация. Оказалось, что в русской документации на моксу A и B выходы были перепутаны. Если через преобразователи работаете то, скорее всего, нет связи преобразователя с устройством.

  4. #4

    По умолчанию

    Подключаюсь через АС4, работаю с ТРМ201. Но функции открытия и закрытия порта судя по кодам работают нормально.

  5. #5

    По умолчанию

    Преобразователь подключенный к пк эмулирует com порт и вы общаетесь именно с этим ком портом т.е. с преобразователем а он уже с устройством. Порт пк -> преобразователь открывается но не факт что есть связь преобразователь -> устройство.

  6. #6

    По умолчанию

    Проверьте настройки порта на преобразователе и на устройстве. они должны совпадать. с АС4 не работал но думаю принцип тот же.

  7. #7

    По умолчанию

    С Delphi у меня всё нормально работало (библиотека одинаковая), а с C# такая вот проблема. Так что думаю проблема в моём коде, а не в настройках приборов и т.д.

  8. #8

    По умолчанию

    Тогда дело в дллимпорте. Я точно не помню как он пишется 1 раз делал потом на c# свою либу писал для общения по овену. укажите явно [In],[Out] параметры. float value точно было ин аут.

    Код:
                [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", CharSet = CharSet.Unicode, EntryPoint = "ReadFloat24", CallingConvention = CallingConvention.StdCall)]
                public static extern float ReadFloat24(int adr, int adr_type, [MarshalAs(UnmanagedType.BStr)] string command,[In] [Out] ref float value, int index);
    Точно не помню но делал такое а код уже удалил. Попробуйте вместо Unicode поставить ASCII и тип возвращаемого значения float.

  9. #9

    По умолчанию

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

  10. #10

    По умолчанию

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

Страница 1 из 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, 14:03
  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

Ваши права

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