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问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
C#串口SerialPort总是收到数据
有时候我只发了一次或者几次后我的串口能一直收到相同的数据,几率还挺大的,读取serialPort.BytesToRead是一直有的,而且是在serialPort.Read完serialPort.BytesToRead清零了之后还是一直能读到的,实际没有发数据的,如果这时候我手动发数据的话这种现象就会停止,但是用串口调试助手也没出现这种情况,请问是为什么怎么解决?谢谢!
c#SerialPort接收数据的问题
有时候我只发了一次或者几次后我的串口能一直收到相同的数据,几率还挺大的,读取serialPort.BytesToRead是一直有的,而且是在serialPort.Read完serialPort.BytesToRead清零了之后还是一直能读到的,实际没有发数据的,如果这时候我手动发数据的话这种现象就会停止,但是用串口调试助手也没出现这种情况,请问是为什么怎么解决?谢谢!
c#SerialPort的数据处理问题
我想对读取串口发来的数据做处理,分别是单次发送来和两次(多次)短时间内发来的数据做不同的处理,怎么实现?谢谢!
c#中serialPort 连续发送3次,如果直接发送3次的话 会出现问题接收不完全或其他错误。
c#中serialPort 每发送一次接收一个返回值,要连续发送3次,如果直接发送3次的话 会出现和接收的冲突,如何解决这种冲突 让他能顺利的收发完成,分成3步操作的话是可以的已经测试了。 发送方式 第一次发送A1 下位机返回 B1 第二次发送A2 下位机返回 6个数据 第三次发A3 下位机返回25个数据 如何让这三次发送不冲突,能顺利完成 ,求大神解答。
C#串口数据读取问题求助
用C#中的一个serialport类读取cc2431传感器通过usb(com口)传来的数据,程序代码如下 void comm_DataReceived(object sender, SerialDataReceivedEventArgs e) { int n = comm.BytesToRead;//先记录下来,避免某种原因,人为的原因,操作几次之间时间长,缓存不一致 byte[] buf = new byte[n];//声明一个临时数组存储当前来的串口数据 received_count += n;//增加接收计数 comm.Read(buf, 0, n);//读取缓冲数据 builder.Clear();//清除字符串构造器的内容 //因为要访问ui资源,所以需要使用invoke方式同步ui。 this.Invoke((EventHandler)(delegate { //判断是否是显示为16禁止 if (checkBoxHexView.Checked) { //依次的拼接出16进制字符串 foreach (byte b in buf) { builder.Append(b.ToString("X2") + " "); } } else { //直接按ASCII规则转换成字符串 builder.Append(Encoding.ASCII.GetString(buf)); } //追加的形式添加到文本框末端,并滚动到最后。 this.txGet.AppendText(builder.ToString()); //修改接收计数 labelGetCount.Text = "Get:" + received_count.ToString(); })); } 会读取到如下数据71 09 FC 08 00 F1,而实际上用配套的串口调试助手得到的一串数据时这样的:04 C0 E0 D8 27 3B 03 23 4D 80 03 B0 02 00 4C 00 40 7F C0 4C 32 32 00 42 24 FF 不知道程序哪里应该改动,才能得到同串口调试助手一样的数据
c# 运用serialport与PLC串口通讯,读取(例如D200)的数据
网上下的 c# 运用serialport与PLC串口通讯程序,小白看不太懂下的程序,求大神帮忙分析下,主要想知道程序中的tebox1、textbox4、textbox5、textbox6、textbox7分别对应图中哪个空,对应的空应填写什么,例如想读取三菱F3X系列PLC D200的数据,初始地址填200?那设备地址和长度填啥? 界面如下:![图片说明](https://img-ask.csdn.net/upload/201806/14/1528961750_92350.png) 主要程序如下: private void btn_open_Click(object sender, EventArgs e) { int nSelect; btn_open.Enabled = false; Object selectedItem = cbxCOMPort.SelectedItem; sp.PortName = selectedItem.ToString();//串口 selectedItem = cbxBaudRate.SelectedItem; sp.BaudRate = int.Parse(selectedItem.ToString());//波特率 nSelect = cbxDataBits.SelectedIndex;//数据位 switch (nSelect) { case 0: sp.DataBits = 8; break; case 1: sp.DataBits = 7; break; case 2: sp.DataBits = 6; break; case 3: sp.DataBits = 5; break; } nSelect = cbxParity.SelectedIndex; switch (nSelect) { case 0: sp.Parity = Parity.None; break; case 1: sp.Parity = Parity.Odd; break; case 2: sp.Parity = Parity.Even; break; case 3: sp.Parity = Parity.Mark; break; case 4: sp.Parity = Parity.Space; break; } nSelect = cbxStopBits.SelectedIndex; switch (nSelect) { case 0: sp.StopBits = StopBits.None; break; case 1: sp.StopBits = StopBits.One; break; case 2: sp.StopBits = StopBits.OnePointFive; break; case 3: sp.StopBits = StopBits.Two; break; } sp.Open(); btn_close.Enabled = true; } private void btn_send_Click(object sender, EventArgs e) { textBox1.Text = ""; int n = 6; byte[] buf = new byte[n]; string ee = textBox4.Text; buf[0] = Convert.ToByte(ee); if (comboBox1.Text == "3X") { buf[1] = Convert.ToByte(3); } else { buf[1] = Convert.ToByte(4); } if (int.Parse(textBox5.Text) <= 255) { buf[2] = Convert.ToByte(0); buf[3] = Convert.ToByte(int.Parse(textBox5.Text)); } else { if (Convert.ToString(int.Parse(textBox5.Text), 16).Length < 4) { int b = Convert.ToInt32(Convert.ToString(int.Parse(textBox5.Text), 16).Substring(0, 1), 16); buf[2] = Convert.ToByte(b); int c = Convert.ToInt32(Convert.ToString(int.Parse(textBox5.Text), 16).Substring(1, 2), 16); buf[3] = Convert.ToByte(c); } else { int b = Convert.ToInt32(Convert.ToString(int.Parse(textBox5.Text), 16).Substring(0, 2), 16); buf[2] = Convert.ToByte(b); int c = Convert.ToInt32(Convert.ToString(int.Parse(textBox5.Text), 16).Substring(2, 2), 16); buf[3] = Convert.ToByte(c); } } if (int.Parse(textBox6.Text) <= 255) { buf[4] = Convert.ToByte(0); buf[5] = Convert.ToByte(int.Parse(textBox6.Text)); } else { if (Convert.ToString(int.Parse(textBox6.Text), 16).Length < 4) { int d = Convert.ToInt32(Convert.ToString(int.Parse(textBox6.Text), 16).Substring(0, 1), 16); buf[4] = Convert.ToByte(d); int f = Convert.ToInt32(Convert.ToString(int.Parse(textBox6.Text), 16).Substring(1, 2), 16); buf[5] = Convert.ToByte(f); } else { int d = Convert.ToInt32(Convert.ToString(int.Parse(textBox6.Text), 16).Substring(0, 2), 16); buf[4] = Convert.ToByte(d); int f = Convert.ToInt32(Convert.ToString(int.Parse(textBox6.Text), 16).Substring(2, 2), 16); buf[5] = Convert.ToByte(f); } } p = int.Parse(textBox6.Text) * 2 + 5; byte[] buf1 = new byte[n + 2]; byte[] ReturnData = new byte[2]; ReturnData = CRC16_C(buf); for (int i = 0; i < n; i++) { buf1[i] = buf[i]; } buf1[n] = ReturnData[1]; buf1[n + 1] = ReturnData[0]; sp.Write(buf1.ToArray(), 0, n + 2); } void sp_DataReceived(object sender, SerialDataReceivedEventArgs e) { int n = sp.BytesToRead; byte[] TxData = new byte[n];//声明一个临时数组存储当前来的串口数据 sp.Read(TxData, 0, n); //读取缓冲数据 m = m + n; this.Invoke((EventHandler) (delegate { Array.Resize(ref TxData2, m);//改写数组大小 TxData.CopyTo(TxData2, m - TxData.Length); if (m == p) { byte[] data = new byte[p - 2]; for (int i = 0; i < TxData2.Length - 2; i++) { data[i] = TxData2[i]; } byte[] data2 = new byte[2]; data2[0] = TxData2[TxData2.Length - 2]; data2[1] = TxData2[TxData2.Length - 1]; byte[] data1 = new byte[2]; data1 = CRC16_C(data); if (data1[0] == data2[1] && data1[1] == data2[0]) { for (int j = 3; j <= m - 4; j = j + 2) { string s1 = TxData2[j].ToString(); string s2 = TxData2[j + 1].ToString(); string s = s1 + s2; int g = Convert.ToInt32(s, 10); string h = g.ToString(); textBox1.Text += h + " "; } textBox7.Text = "读取成功"; } else { textBox7.Text = "读取失败"; } m = 0; } } ) ); } public byte[] CRC16_C(byte[] data) { byte CRC16Lo; byte CRC16Hi; byte CL; byte CH; byte SaveHi; byte SaveLo; byte[] tmpData; int Flag; CRC16Lo = 0xFF; CRC16Hi = 0xFF; CL = 0x01; CH = 0xA0; tmpData = data; for (int i = 0; i < tmpData.Length; i++) { CRC16Lo = (byte)(CRC16Lo ^ tmpData[i]); for (Flag = 0; Flag <= 7; Flag++) { SaveHi = CRC16Hi; SaveLo = CRC16Lo; CRC16Hi = (byte)(CRC16Hi >> 1); CRC16Lo = (byte)(CRC16Lo >> 1); if ((SaveHi & 0x01) == 0x01) { CRC16Lo = (byte)(CRC16Lo | 0x80); } if ((SaveLo & 0x01) == 0x01) { CRC16Hi = (byte)(CRC16Hi ^ CH); CRC16Lo = (byte)(CRC16Lo ^ CL); } } } byte[] ReturnData = new byte[2]; ReturnData[0] = CRC16Hi; ReturnData[1] = CRC16Lo; return ReturnData;
C#多个窗口使用用一个串口接受数据问题
我在主窗口MainForm中设置了Static SerialPort,在主界面注册了一个监听事件,然后在调到子界 之前,我注销了监听事件, serialPort.DataReceived -= new SerialDataReceivedEventHandler(serial_DataReceived); ``` 然后在子界面Calibration中使用了SerialPort,然后重新设置了监听事件: MainForm.serialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceived2); ``` 想实现的方式是:在子窗口关闭之前将监听事件取消,然后在主界面在重新设置监听事件,关闭子窗口后主界面实现的代码 calibrationForm = new Calibration( ); calibrationForm.ShowDialog(); if (calibrationForm.DialogResult == System.Windows.Forms.DialogResult.OK) { serialPort.DataReceived += new SerialDataReceivedEventHandler(serial_DataReceived); } 但是现在的结果是回到主界面后返回的数据仍然在子窗口事件监听器中显示(通过Console打印返回的数据大小) ``` 求大神指点!!! ```
C# SerialPort 串口通信多线程问题
编程新手,想C# SerialPort实现串口通信,写的程序大概这样一个结构。发送一个数据后,要求收到下位机回复,超时发送下一个数据。要加一个发送和接收的线程,是加在主程序里面吗?大体的结构应该是怎么样的?求大神帮助!O(∩_∩)O谢谢! class SendAndReceive { SerialPort sp = new SerialPort(); public void SearchSet()//检测有哪些端口 public void PortSet()//端口设置 public void DataStartSend(byte[] sendbyte) { sp.Open(); //调用crc函数计算crc16的值 sp.Write(sendbyte, 0, sendbyte.Length); } public void DataReceive() { byte[] receivebyte=new byte[8]; sp.Read(receivebyte, 0, receivebyte.Length); //crc校验结果 } }
c#用serialport进行的串口数据接收,遇到了问题,求大神指点
运行后再richtextbox1中只显示一个数,例如:33 随后会报错:对象未引用到对象的实例,点了关闭后又会出现一个数据,例如31,之后又会报错,如此循环,而且数据不太对。 整了好久了,希望能帮帮忙,第一次做这,谢谢!! 代码: namespace yfy_串口调试 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } /****************************设置变量******************************/ public string[] strArray; public SerialPort sp1 = new SerialPort(); public Byte[] mydata; public int mydatalength; //这个数的值是由接收到的字节长度决定的,并且作为mydata的长度,如果索引值还超过数组定义值,就应该是接收问题。 public int zhengfu = 2, now_x = 30; public static Bitmap bmp = new Bitmap(500,350); public Graphics gph = Graphics.FromImage(bmp); public char name_image='A'; /*****************************相关函数****************************/ public void sp1_DataReceived(object sender, SerialDataReceivedEventArgs e)//数据接收函数 { if (sp1.IsOpen==true ) //为了严谨性,加上检查串口是否被打开 { if (rbRcv16.Checked == true) //接收16进制按钮 { try { int average_speed = 0; //设置初始平均速度 Byte[] receivedData = new Byte[sp1.BytesToRead]; //创建接收字节数组 sp1.Read(receivedData, 0, receivedData.Length); //读取数据 sp1.DiscardInBuffer(); //清空SerialPort控件的Buffer mydatalength = receivedData.Length; for (int i = 0; i < receivedData.Length; i++) //窗体显示 { richTextBox1.Text = receivedData[i].ToString("X2"); //16进制显示在接受栏 mydata[i] = receivedData[i]; richTextBox1.Text += ","; //让每个数据都隔开 average_speed += receivedData[i]; } textBox1.Text = (average_speed / receivedData.Length).ToString("X2"); } catch (System.Exception ex) { MessageBox.Show(ex.Message, "出错提示"); } } } else { MessageBox.Show("请打开某个串口或者没有选中16进制接收", "错误提示"); } } private void Form1_Load(object sender, EventArgs e)//页面初始化 { Control.CheckForIllegalCrossThreadCalls = false; //强制不检查线程 sp1.DataReceived += new SerialDataReceivedEventHandler(sp1_DataReceived); //订阅委托 sp1.ReceivedBytesThreshold =1; //当缓冲区的字节数为x时,触发datareceive事件 //检查是否有串口 string[] str = SerialPort.GetPortNames(); if (str == null) { MessageBox.Show("本机没有串口!", "Error!"); return; } //添加串口项目 foreach (string s in System.IO.Ports.SerialPort.GetPortNames()) { cbSerial.Items.Add(s); //获取有COM口 } rbRcv16.Checked = true; //接收数据按16进制进行 } private void btnSwitch_Click(object sender, EventArgs e)//设置串口 { if (sp1.IsOpen == false) { try { string serialName = cbSerial.SelectedItem.ToString();//读取串口号 sp1.PortName = serialName; //设置串口号 sp1.BaudRate = 9600; //波特率 sp1.DataBits = 8; //数据位 sp1.StopBits = StopBits.One; //停止位 sp1.Parity = Parity.None; //校验位 sp1.Open(); //打开串口 btnSwitch.Text = "关闭串口"; } catch (System.Exception ex) { MessageBox.Show("Error:" + ex.Message, "Error"); return; } } else { sp1.Close(); //关闭串口 btnSwitch.Text = "打开串口"; } }
用C#SerialPort控件写的四轴飞行器地面站串口部分出了些问题,希望高人指点!
做了一个四轴飞行器地面站,C#写的,用MPU9150来读取姿态,通过串口来向电脑上传输,解决大小BUG后完美运行,后来STM32开发板上的串口坏了,只能改用无限数传来向地面站传输数据,这时程序读的数据全都是跳跃的,有延时的,屏幕显示的那个四轴模型的动作也是一卡一卡的,完全没法用啊,用网上现有的串口程序结合无限数传试了一下,没有传输数据的卡顿啊,到底为什么呢?是C#的SerialPort和无限数传之间的问题吗?该怎么解决啊!这里先谢谢了!
我winform程序 串口读取数据能否通过serialport.readto(正则表达式)来实现。
C# winform 用串口读取下位机指令,每一条指令有的是以;结尾,有的是以换行“\n”结尾,格式如下 xxxxxx;xxxxxx xxxxxx xxxxxx xxxxxx; 能否通过serialport.readto(正则表达式)来读取到指令? 或有其他好的办法。请赐教。
C# serialPort 串口连接modem通信 64位系统不能通信
C# serialPort 串口连接modem通信,在32位系统是能正常通信,当发布 64位系统不能通信了?请大牛啊!!
c#串口发送数据丢字节serialport
调用serialport.Write(array<Byte>[]()[], Int32, Int32)发送出去的数据没发全,丢了一些字节 ,不知道什么原因,感觉不止我一个人遇到
C#serialPort实现串口通信
我想实现的是上位机发送数据,然后接收数据,然后上位机处理数据,再继续发送数据一直循环到结束。 目前的问题就是,我通过以下代码实现的是在循环调用测试函数,循环运行完了以后,才开始读取数据 ``` public Form1() { InitializeComponent(); serialPort1.DataReceived += serialPort1_DataReceived; } private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e) { this.Invoke(new EventHandler(Read)); } private void Read(object s, EventArgs e) { int n = serialPort1.BytesToRead; byte[] buf = new byte[n]; serialPort1.Read(buf, 0, n); data_catched=true; } public bool test_CA() {//测试CA //定义附加信息 Byte[] test_CA_add = new Byte[1] { 0x00 }; //发送命令帧 Write(test_cmd_CA, test_CA_add);//发送数据函数测试无误,并在发送完后立刻有数据返回 byte test_CA_data; //时延等待接收数据 for (int i = 0; !data_catched && i < 300; i++) { Thread.Sleep(10); } if (!data_catched) { //处理数据 } data_catched=false; } ```
C#中的serialport.Write与MSCOMM控件的put_output有什么区别?
我使用C#上位机中的serialport.write发送数据 下位机收到的与上位机发送的数据不一样, 使用MSCOMM控件发送则没有问题, 求问有什么区别 (T^T)
求教关于C#serialPort串口控件使用后资源释放问题
在使用C#serialPort制作的串口调试器过程中发现的问题,希望能够描述清楚也希望有人能知道为什么会这样, 假设使用C#串口调试助手打开COM1之后再关闭com1之后直接使用com1口为单片机写程序,这样问题就来了, 只是能够正常打开串口但是却永远显示等待单片机响应,只有拔掉USB串口再重插或者使用网上下载的串口调试助手重新打开一次COM1在关闭才可以给单片机写入程序,不知道是什么问题,补充说明下如果不给单片机写程序的话只是使用串口测试收发那一切都正常,无论怎么打开关闭再打开都可以收发数据, 个人水平有限不知道为什么只是感觉上是C#serialPort控件打开再关闭之后没有彻底释放资源还有占用,我能想到的关闭方法只有下面这些了 试过关闭代码如下: serialPort1n.Close(); serialPort1n.Dispose(); GC.Collect(); GC.WaitForPendingFinalizers(); 只是仍然是有问题,实际试了从网上下载的串口调试助手就没有我说的这个问题,下面是我打开串口的代码了: serialPort1n.Open();//打开串口 if (serialPort1n.IsOpen) { }
C# SerialPort的Datareceive事件触发后,BytesToRead的值有时候为零
下位机每隔0.5秒通过串口传25个字节到上位机,串口接收到数据后处理并用zedgraph控件绘制实时曲线图,程序运行几分钟后,Datareceive事件触发后,BytesToRead的值有时候为0,有时是25,也有时是50,界面刷新有时也不是0.5秒。 接收程序: ``` private void serialPort_DataReceived(object sender, SerialDataReceivedEventArgs e) { try { if (mySerialPort.IsOpen) { Thread.Sleep(10); int count = mySerialPort.BytesToRead; byte[] data = new byte[count]; mySerialPort.Read(data, 0, count); if (data[0] == 0x01 && data[1] == 0x03) { this.Invoke(textChanged, data, count); } } } catch (Exception err) { throw err; } } ``` 处理程序: ``` textChanged += new UpdateTextEventHandler(ChangeText); private delegate void UpdateTextEventHandler(byte[] buffer,int m);//定义委托 private event UpdateTextEventHandler textChanged;//定义事件 private void ChangeText(byte[] buffer,int m) //事件处理方法 { s1 = ""; Array.Copy(buffer, 3, float_byte1, 0, 4); Array.Copy(buffer, 8, float_byte2, 0, 4); Array.Copy(buffer, 13, float_byte3, 0, 4); Array.Copy(buffer, 18, float_byte4, 0, 4); temperture[0] = BitConverter.ToSingle(float_byte1, 0); temperture[1] = BitConverter.ToSingle(float_byte2, 0); temperture[2] = BitConverter.ToSingle(float_byte3, 0); temperture[3] = BitConverter.ToSingle(float_byte4, 0); textBox1.Text = temperture[0].ToString(); textBox2.Text = temperture[1].ToString(); textBox3.Text = temperture[2].ToString(); textBox4.Text = temperture[3].ToString(); for (int i = 0; i < m; i++) { s1 += buffer[i].ToString("X2"); s1 += " "; } textBox5.Text = s1.ToString(); if (Curve_Flag == 1) { i++; creatGraph(temperture[j]); } } ``` zedgraph绘图: ``` public void creatGraph(float temp) { double x = (double)i; double y = Convert.ToDouble(temp); list.Add(x, y); myCurve = zedGraphControl1.GraphPane.AddCurve("", list, Color.Red, SymbolType.None); //myCurve.Symbol.Fill = new Fill(Color.Blue);//填充数据点 zedGraphControl1.AxisChange();//画到zedGraphControl1控件中,此句必加 zedGraphControl1.Refresh();//重新刷新 } ```
C# 串口问题 怎样精确地每隔10ms读取串口中的数据
我想每隔10ms读取一次传感器产生的数据,传感器是通过采集器然后输出为串口形式的。我是这样做的:利用线程每隔10ms发送一次读取命令,然后在DataReceived事件中利用serialPort.read()进行读取,同时利用dateTime.Now.Millisceond为每条读取的记录标记时间戳,最后存储在列表中。但发现列表中每条记录的时间间隔不是10ms,有两条记录时间间隔很大的情况出现,同时也有一条记录包含多条返回数据的情况, 请高手们指点,为什么出现这种情况,我想每隔10ms利用串口接收传感器的数据应该怎么写呢?
c# 使用List<SerialPort>的数据接收问题
我用创建串口,方法如下: List<SerialPort> splist=new List<SerialPort>(); SerialPort sp=new SerialPort(); sp.PortName ="COM1"; sp.BaudRate = 4800; sp.DataBits = 8; splist.Add(sp); sp=new SerialPort(); sp.PortName ="COM2"; sp.BaudRate = 4800; sp.DataBits = 8; splist.Add(sp); sp.DataReceived += Sp_DataReceived; private void Sp_DataReceived(object sender, SerialDataReceivedEventArgs e) { //数据接收 } 无法收到串口返回的数据。 请问:如何接收返回的数据?
相见恨晚的超实用网站
搞学习 知乎:www.zhihu.com 简答题:http://www.jiandati.com/ 网易公开课:https://open.163.com/ted/ 网易云课堂:https://study.163.com/ 中国大学MOOC:www.icourse163.org 网易云课堂:study.163.com 哔哩哔哩弹幕网:www.bilibili.com 我要自学网:www.51zxw
花了20分钟,给女朋友们写了一个web版群聊程序
参考博客 [1]https://www.byteslounge.com/tutorials/java-ee-html5-websocket-example
爬虫福利二 之 妹子图网MM批量下载
爬虫福利一:27报网MM批量下载    点击 看了本文,相信大家对爬虫一定会产生强烈的兴趣,激励自己去学习爬虫,在这里提前祝:大家学有所成! 目标网站:妹子图网 环境:Python3.x 相关第三方模块:requests、beautifulsoup4 Re:各位在测试时只需要将代码里的变量 path 指定为你当前系统要保存的路径,使用 python xxx.py 或IDE运行即可。
字节跳动视频编解码面经
引言 本文主要是记录一下面试字节跳动的经历。 三四月份投了字节跳动的实习(图形图像岗位),然后hr打电话过来问了一下会不会opengl,c++,shador,当时只会一点c++,其他两个都不会,也就直接被拒了。 七月初内推了字节跳动的提前批,因为内推没有具体的岗位,hr又打电话问要不要考虑一下图形图像岗,我说实习投过这个岗位不合适,不会opengl和shador,然后hr就说秋招更看重基础。我当时
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 顺便拉下票,我在参加csdn博客之星竞选,欢迎投票支持,每个QQ或者微信每天都可以投5票,扫二维码即可,http://m234140.nofollow.ax.
比特币原理详解
一、什么是比特币 比特币是一种电子货币,是一种基于密码学的货币,在2008年11月1日由中本聪发表比特币白皮书,文中提出了一种去中心化的电子记账系统,我们平时的电子现金是银行来记账,因为银行的背后是国家信用。去中心化电子记账系统是参与者共同记账。比特币可以防止主权危机、信用风险。其好处不多做赘述,这一层面介绍的文章很多,本文主要从更深层的技术原理角度进行介绍。 二、问题引入 假设现有4个人...
Python 基础(一):入门必备知识
目录1 标识符2 关键字3 引号4 编码5 输入输出6 缩进7 多行8 注释9 数据类型10 运算符10.1 常用运算符10.2 运算符优先级 1 标识符 标识符是编程时使用的名字,用于给变量、函数、语句块等命名,Python 中标识符由字母、数字、下划线组成,不能以数字开头,区分大小写。 以下划线开头的标识符有特殊含义,单下划线开头的标识符,如:_xxx ,表示不能直接访问的类属性,需通过类提供
这30个CSS选择器,你必须熟记(上)
关注前端达人,与你共同进步CSS的魅力就是让我们前端工程师像设计师一样进行网页的设计,我们能轻而易举的改变颜色、布局、制作出漂亮的影音效果等等,我们只需要改几行代码,不需...
国产开源API网关项目进入Apache孵化器:APISIX
点击蓝色“程序猿DD”关注我回复“资源”获取独家整理的学习资料!近日,又有一个开源项目加入了这个Java开源界大名鼎鼎的Apache基金会,开始进行孵化器。项目名称:AP...
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
今天闲着无事,就想写点东西。然后听了下歌,就打算写个播放器。 于是乎用h5 audio的加上js简单的播放器完工了。 欢迎 改进 留言。 演示地点跳到演示地点 html代码如下`&lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; &lt;title&gt;music&lt;/title&gt; &lt;meta charset="utf-8"&gt
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。 1. for - else 什么?不是 if 和 else 才
数据库优化 - SQL优化
前面一篇文章从实例的角度进行数据库优化,通过配置一些参数让数据库性能达到最优。但是一些“不好”的SQL也会导致数据库查询变慢,影响业务流程。本文从SQL角度进行数据库优化,提升SQL运行效率。 判断问题SQL 判断SQL是否有问题时可以通过两个表象进行判断: 系统级别表象 CPU消耗严重 IO等待严重 页面响应时间过长
2019年11月中国大陆编程语言排行榜
2019年11月2日,我统计了某招聘网站,获得有效程序员招聘数据9万条。针对招聘信息,提取编程语言关键字,并统计如下: 编程语言比例 rank pl_ percentage 1 java 33.62% 2 c/c++ 16.42% 3 c_sharp 12.82% 4 javascript 12.31% 5 python 7.93% 6 go 7.25% 7
通俗易懂地给女朋友讲:线程池的内部原理
餐厅的约会 餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”我楞了一下,心里想女朋友今天是怎么了,怎么突然问出这么专业的问题,但做为一个专业人士在女朋友面前也不能露怯啊,想了一下便说:“我先给你讲讲我前同事老王的故事吧!” 大龄程序员老王 老王是一个已经北漂十多年的程序员,岁数大了,加班加不动了,升迁也无望,于是拿着手里
经典算法(5)杨辉三角
杨辉三角 是经典算法,这篇博客对它的算法思想进行了讲解,并有完整的代码实现。
编写Spring MVC控制器的14个技巧
本期目录 1.使用@Controller构造型 2.实现控制器接口 3.扩展AbstractController类 4.为处理程序方法指定URL映射 5.为处理程序方法指定HTTP请求方法 6.将请求参数映射到处理程序方法 7.返回模型和视图 8.将对象放入模型 9.处理程序方法中的重定向 10.处理表格提交和表格验证 11.处理文件上传 12.在控制器中自动装配业务类 ...
腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹?
昨天,有网友私信我,说去阿里面试,彻底的被打击到了。问了为什么网上大量使用ThreadLocal的源码都会加上private static?他被难住了,因为他从来都没有考虑过这个问题。无独有偶,今天笔者又发现有网友吐槽了一道腾讯的面试题,我们一起来看看。 腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹? 在互联网职场论坛,一名程序员发帖求助到。二面腾讯,其中一个算法题:64匹
面试官:你连RESTful都不知道我怎么敢要你?
面试官:了解RESTful吗? 我:听说过。 面试官:那什么是RESTful? 我:就是用起来很规范,挺好的 面试官:是RESTful挺好的,还是自我感觉挺好的 我:都挺好的。 面试官:… 把门关上。 我:… 要干嘛?先关上再说。 面试官:我说出去把门关上。 我:what ?,夺门而去 文章目录01 前言02 RESTful的来源03 RESTful6大原则1. C-S架构2. 无状态3.统一的接
求小姐姐抠图竟遭白眼?痛定思痛,我决定用 Python 自力更生!
点击蓝色“Python空间”关注我丫加个“星标”,每天一起快乐的学习大家好,我是 Rocky0429,一个刚恰完午饭,正在用刷网页浪费生命的蒟蒻...一堆堆无聊八卦信息的网页内容慢慢使我的双眼模糊,一个哈欠打出了三斤老泪,就在此时我看到了一张图片:是谁!是谁把我女朋友的照片放出来的!awsl!太好看了叭...等等,那个背景上的一堆鬼画符是什么鬼?!真是看不下去!叔叔婶婶能忍,隔壁老王的三姨妈的四表...
为啥国人偏爱Mybatis,而老外喜欢Hibernate/JPA呢?
关于SQL和ORM的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行了一番讨论,感触还是有一些,于是就有了今天这篇文。 声明:本文不会下关于Mybatis和JPA两个持久层框架哪个更好这样的结论。只是摆事实,讲道理,所以,请各位看官勿喷。 一、事件起因 关于Mybatis和JPA孰优孰劣的问题,争论已经很多年了。一直也没有结论,毕竟每个人的喜好和习惯是大不相同的。我也看
SQL-小白最佳入门sql查询一
不要偷偷的查询我的个人资料,即使你再喜欢我,也不要这样,真的不好;
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // doshom...
致 Python 初学者
欢迎来到“Python进阶”专栏!来到这里的每一位同学,应该大致上学习了很多 Python 的基础知识,正在努力成长的过程中。在此期间,一定遇到了很多的困惑,对未来的学习方向感到迷茫。我非常理解你们所面临的处境。我从2007年开始接触 python 这门编程语言,从2009年开始单一使用 python 应对所有的开发工作,直至今天。回顾自己的学习过程,也曾经遇到过无数的困难,也曾经迷茫过、困惑过。开办这个专栏,正是为了帮助像我当年一样困惑的 Python 初学者走出困境、快速成长。希望我的经验能真正帮到你
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,...
程序员:我终于知道post和get的区别
是一个老生常谈的话题,然而随着不断的学习,对于以前的认识有很多误区,所以还是需要不断地总结的,学而时习之,不亦说乎
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU...
相关热词 c#选择结构应用基本算法 c# 收到udp包后回包 c#oracle 头文件 c# 序列化对象 自定义 c# tcp 心跳 c# ice连接服务端 c# md5 解密 c# 文字导航控件 c#注册dll文件 c#安装.net
立即提问

相似问题

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单片机立刻黑屏,急求