C#通过SerialPort读取电子天平数据时第一次操作无法获取数据,必须进行第二次操作才能获取当前数据?

C#通过SerialPort读取电子天平数据时,连接串口成功后,通过发送命令方式第一次操作无法获取数据,无任何数据返回,必须进行第二次操作才能获取当前数据。并且更新电子天平负载后,单击读取数据按钮,通过串口获得的数据为上一次读数,必须再单击一次才能获取更新的数据。一直卡到这里,不知道怎么解决,求大神帮忙看看!暂无积分,抱歉!

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO.Ports;
using System.Text.RegularExpressions;

namespace 读天平
{
public partial class Form1 : Form
{
SerialPort mySerialPort = null;
string receiveing;
string read_data;
int count_read;
int row_no;
int column_no;
DataGridView dgv;
public Form1()
{
InitializeComponent();
}

    private void Form1_Load(object sender, EventArgs e)
    {
        mySerialPort = new SerialPort("COM5", 9600, Parity.None, 8, StopBits.One);
        mySerialPort.Handshake = Handshake.None; // 四种都可以使用
        mySerialPort.Open();
        mySerialPort.DataReceived += new SerialDataReceivedEventHandler(mySerialPort_DataReceivedHandler);
        mySerialPort.DtrEnable = true; // 加上此属性接收事件可被触发
        mySerialPort.ReceivedBytesThreshold = 1;
        if (mySerialPort.IsOpen == true)
        {
            MessageBox.Show("串口打开成功", "提示", MessageBoxButtons.OK);
        }
        else
        {
            MessageBox.Show("串口打开失败", "提示", MessageBoxButtons.OK);
        }
    }

    private void mySerialPort_DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)  // SerialPort.DataReceived事件运行比较特殊,其运行在辅线程,不能与主线程中的显示数据控件直接进行数据传输,必须用间接的方式实现
    {//接收数据
        SerialPort sp = (SerialPort)sender;
        read_data = sp.ReadExisting();
        this.Invoke((EventHandler)(delegate { receiveing = read_data.Trim().TrimStart('+').TrimStart('-').TrimEnd('g').Trim(); }));
        mySerialPort.DiscardInBuffer(); // 清除接收缓存
    }

    private void dataGridView1_CellMouseDoubleClick(object sender, DataGridViewCellMouseEventArgs e)
    {
        byte[] send = { 0x1B, 0x70 };    // 十六进制ASCII码
        mySerialPort.Write(send, 0, send.Length);
        row_no = e.RowIndex;
        column_no = e.ColumnIndex;
        dgv = dataGridView1;
        dgv.Rows[row_no].Cells[column_no].Value = receiveing;
    }

    private void dataGridView2_CellMouseDoubleClick(object sender, DataGridViewCellMouseEventArgs e)
    {
        byte[] send = { 0x1B, 0x70 };    // 十六进制ASCII码
        mySerialPort.Write(send, 0, send.Length);
        row_no = e.RowIndex;
        column_no = e.ColumnIndex;
        dgv = dataGridView2;
        dgv.Rows[row_no].Cells[column_no].Value = receiveing;
    }



}

}

c#

1个回答

用串口调试助手调试下,不清楚你的电子秤本身的通讯协议,厂家给你sdk和例子程序了没有,如果没有,先要他们提供。
然后用串口调试助手对照。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问

相似问题

1
使用RXTXxcomm报错 EXCEPTION_ACCESS_VIOLATION (0xc0000005) C [rxtxSerial.dll+0x5b00]
1
AddRange用不了,是缺少什么引用集吗
0
java GUI获取电子秤数据不完整问题
1
串口和串口轉usb的區別
2
C#如何实现监听com口,但不占用。因为需要嵌入到项目中,需要实现代码,或者SDK源码等。
1
我winform程序 串口读取数据能否通过serialport.readto(正则表达式)来实现。
2
c#想用串口传送文件,并把文件切割以字符串数组显示,但失败了,求助
1
C#,用串口读缓存文件时只读了一小部分,没有读完整。求大佬帮忙。
4
c# winform ,大片机接收缓存有限,串口向单片机发送大量数据时,只会执行前面的内容,后面的数据全部丢失
0
c#写一个上位机程序,用串口助手调试不出结果
3
C#上位机编写时遇到下位机数据传输问题。
0
STM32 串口接收指令无反应。
2
C#新手求问,!=1820的问题。
2
c#如何hook拦截并屏蔽textbox里接收的消息,替换成自己指定的字符串?
0
c# uwp串口通信 SerialDevice.FromIdAsync取得null 加了Package.appxmanifest也没有用
0
python3.7 要从串口读数据保存到文件,运行后发现如发送的数据中文字比较多就会出现乱码或丢数据。
2
C# SerialPort的Datareceive事件触发后,BytesToRead的值有时候为零
0
vue进行串口通信引入serialport包报错
1
求大神告诉萌新 哪里有问题,怎么解决呢。。
1
c#编写的串口助手打开串口32单片机立刻黑屏,急求