问题描述
我想通过 RS232 从秤数据中读取数据,我尝试了更多方法
我的体重秤型号 yh-t7e datasheet
秤上的重量 = 3.900 公斤
图中 =009.300
波特率 1200
当我使用此代码时
string s = "";
int num8 = 0;
string RST = "";
while (this.serialPort1.BytesToRead > 0)
{
string data = serialPort1.ReadExisting();
if (data != null)
{
if (data.ToString() != "")
{
if (data.Length > 6)
{
RST = data.Substring(6,1) + data.Substring(5,1) + data.Substring(4,1) + data.Substring(3,1) + data.Substring(2,1);
this.textBox4110.Text = RST.ToString();
}
}
}
}
在我的程序中输出
当我在程序中使用上面的代码时 有时显示重量编号,有时不显示。我必须多次打开和关闭程序。 并且通过改变秤上的重量,程序上的数字不变,显示值固定。
当我使用此代码时
while (this.serialPort1.BytesToRead > 0)
{
int data = serialPort1.ReadByte();
this.textBox4110.Text = data.ToString();
}
在我的程序中显示数字 48
我该怎么办?
谢谢
解决方法
我不知道为什么您的串行端口有时响应有时不响应。 我多年前用过 RS232,从来没有遇到过这个问题。
关于其他问题:
- 您正在使用字节数组,无法调用 ToString,因为它会将字节 rappresentation 转换为字符串
- 如果您必须反转咬合顺序 (4 - 3 - 2 - 1),您可以调用 Array.Reverse 方法
只是举个例子说明我的意思,我拿了你的代码:
while (this.serialPort1.BytesToRead > 0)
{
int data = serialPort1.ReadByte();
this.textBox4110.Text = data.ToString();
}
您的“数据”变量包含一个值为 48 的字节,它是 ASCII 表中的 0 个字符。 所以,如果你想要这个字符,你必须使用正确的编码来转换它。 假设您正在使用 UTF8:
while (this.serialPort1.BytesToRead > 0)
{
var dataLen = this.serialPort1.BytesToRead;
var byteArray = new byte[dataLen];
this.serialPort1.Read(byteArray,dataLen);
var txt = Encoding.UTF8.GetString(byteArray);
this.textBox4110.Text = txt;
}
老实说,我知道 Encoding.UTF8.GetString 接受一个字节数组,不确定它是否只适用于单个字节...