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

Тема: Портирование кода и библиотек с Windows (С#+dotnet core+OwenioNet) на Linux

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

    По умолчанию Портирование кода и библиотек с Windows (С#+dotnet core+OwenioNet) на Linux

    Имеется проект Подключение МДВВ через MOXA к серверу приложений, реализованного на dotnet core 2.1 под Windows.
    Для миграции сервера с Windows на Linux необходимо портировать код, т.к. System.IO.Ports на текущий момент поддерживает только ОС Windows.
    Для работы в Linux с последовательным портом использую SerialPortStream, но в OwenioNet.dll для работы с последовательными портами используется пространство имен System.IO.Ports.

    Кто-нибудь сталкивался с подобной проблемой?
    В целом разработчики ПО Овен могут предоставить исходники OwenioNet.dll?

    p.s. Альтернатива - начал изучение использования ModBus, но у меня изначально были затруднения в этом направлении.

  2. #2

    По умолчанию

    Цитата Сообщение от nayaganov Посмотреть сообщение
    Имеется проект Подключение МДВВ через MOXA к серверу приложений, реализованного на dotnet core 2.1 под Windows.
    Для миграции сервера с Windows на Linux необходимо портировать код, т.к. System.IO.Ports на текущий момент поддерживает только ОС Windows.
    Для работы в Linux с последовательным портом использую SerialPortStream, но в OwenioNet.dll для работы с последовательными портами используется пространство имен System.IO.Ports.

    Кто-нибудь сталкивался с подобной проблемой?
    В целом разработчики ПО Овен могут предоставить исходники OwenioNet.dll?

    p.s. Альтернатива - начал изучение использования ModBus, но у меня изначально были затруднения в этом направлении.

    Добрый день!
    Попробуйте пример во вложении.
    Вложения Вложения
    С уважением,

    Новикова Маргарита Валериевна
    Инженер по тестированию
    Бюро серверного программного обеспечения

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

    По умолчанию

    Цитата Сообщение от Новикова Маргарита Посмотреть сообщение
    Добрый день!
    Попробуйте пример во вложении.
    Приветствую!
    Мой код:
    Код:
    public static string OwenReadDiscreteInputs(string comPortNumber)
    {
                /* 
                 * Discrete Inputs Map:
                 * Input #1 - Barrier Open State;
                 * Input #2 - Barrier Close State;
                 */
                byte[] discreteInputs = new byte[] { 0,0 };
                string barrierState = "0";
    
                SerialPortStreamAdapter port = new SerialPortStreamAdapter(comPortNumber, 9600, Parity.None, 8, StopBits.One);
                try
                {
                    port.Open();
                }
                catch(System.IO.IOException)
                {
                    string result = System.String.Format("Ошибка открытия порта {0}", comPortNumber);
                    return result; 
                }
    
                var owenProtocol = OwenProtocolMaster.Create(port); 
    
                discreteInputs = owenProtocol.OwenRead(16, AddressLengthType.Bits8, "r.Cn");
                
                // Barrier Open/Closed State checking
                if((discreteInputs[1] & 0b00000001) == 0b00000001) // Barrier Open
                {
                    barrierState = "Open";
                }
                else if((discreteInputs[1] & 0b00000010) == 0b00000010) // Barrier Closed
                {
                    barrierState = "Closed";
                }
    
                // var discreteInputsString = ConverterAscii.ConvertBack(discreteInputs);
               
                owenProtocol.CloseSerialPort();
                owenProtocol.Dispose();
                
                return barrierState;
    
    }
    Ошибка в части
    Код:
    var owenProtocol = OwenProtocolMaster.Create(port);
    так как данный метод использует
    Код:
    public static IOwenProtocolMaster Create(SerialPort serialPort, IPackageLogger logging = null);
    (класс OwenProtocolMaster.cs) значение "SerialPort", мне необходимо заменить на "SerialPortStream". Использую фреймворк RJCP.IO.Ports вместо System.IO.Ports.

    Как стоит поступить? Можно ли переписать класс OwenProtocolMaster.cs?

    p.s. в с# я сосвем еще плох)

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

    По умолчанию

    а посмотреть реализацию в Mono не вариант ? там библиотеки C# работают вроде из коропки...

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

    По умолчанию

    Цитата Сообщение от melky Посмотреть сообщение
    а посмотреть реализацию в Mono не вариант ? там библиотеки C# работают вроде из коропки...
    Для протокола Овен?

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

    По умолчанию

    При чем тут протокол Овен ? я про работу Com порта. Mono это среда разработки .NET приложений, и приложения, написанные на C# в Windows работают под Linux. dll, работающая с портом не требует изменения кода.
    Вот и посмотреть как происходит работа с портом непосредственно на Linux.

    Ну или вообще попробуйте на Linux в Mono в среде разработки свои исходники загрузить, наверняка что-то выясните...

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

    По умолчанию

    Цитата Сообщение от melky Посмотреть сообщение
    а посмотреть реализацию в Mono не вариант ? там библиотеки C# работают вроде из коропки...
    Проблема не в реализации работы с com-портом под Linux, а в том чтобы в исходниках owenionet.dll сделать пару правок.
    Одна из причин использования протокола Овен - нестабильной связи по ModBus, постоянно вылетает ошибка CRC (Win и Linux). Пробовал менять скорость приемо-передачи, но результата нет.
    Протокол Овен работает более ли менее стабильно.

    В целом используется связка устройств Овен МДВВ <-> Moxa <-> сеть <-> ПК. Овен МДВВ и Moxa расположены в одном шкафу, связь с Moxa по TCP.
    Писать свою реализацию протокола Овен - крайний вариант.

    Поэтому смена IDE мне никак не поможет.

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

    По умолчанию

    что, owenionet.dll прямо таки защищена от вкрытия ?

Похожие темы

  1. Библиотека Mercury 23x core для CS3.5
    от S#716_0P в разделе СПК2хх
    Ответов: 35
    Последнее сообщение: 01.08.2021, 09:12
  2. Библиотека OwenioNet для .NET
    от petja в разделе Помощь Разработчикам
    Ответов: 0
    Последнее сообщение: 10.05.2018, 06:38
  3. Проблема с OPC UA в Windows 2012 R2 и Windows 10
    от ScooloV в разделе Master SCADA 3
    Ответов: 0
    Последнее сообщение: 04.04.2017, 09:27
  4. ВЫВОД HEX КОДА
    от za9c в разделе OPC Серверы
    Ответов: 0
    Последнее сообщение: 13.01.2017, 12:10
  5. Trm 138 сброс кода доступа
    от Kurdt_Sliver в разделе Эксплуатация
    Ответов: 0
    Последнее сообщение: 31.03.2010, 18:53

Метки этой темы

Ваши права

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