Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# c上的Com端口读取#_C#_Serial Port_Byte_Port - Fatal编程技术网

C# c上的Com端口读取#

C# c上的Com端口读取#,c#,serial-port,byte,port,C#,Serial Port,Byte,Port,请告诉我如何从c#中的com端口读取数据,如果数据以字节形式接收,但长度可变,也就是说,答案可能是字节数组20和50,主要问题是,如何知道设备停止响应?最重要的部分是定义使用的协议位。您应该同时具有开始位和停止位,它们将告诉SerialPort对象何时停止读取。通常情况下,您不必在意这一点,因为回调函数将在数组中包含数据 你没有。COM端口有点像TCP—它们是一种流式服务—它们一次只传输7或8位(取决于您如何设置端口,通常为8位) 如果您想发送比字节更复杂的内容,您需要在上面构建一个协议。如果您

请告诉我如何从c#中的com端口读取数据,如果数据以字节形式接收,但长度可变,也就是说,答案可能是字节数组20和50,主要问题是,如何知道设备停止响应?

最重要的部分是定义使用的协议位。您应该同时具有开始位和停止位,它们将告诉SerialPort对象何时停止读取。通常情况下,您不必在意这一点,因为回调函数将在数组中包含数据


你没有。COM端口有点像TCP—它们是一种流式服务—它们一次只传输7或8位(取决于您如何设置端口,通常为8位)

如果您想发送比字节更复杂的内容,您需要在上面构建一个协议。如果您的数据是文本,末尾的CR或null通常可以。如果它的值在整个字节组0-255中,那么您需要一个更复杂的协议来确保正确接收数据单元的帧。Maybee您的要求可以通过一个简单的超时来满足,例如“如果500毫秒内没有收到字符,那么数据单元就结束了”,但是这种超时协议显然性能低下,并且容易出现故障:(

Rgds,
马丁

哦,这是一种老方法。你可以发送一个“中断”——一种非法帧,接收硬件可以识别它并向接收应用程序发送信号。我忘记了它,因为没有人再使用它了。除此之外,它只在RS232链路上工作,因此流不能通过管道传输到其他任何地方,例如TCP连接。目前,我正在尝试组装一个数组的答案,以便您处理它,但由于我不知道设备何时结束响应,但程序一直在尝试读取端口,因此我的问题是如何理解所有端口都已结束数据传输,您可以开始处理数组这取决于专业人员设备的tocol。它可能会发送“结束传输”信号,或有一个超时时间。