C# 超级终端和C语言的区别#
我正在用C#开发一个应用程序,从串口捕获信息。我遇到的问题是,应用程序读取的信息与我从超级终端读取的信息不完全相同 我的问题是,有人有这个问题吗?我可以从我的应用程序中检查哪些属性会产生这个问题?。我想将超级终端中的端口配置复制到我的应用程序上 谢谢你的帮助C# 超级终端和C语言的区别#,c#,serial-port,C#,Serial Port,我正在用C#开发一个应用程序,从串口捕获信息。我遇到的问题是,应用程序读取的信息与我从超级终端读取的信息不完全相同 我的问题是,有人有这个问题吗?我可以从我的应用程序中检查哪些属性会产生这个问题?。我想将超级终端中的端口配置复制到我的应用程序上 谢谢你的帮助 void recibir(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) { Thread.Sleep(0250);
void recibir(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
Thread.Sleep(0250);
string crudo = sptSerial.ReadExisting();
if (crudo.Equals("\0\0\0\0\0\0\0\0"))
{
MessageBox.Show("ERROR DE LECTURA","Control Toyota",MessageBoxButtons.OK, MessageBoxIcon.Error);
}
else
{
string binario = "";
string binarioFinal = "";
string binarioProcesado = "";
int numero = 0;
string info = convertAsciiTextToHex(crudo);
binario = hex2binary(info);
binarioProcesado = completarPaquete(binario);
//binarioFinal = binarioProcesado.Substring(10, 16);
if (flagCompletado == 1)
{
binarioFinal = binarioProcesado.Substring(5);
}
else
{
if (binarioProcesado.Length > 20)
{
binarioFinal = binarioProcesado.Substring(5);
}
else
{
binarioFinal = binarioProcesado.Substring(4);
}
}
numero = ToDecimal(binarioFinal);
csTarjeta tarjeta = new csTarjeta();
string x = "";
string y = "";
try
{
tarjeta = csMTRSerial.armarPersona(numero);
}
catch (Exception ex)
{
MessageBox.Show("ERROR COMUNICANDO CON LA BASE DE DATOS\n" + ex.Message);
}
try
{
tarjeta.sUbicacion = csMTRSerial.devolverPosicion();
x = tarjeta.sUbicacion.Substring(11, 10);
x = x.Replace(",", ".");
y = tarjeta.sUbicacion.Substring(0, 10);
y = y.Replace(",", ".");
}
catch (Exception ex)
{
MessageBox.Show("ERROR COMUNICANDO CON EL GPS\n" + ex.Message);
}
if (tarjeta.sValido == 1)
{
lblAviso.Text = "";
lblNombre.Text = "Nombre: " + tarjeta.sNombre;
//lblApellido.Text = "Apellido: " + tarjeta.sApellido;
lblNroTarjeta.Text = "Nro. de Tarjeta: " + tarjeta.sNroTarjeta.ToString();
MemoryStream stream = new MemoryStream(tarjeta.sFoto);
picFoto.Visible = true;
picFoto.Image = Image.FromStream(stream);
stream.Dispose();
stream.Close();
lblAviso.BackColor = Color.Green;
lblAviso.Text = "TARJETA VALIDA";
lblAviso.ForeColor = Color.Black;
}
else
{
lblNombre.Text = "";
lblNroTarjeta.Text = "";
picFoto.Visible = false;
lblAviso.BackColor = Color.Red;
lblAviso.Text = "TARJETA NO VALIDA";
lblAviso.ForeColor = Color.White;
}
csRuta ruta = new csRuta();
ruta.sID = idRuta;
ruta.sNombre = nombreRecorrido;
csMTRSerial.insertarFichada(tarjeta.sNroTarjeta, tarjeta.sNombre, tarjeta.sValido, x, y, nombreRecorrido);
flagCompletado = 0;
}
}
您正在从设备读取一个字符串,然后似乎花费了大量精力将其转换回二进制。这不是很好,您需要根据SerialPort.Encoding属性将字节转换为字符。默认为ASCII,将任何大于0x7f的字节值变成问号
使用SerialPort.Read()方法读取二进制数据。为我们提供一些代码和示例输出,让我们知道我们在处理什么?这是一个处理串口生成的事件的函数:@vissi:AFAIK C#不遵守前导的0作为八进制约定。而且
Sleep
接受毫秒。正是如此,谢谢,我删除了我的评论。谢谢你,汉斯,我现在正在将信息读入字节数组,并将其转换为二进制。现在它更容易、更精确了。
string crudo = sptSerial.ReadExisting();