110,539
社区成员
发帖
与我相关
我的任务
分享
下位机发送的命令
5A A5 05 82 10 01 00 09
5A A5 为包头
10 01 为地址位
00 09 为数据位
这是在触发事件里的代码
private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
SerialPort serialPort1 = sender as SerialPort;
byte[] shuju = new byte[serialPort1.ReadBufferSize];
serialPort1.Read(shuju, 0, shuju.Length);
if (shuju[0] == 0x5A && shuju[1] == 0xA5)
{
if (shuju[5] == 0x01)
{
{
label8.Text = ((double)(shuju[6] * 256 + shuju[7]) / 10).ToString("f1");
}
}
}}
这样的话在控件的显示里会一直跳0.0 , 显示的数据很不稳定 , 现在是测试数据位的00 09 是不会变的. 是什么原因导致的? 求解
SerialPort sp = sender as SerialPort;
string serialReadString = sp.ReadExisting();
label8.Invoke(
new MethodInvoker
(
delegate
{
this.label8.Text=serialReadString;
}
)
);
[/quote]
我的ReceiveBytesThreshold属性是设置的1 只要接收到一个字节就触发了 我把数据的处理放到了新线程里
SerialPort serialPort1 = sender as SerialPort;
string serialll = serialPort1.ReadExisting();
byte[] shuju = new byte[serialPort1.ReadBufferSize];
serialPort1.Read(shuju, 0, shuju.Length);
if (shuju[0] == 0x5A && shuju[1] == 0xA5)
{
if (shuju[4] == 0x10 && shuju[5] == 0x01)
{
{
string pp = ((double)(shuju[6] * 256 + shuju[7]) / 10).ToString("f1");
label8.Invoke(new MethodInvoker(delegate
{
label8.Text = pp;
}
));
}
}}
这样貌似不行 哪里错了
SerialPort sp = sender as SerialPort;
string serialReadString = sp.ReadExisting();
label8.Invoke(
new MethodInvoker
(
delegate
{
this.label8.Text=serialReadString;
}
)
);
[/quote]
可是我的数据包接受过来是需要处理之后再显示的 我应该把处理放在哪呢 是一定要建立一个数组的 要不我没法提取数组里的数进行运算
private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
SerialPort serialPort1 = sender as SerialPort;
byte[] shuju = new byte[serialPort1.ReadBufferSize];
serialPort1.Read(shuju, 0, shuju.Length);
if (shuju[0] == 0x5A && shuju[1] == 0xA5)
{
if (shuju[4] == 0x10 && shuju[5] == 0x01)
{
{
label8.Invoke(new MethodInvoker(delegate
{
label8.Text = ((double)(shuju[6] * 256 + shuju[7]) / 10).ToString("f1"); ;
}
));
}
}
}
}
我这样在别的线程启用 可以么
SerialPort sp = sender as SerialPort;
string serialReadString = sp.ReadExisting();
label8.Invoke(
new MethodInvoker
(
delegate
{
this.label8.Text=serialReadString;
}
)
);