gpt4 book ai didi

c# - 如何在 Win10 IoT 中获取 SerialDevice 状态

转载 作者:太空宇宙 更新时间:2023-11-03 15:07:04 25 4
gpt4 key购买 nike

情况:工业机器使用串行端口(通过 USB)连接到 Raspberry。它由发送到串行端口的字符串控制。

项目:为 Raspberry 控制此类机器创建一个应用程序。

工具:通过以太网连接到 Raspberry 的 PC 上的 Visual Studio 2015,其中应用程序是用 C# 为 Win 10 UWP 编写的,并在为 ARM 构建时部署到 Raspberry。

问题:由于机器在现实世界中可能需要几分钟来执行命令,因此最好在 Raspberry 监视器上提供有关机器当前状态的反馈(此外,很明显,视觉和听觉线索运算符(operator)可以在操作时拥有)。

互联网上有几个 SerialDevice 代码示例。我从他们那里得到了我的代码。创建端口:

serialPort = await SerialDevice.FromIdAsync(Id);
serialPort.WriteTimeout = TimeSpan.FromMilliseconds(1000);
serialPort.ReadTimeout = TimeSpan.FromMilliseconds(2000);
serialPort.BaudRate = 9600;
serialPort.Parity = SerialParity.None;
serialPort.StopBits = SerialStopBitCount.One;
serialPort.DataBits = 8;
// serialPort.Handshake = SerialHandshake.None;
// serialPort.Handshake = SerialHandshake.RequestToSend;
serialPort.Handshake = SerialHandshake.RequestToSendXOnXOff;

并发送命令:

public async Task WriteAsync(string cmdText)
{
Task<int> storeAsyncTask;
dataWriteObject = new DataWriter(serialPort.OutputStream);
dataWriteObject.WriteString(cmdText);
storeAsyncTask = dataWriteObject.StoreAsync().AsTask();
int bytesWritten = await storeAsyncTask;
}

我现在对读取从端口发送的数据不感兴趣。机器不会那样做。现在,PC 桌面程序,其此应用程序是一个简化的移植,在某些时候具有检查状态的代码:

bool CTS = serialPort.ClearToSendState;
bool DSR = serialPort.DataSetReadyState;

if (CTS)
if (DSR) // true true
state = EnumStates.ERROR;
else // true false
state = EnumStates.READY;
else
if (DSR) // false true
state = EnumStates.BUSY;
else // false false
state = EnumStates.DISCONNECTED;

问题是这些状态在 Win 10 应用程序中永远不会从 false 改变,而一切都适用于 PC 版本。关于这个只有一个 Unresolved 老问题,似乎没有人在创建示例时关心端口的状态。我尝试了每种类型的控制流标志,但都没有成功。我尝试使用 Visual Studio 的 Intellisense 提供的各种东西,但没有什么好结果。将值 serialPort.IsRequestToSendEnabled 强制为 true 会导致无效值异常。

非常感谢任何提示。

最佳答案

我在 Windows 10 UWP 下看到串行端口的行为完全相同。 SerialPort.DataSetReadyState 永远不会改变。我发现的唯一解决方法是 Hook SerialPinChange 事件,并在那里捕获 DSR 状态更改。不幸的是,这并没有给你值(value),只是它改变了的事实,但它可能会在给定已知初始状态的情况下跟踪值(value)。

        AddHandler SerialPort.PinChanged,
Sub(sender As Object, e As PinChangedEventArgs)
Select Case e.PinChange
Case SerialPinChange.DataSetReady
DSRchanged = True
End Select
End Sub

关于c# - 如何在 Win10 IoT 中获取 SerialDevice 状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42915561/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com