Member 13564682 Ответов: 1

Как завершить работу с установленным последовательным мостовым портом в классе pvserialbridge ebus SDK.


Всем привет.
Во-первых, мой английский не очень хорош, но, пожалуйста, пардом.

Я хочу снова установить последовательный мост с помощью нового объекта PvDevice после остановки последовательного моста, установленного в классе PvSerialBridge пакета eBUS SDK один раз.
Однако, если я попытаюсь снова подключиться во второй раз, это произойдет "указанный порт уже используется".
(eBUS SDK версии 4.1.7)

Технологическая цепочка:
1. Создайте PvDevice.
PvDevice * pDevice;
pDevice = PvDevice::CreateAndConnect( aDeviceGUID, &lResult );

2. Создайте Последовательный Мост
PvDeviceAdapter lAdapter( pDevice );
PvSerialBridge мост;
PvResult lResult = мост.Start( "MyBridge", &lAdapter, PvDeviceSerialBulk0 );

3. Другие обработки

4. отсоедините соединение с устройством.
мост.Стоп();
устройство.PvDevice::Free( pDevice );
pDevice = NULL;

5. из другой функции снова выполняется обработка подключения к устройству.
PvDevice * pDevice;
pDevice = PvDevice::CreateAndConnect( aDeviceGUID, &lResult );

6. Создайте Мост
PvDeviceAdapter lAdapter( pDevice );
PvSerialBridge мост;
PvResult lResult = мост.Start( "MyBridge", &lAdapter, PvDeviceSerialBulk0 );

В этот момент выполнение метода Start не позволяет установить мост.

Здесь PvDeviceSerialBulk 0-это перечисление, определенное в заголовочном файле "PvDeviceSerialPort"
Если PvDeviceSerialPort используется для открытия порта до установления моста, возникает аналогичная ошибка.
Кроме того, после открытия порта и установления моста после закрытия он работает нормально.

[Случаи неудач]
PvDeviceSerialPort ДС;
ds.Open(&lAdapter, PvDeviceSerialBulk0); // PortOpen
PvResult lResult = мост.Start( "MyBridge", &lAdapter, PvDeviceSerialBulk0 ); // Fail

[Успешный пример]
PvDeviceSerialPort ДС;
ds.Open(&lAdapter, PvDeviceSerialBulk0); // PortOpen
ДС.Рядом();
PvResult lResult = мост.Start( "MyBridge", &lAdapter, PvDeviceSerialBulk0 ); // успех


Исходя из вышесказанного, я думаю, что порт "PvDeviceSerialBulk 0" при установлении моста с мостом.Start() не закрывается,
В дополнение к методу Stop, PvSerialBridge не имеет такой функции, как Close, и нет никакого метода для получения PvDeviceSerialPort,
Я не могу восстановить связь.

Если у вас есть что предложить, я был бы спасен, если бы вы могли сказать мне.

Что я уже пробовал:

Я искал "PvSerialBridge", "PvDeviceSerialPort" и т. д. В Google.
Я прочитал пример кода C ++, включенный в пакет eBUS SDK.
Я проверил спецификации каждого класса в справке, прилагаемой к eBUS SDK.

1 Ответов

Рейтинг:
12

Jochen Arndt

Я никогда не использовал eBus но эта эта линия выглядит подозрительно:

device.PvDevice::Free( pDevice );
Что такое device - здесь?

Я ожидал бы чего-то вроде
// If a Disconnect function exists and not done by PvDevice::Free()
//PvDevice::Disconnect( pDevice );
PvDevice::Free( pDevice );


Member 13564682

спасибо за ваш ответ.
> Устройство.PvDevice::Free( pDevice );
извиняюсь. Это ошибка в описании.
Первое "устройство." В этом нет необходимости.

> Я бы ожидал чего-то вроде
Поскольку в образце не было никакого разъединения, он был вместе.
Я поставил Disconnect перед свободным методом, но, к сожалению, получил ту же ошибку.

Member 13564682

Эта проблема была решена.
Создание моста было сделано отдельным потоком, и я сделал его как цикл, пока он не остановился, из-за несоответствия времени, у меня было свободное устройство, прежде чем мост был остановлен.
Мы подтвердили, что он работает нормально, отключив устройство после завершения остановки в правильном порядке.
Извини, что сбил тебя с толку.

Jochen Arndt

Прекрасно, что она решена, и спасибо вам за ваш отчет.