[英]Serial port c# how to interpret data received
当我在控制台应用程序中使用c#读取串行端口时,这就是我得到的输出。 有谁知道我应该如何读取此数据,以便人类可以读取。
应该接收的数据是:6025 1045 1806 116 0000000和GPS协调。 我知道它有点模糊,但是我是串口编程的新手,想知道如何继续前进。这是我到目前为止的代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO.Ports;
using System.Diagnostics;
using System.Threading;
using System.IO;
namespace ClarityListener
{
class Program
{
static void Main(string[] args)
{
ClarityWarning("Starting communication...");
SerialPort Dave = new SerialPort("COM1");
Dave.BaudRate = 9600;
Dave.Parity = Parity.Odd;
Dave.DataBits = 8;
Dave.StopBits = StopBits.One;
Dave.Handshake = Handshake.None;
Dave.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
try
{
Dave.Open();
ClarityMssg("Connected!\n");
}
catch
{
ClarityError("Problem!\n");
}
ClarityWarning("Press any key to shutdown program");
Console.WriteLine();
Console.ReadKey();
Dave.Close();
}
private static void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
{
SerialPort sp = (SerialPort)sender;
string indata = sp.ReadExisting();
ClarityWarning("Data received : ");
ClarityWarning(indata.ToString() + "\n");
}
private static void ClarityMssg(string message)
{
Console.ForegroundColor = ConsoleColor.Blue;
Console.WriteLine(message);
Console.ForegroundColor = ConsoleColor.White;
}
private static void ClarityError(string message)
{
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine(message);
Console.ForegroundColor = ConsoleColor.White;
}
private static void ClarityWarning(string message)
{
Console.ForegroundColor = ConsoleColor.DarkYellow;
Console.WriteLine(message);
Console.ForegroundColor = ConsoleColor.White;
}
}
}
通过通道接收的数据是字节流,通过tcp / ip或串行或从文件读取。 由于没有涉及高科技的黑魔法,因此对串行端口进行编程没有什么不同/困难。
仅假定接收到的字节是ascii,就将其转储到控制台不是可行的方法。 尽管它可以让您在确定发送内容时处于领先地位。
首先检查在接收串行端口上设置的参数。 大多数设备使用9600波特,无奇偶校验,8、1停止位。 如果存在不匹配,数据将被破坏。 检查设备手册中的规格。
您知道数据以什么格式发送吗? 数字是否在发送之前转换为ascii文字,或者是以4字节的int32格式发送的? 源的流量控制是什么? 消息中或消息之间是否存在控制/命令字节? 简而言之:了解发送者使用的协议。 检查文档,作为最后的选择,致电供应商/分销商。
首先想到的是:
确保已将串行端口读取器的奇偶校验,停止位和波特率配置为匹配发送数据的设备的要求。
还要确保您的串行设备确实正在发送ASCII编码的文本。 (这是NMEA的标准,NMEA是一种主要用于此类设备的协议,但不能保证您的设备遵守100%的标准)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.