Просмотр полной версии : Портирование кода и библиотек с Windows (С#+dotnet core+OwenioNet) на Linux
nayaganov
09.08.2018, 15:23
Имеется проект Подключение МДВВ через MOXA к серверу приложений, реализованного на dotnet core 2.1 под Windows.
Для миграции сервера с Windows на Linux необходимо портировать код, т.к. System.IO.Ports на текущий момент поддерживает только ОС Windows.
Для работы в Linux с последовательным портом использую SerialPortStream, но в OwenioNet.dll для работы с последовательными портами используется пространство имен System.IO.Ports.
Кто-нибудь сталкивался с подобной проблемой?
В целом разработчики ПО Овен могут предоставить исходники OwenioNet.dll?
p.s. Альтернатива - начал изучение использования ModBus, но у меня изначально были затруднения в этом направлении.
Новикова Маргарита
13.08.2018, 09:20
Имеется проект Подключение МДВВ через MOXA к серверу приложений, реализованного на dotnet core 2.1 под Windows.
Для миграции сервера с Windows на Linux необходимо портировать код, т.к. System.IO.Ports на текущий момент поддерживает только ОС Windows.
Для работы в Linux с последовательным портом использую SerialPortStream, но в OwenioNet.dll для работы с последовательными портами используется пространство имен System.IO.Ports.
Кто-нибудь сталкивался с подобной проблемой?
В целом разработчики ПО Овен могут предоставить исходники OwenioNet.dll?
p.s. Альтернатива - начал изучение использования ModBus, но у меня изначально были затруднения в этом направлении.
Добрый день!
Попробуйте пример во вложении.
nayaganov
13.08.2018, 13:55
Добрый день!
Попробуйте пример во вложении.
Приветствую!
Мой код:
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. в с# я сосвем еще плох)
а посмотреть реализацию в Mono не вариант ? там библиотеки C# работают вроде из коропки...
nayaganov
14.08.2018, 13:06
а посмотреть реализацию в Mono не вариант ? там библиотеки C# работают вроде из коропки...
Для протокола Овен?
При чем тут протокол Овен ? я про работу Com порта. Mono это среда разработки .NET приложений, и приложения, написанные на C# в Windows работают под Linux. dll, работающая с портом не требует изменения кода.
Вот и посмотреть как происходит работа с портом непосредственно на Linux.
Ну или вообще попробуйте на Linux в Mono в среде разработки свои исходники загрузить, наверняка что-то выясните...
nayaganov
16.08.2018, 07:29
а посмотреть реализацию в Mono не вариант ? там библиотеки C# работают вроде из коропки...
Проблема не в реализации работы с com-портом под Linux, а в том чтобы в исходниках owenionet.dll сделать пару правок.
Одна из причин использования протокола Овен - нестабильной связи по ModBus, постоянно вылетает ошибка CRC (Win и Linux). Пробовал менять скорость приемо-передачи, но результата нет.
Протокол Овен работает более ли менее стабильно.
В целом используется связка устройств Овен МДВВ <-> Moxa <-> сеть <-> ПК. Овен МДВВ и Moxa расположены в одном шкафу, связь с Moxa по TCP.
Писать свою реализацию протокола Овен - крайний вариант.
Поэтому смена IDE мне никак не поможет.
что, owenionet.dll прямо таки защищена от вкрытия ?
Powered by vBulletin® Version 4.2.3 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot