C#上位机编写时遇到下位机数据传输问题。

图片说明
然后C#提示是这里有问题:
if (Convert.ToUInt16(serialPort1.ReadLine()) != 1820)
原程序为:
private void button1_Click(object sender, EventArgs e)
{
try
{
if (isopen == false)
{
serialPort1.BaudRate = Convert.ToInt32(comboBox2.Text);
serialPort1.PortName = comboBox1.Text;
serialPort1.Open();
serialPort1.Write("s");
if (Convert.ToUInt16(serialPort1.ReadLine()) != 1820)
{
MessageBox.Show("没找到设备");
return;
}
button1.Text = "停止采集";
单片机下位机调试过已经是可以检测的了,就是上位机的问题,调试了之后问题是:WindowsApplication1.Form1.button1_Click(object sender = {未知}, System.EventArgs e = {未知}) C#这个object sender收不到东西,代码到底哪部分有问题啊??

3个回答

serialPort1.BaudRate = Convert.ToInt32(comboBox2.Text);
调试下这里
comboBox2.Text是不是合法的整数,有没有空格、空白

qq_41946147
qq_41946147 这句话应该没问题,应该是if (Convert.ToUInt16(serialPort1.ReadLine()) != 1820) 这句,麻烦问一下您这个判断!=1820有什么意义吗?
大约一年之前 回复

if (Convert.ToUInt16(serialPort1.ReadLine()) != 1820) 这个判断有问题,目测是serialPort1.ReadLine()输入的内容不是(0 到 9),有空格和其他字符串
第二种原因是输入超出UInt16了大小,也会报错,,,,(MaxValue = 65535; MinValue = 0;)

csdn086
csdn086 就是在出错的地方前面加一句var temp=serialPort1.ReadLine();,然后调试看看temp是什么值
大约一年之前 回复
qq_41946147
qq_41946147 回复csdn086: 这个用变量接收是什么意思?这句要怎么改?
大约一年之前 回复
qq_41946147
qq_41946147 回复csdn086: 嗯,先感谢帮助。
大约一年之前 回复
csdn086
csdn086 C的话我不懂,就不知道了 ,哈哈
大约一年之前 回复
csdn086
csdn086 C#那边的话,出问题的那句可以改成Convert.ToUInt64(serialPort1.ReadLine()) , 如果还有问题的话,就在出错的代码前面,用变量接收serialPort1.ReadLine()
大约一年之前 回复
qq_41946147
qq_41946147 我回去试了下,应该是下位机有问题,下位机发送的数一直是 00 00 00 00 00 00.......不知道是什么原因。
大约一年之前 回复
qq_41946147
qq_41946147 那要怎么改?输入不是从其他的字符改成uint输入吗?
大约一年之前 回复

请问你的编写上位机是与WIFI模块进行TCP协议通信吗呢。是的话能看看嘛。qq1497632755. 邮箱1497632755@qq.com,谢谢了(^~^)

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
C#上位机编程时,怎么特定地读取采集到的数据

![图片说明](https://img-ask.csdn.net/upload/201905/01/1556711896_749700.jpg) 如图所示,第一行数字代表下位机发送的数据,第二行是标注,也就是我想单独读取的数据。 下位机会循环的发送第一行的数据,CH1,CH2,CH3,CH4会随着相关的操作发生变化,现在我想把CH1,CH2,CH3,CH4分别读取为int型,储存到相应的变量中,请问应该如何写代码?上位机是C#写的。初学小白,万分感谢

问个C#上位机数数据接收的问题

目前用C#编写了一个Winform上位机界面,其中用到SerialPort接收数据 具体流程如下: this.BeginInvoke(new EventHandler(delegate//调用控件的invoke方法,由主线程UI执行委托 //这里说一下:Begininvoke为"唤醒",异步执行EventHandler类的delegate委托 { int lenth = serialPort1.BytesToRead;//定义字节数组的长度:每接收一次接收数据读取的字符串长度 if (lenth != 0) { Byte[] BYTE = new Byte[lenth];//建立字节数组对象 serialPort1.Read(BYTE, 0, lenth);//读取接收的字节 builder.Clear();//接收数据时清除之前的残余字符串 foreach (byte str in BYTE) { builder.Append(str.ToString("X2")); } richReceiveText1.AppendText(builder.ToString().Replace(" ", "")); count += lenth; if (richReceiveText1.Text.Substring(0, 2) != "88") { richReceiveText1.Clear(); count = 0; } else { if (richReceiveText1.TextLength == 10) { list1.Add(richReceiveText1.Text); SetDSPReceive(); richReceiveText1.Clear(); } } receiveDataCount.Text = "接收数据:" + count.ToString() + "字节"; } else { ; } })); 这里我是先用richBox接收协议字符串,然后根据报头报位把协议存入到一个List<String>中,然后用SetDSPReceive()方法将list的内容通过协议规定先将字符串转换为十六进制然后再转换成十进制并给窗口的参数值进行赋值。 其中SetDSPReceive()为将接收的十六进制字节转换为界面上的参数的协议(比如 88 03 04 01 07 08,88 08是报头报尾巴,01决定了是什么参数,03,04,07决定了参数值是多少,数据一个100多条) 。 但问题来了:由于公司的控制器的数据发送间隔为10ms。而控制器发送数据时上位机winform会出现卡壳、数据不动的情况。之前用串口调试助手尝试了,单个发送一个协议没有问题,发完一个再手动单个发第二个也完全没有问题,间隔100ms以上连续发送数据也没出现卡壳,我想是不是因为发送的间隔比将接收的数据转换为需求的参数短了导致接收数据不全发生卡壳?? 还有一个问题:本应该接收到的字符串协议是88 03 04 01 07 08,但有时候接收到的协议是00 00 00 0D 88。。。。。,如何过滤掉表头之前的数据呢? 是不是:if (richBox1.Text.Substring(0, 2) != "88") { richBox1.Clear(); count = 0; } ?????????????????

c#winform编写上位机串口接受到数据如何分开使用

首先已经编写完了上位机接收数据的程序也实现了在textbox控件中实时显示但是传上来的数据是一组xy坐标值我想如何可以在两个textbox控件中分别显示xy也就是把一组数据分开。因为后面还要利用xy值作图。目前我只能把xy一组数据放在一个textbox控件中达到实时更新数据或者使用Split、正则表达式对数据进行分割只能显示第一组分割后的数据但无法实时更新数据。![图片说明](https://img-ask.csdn.net/upload/201705/18/1495096956_858492.png) ![图片说明](https://img-ask.csdn.net/upload/201705/18/1495096701_157934.png)![图片说明](https://img-ask.csdn.net/upload/201705/18/1495097241_53003.png)代码如下: private void sp_DataReceived(object sender, SerialDataReceivedEventArgs e) { byte[] ReceivedData = new byte[sp.BytesToRead];//创建接收字节数组 sp.Read(ReceivedData, 0, ReceivedData.Length);//读取所接收到的数据 receivedDatas.AddRange(ReceivedData); textBox3.Text = (Convert.ToInt32(textBox3.Text) + ReceivedData.Length).ToString(); if (checkBox2.Checked) { textBox1.Text = Class1.ByteTo16Str(receivedDatas.ToArray()); } else { textBox1.Text = Encoding.Default.GetString(receivedDatas.ToArray()); //让文本框获取焦点 string a = Encoding.Default.GetString(receivedDatas.ToArray()); **string[] sArray = a.Split(','); //这里是进行分割数据,去掉这部分直接把a赋值给textbox就会实时显示但是在一个框里显示xy一组数据而不是一个数据x或者y textBox15.Text = sArray[0]; textBox16.Text = sArray[1];** this.textBox15.Focus(); //设置光标的位置到文本尾 this.textBox15.Select(this.textBox1.TextLength, 0); //滚动到控件光标处 this.textBox15.ScrollToCaret(); this.textBox1.Focus(); //设置光标的位置到文本尾 this.textBox1.Select(this.textBox1.TextLength, 0); //滚动到控件光标处 this.textBox1.ScrollToCaret(); } // sp.DiscardInBuffer();//丢弃接收缓冲区数据

c#上位机串口程序发送数据出错

![图片说明](https://img-ask.csdn.net/upload/201805/13/1526186560_199315.jpg) 麻烦帮忙看一下,最近在做一个上位机的程序,通过串口把数据发到下位机 8个字串,串口协议rs232,通过pl2303连接,可是发送0x11,下位机接受到的是0x77, 而且第一次发送总是先接到一个0x00,除了图片的方法,网上的很多方法都试过, 可是搞不明白错在哪,下位机程序测试后没问题,也不是波特率的问题,请高人指点 感激不尽。

小白用c#做上位机,求大神指点

请问大神们有没有思路,帮帮忙。用c#做上位机,串口通信,显示电机波型和转速。

什么软件可以模拟下位机通过USB向上位机发送数据

我想测试一下自己用C#写的程序能否正常接收数据,请问用什么软件可以模拟下位机通过USB向上位机发送数据,或者有大神能提供其他方法不?谢谢!

c#上位机与单片机通信,上位机接收不到单片机返回的数据

我遇到的问题是: 1上位机给单片机发送数据,单片机能接收到,但是单片机返回的数据上位机收不到 2我不用单片机,直接把数据线上的TX、RX短接,再用上位机发送数据,这时 上位机显示区就能显示上位机发送的数据; 3我用串口调试助手调试单片机程序,调试助手能正常接收单片机返回的数据; 以上3个问题,很是矛盾,不知道哪里出问题了,请高手帮助一下!

求一款C#编写的y-modem协议文件传输(烧录)上位机源码

本人菜鸟一枚,最近需要写一个小项目,项目要求通过C#编写一款利用Ymodem-g协议传输文件到下位机(isp升级)的上位机。还望大神们不吝指教。

小白用c#做上位机,求指点啊

public void sp1_DataReceived(object sender, SerialDataReceivedEventArgs e)//数据接收函数 { if (sp1.IsOpen) //此处可能没有必要判断是否打开串口,但为了严谨性,我还是加上了 { byte[] byteRead = new byte[sp1.BytesToRead]; //BytesToRead:sp1接收的字符个数 if (rbRcv16.Checked) //'接收16进制按钮' { try { Byte[] receivedData = new Byte[sp1.BytesToRead]; //创建接收字节数组 sp1.Read(receivedData, 0, receivedData.Length); //读取数据 sp1.DiscardInBuffer(); //清空SerialPort控件的Buffer string strRcv = null; for (int i = 0; i < receivedData.Length; i++) //窗体显示 { strRcv = receivedData[i].ToString("X2"); //16进制显示 mydata[i] = receivedData[i]; richTextBox1.Text += strRcv; //显示在16进制数据栏 richTextBox1.Text += ","; //让每个数据都隔开 } } catch (System.Exception ex) { MessageBox.Show(ex.Message, "出错提示"); // txtSend.Text = ""; } } } else { MessageBox.Show("请打开某个串口或者没有选中16进制接收", "错误提示"); } } 请问这个函数就这么摆在form1.cs中有用吗?? 我想要没过一段时间接收到一个来自串口的数据,然后得到数据来绘图,我真的不懂啊,我做到现在,接着该干什么了? ![![图片说明](https://img-ask.csdn.net/upload/201609/28/1475058528_152554.png)图片说明](https://img-ask.csdn.net/upload/201609/28/1475058511_129833.png) 请问是不是还需要线程什么的?我没接触这个多久,只是会用一些控件,但是被要求突然做个上位机,也是蒙逼的,求大神指点!!!

有没有c#写上位机的教程,写上位机应该不需要知道太多吧,

还请大师指点一二,拖动一些工具没什么难点主要是程序新手有些是第一次见,谢谢

c#做上位机串口发送接收问题,求指点!

过程:c# 上位机发送指令,称重显示控制器(XK3190-A9+)会返回数据,收到数据即可。 问题:上位机发送指令无反应。可能是我发送的数据格式不对。 byte[] cmd = new byte[6] { 0x02,0x41,0x44,0x30,0x35,0x03};//1 byte[] tcmd = new byte[6] {2, 65,68,48,53,3};//2 string kk = System.Text.Encoding.ASCII.GetString(cmd);//3 char[] ssh = Encoding.ASCII.GetChars(cmd);//4 string sshstr = new string(ssh);//5 serialPort1.Write(cmd,0,6); //serialPort1.Write(kk); 上面12345我都试了,不好使,串口设置没问题,我用串口调试助手好使,在Hex String下发送 024144303503 ,会有反馈。

用C#编写的上位机,上位机发送的数据单片机接收不到,求大神帮忙

![图片说明](https://img-ask.csdn.net/upload/201704/16/1492320157_739642.png)

C# 用modbus tcp协议,怎么做一个上未将与多个下位机通讯

C# 用modbus tcp协议,怎么做一个上未将与多个下位机通讯,是要建立局域网吗,要怎么建立,连接?求大虾帮帮忙! C#上位机的。。

关于c#做上位机串口接收数据的问题,求大神讲解

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; namespace WindowsFormsApplication1 { public partial class Form1 : Form { string data; SolidBrush bush1 = new SolidBrush(Color.Red); SolidBrush bush2 = new SolidBrush(Color.Green); public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { axMSComm1.PortOpen = false; Close(); } private void Form1_Load(object sender, EventArgs e) { axMSComm1.CommPort = 1; //'设置通信端口号为COM1 axMSComm1.Settings = "9600,e,7,1"; //'设置串口参数 axMSComm1.InputMode = 0;//'接收文本型数据 axMSComm1.PortOpen = true;//'打开通信端口1 axMSComm1.RThreshold = 1; } private void Form1_FormClosing(object sender, FormClosingEventArgs e) { axMSComm1.PortOpen = false; } private void timer1_Tick(object sender, EventArgs e) { //向PLC发送指令:02 30 30 30 38 30 30 34 03 35 46,功能是从PLC的X0~X37读取4个字节数据,反映X0~X37的状态信息。 //向PLC发送指令:02 30 30 30 38 30 30 3 03 35 45,功能是从PLC的X0~X27读取3个字节数据,反映X0~X27的状态信息。 //向PLC发送指令:02 30 30 30 38 30 30 32 03 35 44,功能是从PLC的X0~X17读取2个字节数据,反映X0~X17的状态信息。 //向PLC发送指令:02 30 30 30 38 30 30 31 03 35 43,功能是从PLC的X0~X7读取1个字节数据,反映X0~X7的状态信息。 // byte[] bs = { 2, 48, 48, 48, 56, 48, 48, 52, 3, 53, 70 }; //byte[] bs = { 2, 48, 48, 48, 56, 48, 48, 51, 3, 53, 69 }; byte[] bs = { 2, 48, 48, 48, 56, 48, 48, 50, 3, 53, 68 }; //byte[] bs = { 2, 48, 48, 48, 56, 48,48,49,3,53,67 }; string ss = System.Text.Encoding.ASCII.GetString(bs); axMSComm1.Output = (ss); } private void axMSComm1_OnComm(object sender, EventArgs e) { data = axMSComm1.Input.ToString(); textBox1.Text = data.Substring(1, 1); textBox2.Text = data.Substring(2, 1); textBox3.Text = data.Substring(3, 1); textBox4.Text = data.Substring(4, 1); //textBox5.Text = data.Substring(5, 1); //textBox6.Text = data.Substring(6, 1); // textBox7.Text = data.Substring(7, 1); // textBox8.Text = data.Substring(8, 1); Graphics g1 = this.pictureBox1.CreateGraphics(); Graphics g2 = this.pictureBox2.CreateGraphics(); Graphics g3 = this.pictureBox3.CreateGraphics(); Graphics g4 = this.pictureBox4.CreateGraphics(); Graphics g5 = this.pictureBox5.CreateGraphics(); Graphics g6 = this.pictureBox6.CreateGraphics(); Graphics g7 = this.pictureBox7.CreateGraphics(); Graphics g8 = this.pictureBox8.CreateGraphics(); Graphics g9 = this.pictureBox9.CreateGraphics(); Graphics g10 = this.pictureBox10.CreateGraphics(); Graphics g11 = this.pictureBox11.CreateGraphics(); Graphics g12 = this.pictureBox12.CreateGraphics(); Graphics g13 = this.pictureBox13.CreateGraphics(); Graphics g14 = this.pictureBox14.CreateGraphics(); Graphics g15 = this.pictureBox15.CreateGraphics(); Graphics g16 = this.pictureBox16.CreateGraphics(); //Graphics g17 = this.pictureBox17.CreateGraphics(); //Graphics g18 = this.pictureBox18.CreateGraphics(); //Graphics g19 = this.pictureBox19.CreateGraphics(); //Graphics g20 = this.pictureBox20.CreateGraphics(); //Graphics g21 = this.pictureBox21.CreateGraphics(); //Graphics g22 = this.pictureBox22.CreateGraphics(); //Graphics g23 = this.pictureBox23.CreateGraphics(); //Graphics g24 = this.pictureBox24.CreateGraphics(); int b = int.Parse(data.Substring(1, 1), System.Globalization.NumberStyles.HexNumber);//十六进制转十进制 string aa = Convert.ToString(b, 2);//十进制转二进制 while (aa.Length < 4)//补零 { aa = "0" + aa; } int b2 = int.Parse(data.Substring(2, 1), System.Globalization.NumberStyles.HexNumber); string aa2 = Convert.ToString(b2, 2); while (aa2.Length < 4) { aa2 = "0" + aa2; } if (aa.Substring(0, 1) == "1") g8.FillEllipse(bush1, 0, 0, 20, 20); else g8.FillEllipse(bush2, 0, 0, 20, 20); if (aa.Substring(1, 1) == "1") g7.FillEllipse(bush1, 0, 0, 20, 20); else g7.FillEllipse(bush2, 0, 0, 20, 20); if (aa.Substring(2, 1) == "1") g6.FillEllipse(bush1, 0, 0, 20, 20); else g6.FillEllipse(bush2, 0, 0, 20, 20); if (aa.Substring(3, 1) == "1") g5.FillEllipse(bush1, 0, 0, 20, 20); else g5.FillEllipse(bush2, 0, 0, 20, 20); if (aa2.Substring(0, 1) == "1") g4.FillEllipse(bush1, 0, 0, 20, 20); else g4.FillEllipse(bush2, 0, 0, 20, 20); if (aa2.Substring(1, 1) == "1") g3.FillEllipse(bush1, 0, 0, 20, 20); else g3.FillEllipse(bush2, 0, 0, 20, 20); if (aa2.Substring(2, 1) == "1") g2.FillEllipse(bush1, 0, 0, 20, 20); else g2.FillEllipse(bush2, 0, 0, 20, 20); if (aa2.Substring(3, 1) == "1") g1.FillEllipse(bush1, 0, 0, 20, 20); else g1.FillEllipse(bush2, 0, 0, 20, 20); int b3 = int.Parse(data.Substring(3, 1), System.Globalization.NumberStyles.HexNumber);//十六进制转十进制 string aa3 = Convert.ToString(b3, 2);//十进制转二进制 while (aa3.Length < 4)//补零 { aa3 = "0" + aa3; } int b4 = int.Parse(data.Substring(4, 1), System.Globalization.NumberStyles.HexNumber); string aa4 = Convert.ToString(b4, 2); while (aa4.Length < 4) { aa4 = "0" + aa4; } if (aa3.Substring(0, 1) == "1") g16.FillEllipse(bush1, 0, 0, 20, 20); else g16.FillEllipse(bush2, 0, 0, 20, 20); if (aa3.Substring(1, 1) == "1") g15.FillEllipse(bush1, 0, 0, 20, 20); else g15.FillEllipse(bush2, 0, 0, 20, 20); if (aa3.Substring(2, 1) == "1") g14.FillEllipse(bush1, 0, 0, 20, 20); else g14.FillEllipse(bush2, 0, 0, 20, 20); if (aa3.Substring(3, 1) == "1") g13.FillEllipse(bush1, 0, 0, 20, 20); else g13.FillEllipse(bush2, 0, 0, 20, 20); if (aa4.Substring(0, 1) == "1") g12.FillEllipse(bush1, 0, 0, 20, 20); else g12.FillEllipse(bush2, 0, 0, 20, 20); if (aa4.Substring(1, 1) == "1") g11.FillEllipse(bush1, 0, 0, 20, 20); else g11.FillEllipse(bush2, 0, 0, 20, 20); if (aa4.Substring(2, 1) == "1") g10.FillEllipse(bush1, 0, 0, 20, 20); else g10.FillEllipse(bush2, 0, 0, 20, 20); if (aa4.Substring(3, 1) == "1") g9.FillEllipse(bush1, 0, 0, 20, 20); else g9.FillEllipse(bush2, 0, 0, 20, 20); //int b5 = int.Parse(data.Substring(5, 1), System.Globalization.NumberStyles.HexNumber);//十六进制转十进制 //string aa5 = Convert.ToString(b5, 2);//十进制转二进制 //while (aa5.Length < 4)//补零 //{ // aa5 = "0" + aa5; //} //int b6 = int.Parse(data.Substring(6, 1), System.Globalization.NumberStyles.HexNumber); //string aa6 = Convert.ToString(b6, 2); //while (aa6.Length < 4) //{ // aa6 = "0" + aa; //} //if (aa5.Substring(0, 1) == "1") // g24.FillEllipse(bush1, 0, 0, 20, 20); //else // g24.FillEllipse(bush2, 0, 0, 20, 20); //if (aa5.Substring(1, 1) == "1") // g23.FillEllipse(bush1, 0, 0, 20, 20); //else // g23.FillEllipse(bush2, 0, 0, 20, 20); //if (aa5.Substring(2, 1) == "1") // g22.FillEllipse(bush1, 0, 0, 20, 20); //else // g22.FillEllipse(bush2, 0, 0, 20, 20); //if (aa5.Substring(3, 1) == "1") // g21.FillEllipse(bush1, 0, 0, 20, 20); //else // g21.FillEllipse(bush2, 0, 0, 20, 20); //if (aa6.Substring(0, 1) == "1") // g20.FillEllipse(bush1, 0, 0, 20, 20); //else // g20.FillEllipse(bush2, 0, 0, 20, 20); //if (aa6.Substring(1, 1) == "1") // g19.FillEllipse(bush1, 0, 0, 20, 20); //else // g19.FillEllipse(bush2, 0, 0, 20, 20); //if (aa6.Substring(2, 1) == "1") // g18.FillEllipse(bush1, 0, 0, 20, 20); //else // g18.FillEllipse(bush2, 0, 0, 20, 20); //if (aa6.Substring(3, 1) == "1") // g17.FillEllipse(bush1, 0, 0, 20, 20); //else // g17.FillEllipse(bush2, 0, 0, 20, 20); } } }[![图片说明](https://img-ask.csdn.net/upload/201703/20/1489995695_709935.png)图片说明](https://img-ask.csdn.net/upload/201703/20/1489995677_523469.png)

c#winform编写上位机中实现动态坐标

在串口接收到一组一组的横纵坐标值,想把每一组横纵坐标分开使用,在两个textbox控件中分别显示横纵坐标。但是发现并没有实时更新都是只是串口接收到的第一组数据![图片说明](https://img-ask.csdn.net/upload/201705/19/1495178468_90227.png)![图片说明](https://img-ask.csdn.net/upload/201705/19/1495178421_276445.png) 程序如下: private void sp_DataReceived(object sender, SerialDataReceivedEventArgs e) { byte[] ReceivedData = new byte[sp.BytesToRead];//创建接收字节数组 sp.Read(ReceivedData, 0, ReceivedData.Length);//读取所接收到的数据 receivedDatas.AddRange(ReceivedData); textBox3.Text = (Convert.ToInt32(textBox3.Text) + ReceivedData.Length).ToString(); if (checkBox2.Checked) { textBox1.Text = Class1.ByteTo16Str(receivedDatas.ToArray()); } else { textBox1.Text = Encoding.Default.GetString(receivedDatas.ToArray()); //让文本框获取焦点 string a = Encoding.Default.GetString(receivedDatas.ToArray()); string[] sArray = a.Split(','); // textBox15.Text = a; textBox15.Text = textBox15.Text +"\n"+sArray[0]; textBox16.Text = textBox16.Text + "\n" + sArray[1]; ![图片说明](https://img-ask.csdn.net/upload/201705/19/1495177633_459101.png) this.textBox15.Focus(); //设置光标的位置到文本尾 this.textBox15.Select(this.textBox1.TextLength, 0); //滚动到控件光标处 this.textBox15.ScrollToCaret(); this.textBox16.Focus(); //设置光标的位置到文本尾 this.textBox16.Select(this.textBox1.TextLength, 0); //滚动到控件光标处 this.textBox16.ScrollToCaret(); this.textBox1.Focus(); //设置光标的位置到文本尾 this.textBox1.Select(this.textBox1.TextLength, 0); //滚动到控件光标处 this.textBox1.ScrollToCaret(); } 是需要timer控件还是怎么样可以实现呢?

控制器给C#上位机窗口程序发送数据的字节接收问题

现在的问题是:设置断点后,发现接收的字节长度不稳定,最少是4个,最多会达到上千个。 代码原先是这么写的: int lenth = serialPort1.BytesToRead; if (lenth != 0) { Byte[] receiveByte = new Byte[length]; serialPort1.Read(receiveByte, 0, length) ……………………………………………………… …………接收的字节转换流程……………… ……………………………………………………… } 我想问一下:如果要是固定的每次接收5个字节(包括了报头),是不是需要把receiveByte的字节长度和串口控件的Read方法的第三个参数改成5就行了? 现在控制器被人借走暂时无法尝试,如果有其他方法欢迎推荐

使用udp给下位机发送命令

sendto返回值为发送的字节数 但是下位机并没有收到 而且用Wireshark抓包工具也没有捕捉到![图片说明](https://img-ask.csdn.net/upload/201704/26/1493193537_252496.png)

C# 如何使用socket实现基于TCP协议传输数据

我使用Socket.Send和Socket.BeginReceive完成了上位机通讯软件的编写,但是连接下位机经过分析抓包软件得到的数据包,发现似乎与标准TCP协议有出入。具体来讲是这样的: 首先根据TCP协议,数据交换的规范应该是这样的 http://blog.csdn.net/moonhnney/article/details/5604677 > 数据交换: a ----》b a 发送数据完毕,(PSH,ACK) aseq = x,ack=y,datalen = z b 接受到以后发送(ACK) bseq = aack, back = aseq + alen, datalen=blen b 发送数据完毕 (PSH,ACK)bseq = bseq + blen,back = back,datalen = blen a 确认接受 (ACK) aseq = back ,aack = bseq + blen 注:PSH标志指示接收端应尽快将数据提交给应用层。从我协议分析的经历来看,在数据传输阶段,几乎所有数据包的发送都置了PSH位;而ACK标志位在数据传输阶段也是一直是置位的 > 在数据传输阶段,按照常理应用层数据的传输是这样的:(我们假定建立连接阶段Client端最后的确认包中序列号 = 55555, 确认号 = 22222) > Client --> 置PSH标志,置ACK标志 序列号 = 55555, 确认号 = 22222,数据包长度 = 11 ---> Server > Client <-- 置ACK标志,序列号 = 22222, 确认号 = 55566 (=55555 + 11),数据包长度 = 0 <--- Server > Client <-- 置PSH标志,置ACK标志 序列号 = 22223, 确认号 = 55566,数据包长度 = 22 <--- Server > Client --> 置ACK标志,序列号 = 55566, 确认号 = 22244(=22222+22),数据包长度 = 0 ---> Server 而用C#编写出来的数据包却是是这样的 ![图片说明](https://img-ask.csdn.net/upload/201507/23/1437613918_889215.jpg) 对比一下,C#写出来的没有这个 “接受到以后发送(ACK) bseq = aack, back = aseq + alen, datalen=blen” 在Socket.Send中,你只能写数据包的内容数据,不能自定义TCP包头。 那么在C#中用什么函数可以发送一帧TCP ACK呢?

c#串口通信中上位机测试数据组帧

测试 发送数据的参数,设置温度频率时延输出功率,,这些数据组成一帧并且发送,然后接收,,,

在中国程序员是青春饭吗?

今年,我也32了 ,为了不给大家误导,咨询了猎头、圈内好友,以及年过35岁的几位老程序员……舍了老脸去揭人家伤疤……希望能给大家以帮助,记得帮我点赞哦。 目录: 你以为的人生 一次又一次的伤害 猎头界的真相 如何应对互联网行业的「中年危机」 一、你以为的人生 刚入行时,拿着傲人的工资,想着好好干,以为我们的人生是这样的: 等真到了那一天,你会发现,你的人生很可能是这样的: ...

程序员请照顾好自己,周末病魔差点一套带走我。

程序员在一个周末的时间,得了重病,差点当场去世,还好及时挽救回来了。

和黑客斗争的 6 天!

互联网公司工作,很难避免不和黑客们打交道,我呆过的两家互联网公司,几乎每月每天每分钟都有黑客在公司网站上扫描。有的是寻找 Sql 注入的缺口,有的是寻找线上服务器可能存在的漏洞,大部分都...

搜狗输入法也在挑战国人的智商!

故事总是一个接着一个到来...上周写完《鲁大师已经彻底沦为一款垃圾流氓软件!》这篇文章之后,鲁大师的市场工作人员就找到了我,希望把这篇文章删除掉。经过一番沟通我先把这篇文章从公号中删除了...

总结了 150 余个神奇网站,你不来瞅瞅吗?

原博客再更新,可能就没了,之后将持续更新本篇博客。

副业收入是我做程序媛的3倍,工作外的B面人生是怎样的?

提到“程序员”,多数人脑海里首先想到的大约是:为人木讷、薪水超高、工作枯燥…… 然而,当离开工作岗位,撕去层层标签,脱下“程序员”这身外套,有的人生动又有趣,马上展现出了完全不同的A/B面人生! 不论是简单的爱好,还是正经的副业,他们都干得同样出色。偶尔,还能和程序员的特质结合,产生奇妙的“化学反应”。 @Charlotte:平日素颜示人,周末美妆博主 大家都以为程序媛也个个不修边幅,但我们也许...

MySQL数据库面试题(2020最新版)

文章目录数据库基础知识为什么要使用数据库什么是SQL?什么是MySQL?数据库三大范式是什么mysql有关权限的表都有哪几个MySQL的binlog有有几种录入格式?分别有什么区别?数据类型mysql有哪些数据类型引擎MySQL存储引擎MyISAM与InnoDB区别MyISAM索引与InnoDB索引的区别?InnoDB引擎的4大特性存储引擎选择索引什么是索引?索引有哪些优缺点?索引使用场景(重点)...

如果你是老板,你会不会踢了这样的员工?

有个好朋友ZS,是技术总监,昨天问我:“有一个老下属,跟了我很多年,做事勤勤恳恳,主动性也很好。但随着公司的发展,他的进步速度,跟不上团队的步伐了,有点...

我入职阿里后,才知道原来简历这么写

私下里,有不少读者问我:“二哥,如何才能写出一份专业的技术简历呢?我总感觉自己写的简历太烂了,所以投了无数份,都石沉大海了。”说实话,我自己好多年没有写过简历了,但我认识的一个同行,他在阿里,给我说了一些他当年写简历的方法论,我感觉太牛逼了,实在是忍不住,就分享了出来,希望能够帮助到你。 01、简历的本质 作为简历的撰写者,你必须要搞清楚一点,简历的本质是什么,它就是为了来销售你的价值主张的。往深...

优雅的替换if-else语句

场景 日常开发,if-else语句写的不少吧??当逻辑分支非常多的时候,if-else套了一层又一层,虽然业务功能倒是实现了,但是看起来是真的很不优雅,尤其是对于我这种有强迫症的程序"猿",看到这么多if-else,脑袋瓜子就嗡嗡的,总想着解锁新姿势:干掉过多的if-else!!!本文将介绍三板斧手段: 优先判断条件,条件不满足的,逻辑及时中断返回; 采用策略模式+工厂模式; 结合注解,锦...

离职半年了,老东家又发 offer,回不回?

有小伙伴问松哥这个问题,他在上海某公司,在离职了几个月后,前公司的领导联系到他,希望他能够返聘回去,他很纠结要不要回去? 俗话说好马不吃回头草,但是这个小伙伴既然感到纠结了,我觉得至少说明了两个问题:1.曾经的公司还不错;2.现在的日子也不是很如意。否则应该就不会纠结了。 老实说,松哥之前也有过类似的经历,今天就来和小伙伴们聊聊回头草到底吃不吃。 首先一个基本观点,就是离职了也没必要和老东家弄的苦...

2020阿里全球数学大赛:3万名高手、4道题、2天2夜未交卷

阿里巴巴全球数学竞赛( Alibaba Global Mathematics Competition)由马云发起,由中国科学技术协会、阿里巴巴基金会、阿里巴巴达摩院共同举办。大赛不设报名门槛,全世界爱好数学的人都可参与,不论是否出身数学专业、是否投身数学研究。 2020年阿里巴巴达摩院邀请北京大学、剑桥大学、浙江大学等高校的顶尖数学教师组建了出题组。中科院院士、美国艺术与科学院院士、北京国际数学...

男生更看重女生的身材脸蛋,还是思想?

往往,我们看不进去大段大段的逻辑。深刻的哲理,往往短而精悍,一阵见血。问:产品经理挺漂亮的,有点心动,但不知道合不合得来。男生更看重女生的身材脸蛋,还是...

程序员为什么千万不要瞎努力?

本文作者用对比非常鲜明的两个开发团队的故事,讲解了敏捷开发之道 —— 如果你的团队缺乏统一标准的环境,那么即使勤劳努力,不仅会极其耗时而且成果甚微,使用...

为什么程序员做外包会被瞧不起?

二哥,有个事想询问下您的意见,您觉得应届生值得去外包吗?公司虽然挺大的,中xx,但待遇感觉挺低,马上要报到,挺纠结的。

当HR压你价,说你只值7K,你该怎么回答?

当HR压你价,说你只值7K时,你可以流畅地回答,记住,是流畅,不能犹豫。 礼貌地说:“7K是吗?了解了。嗯~其实我对贵司的面试官印象很好。只不过,现在我的手头上已经有一份11K的offer。来面试,主要也是自己对贵司挺有兴趣的,所以过来看看……”(未完) 这段话主要是陪HR互诈的同时,从公司兴趣,公司职员印象上,都给予对方正面的肯定,既能提升HR的好感度,又能让谈判气氛融洽,为后面的发挥留足空间。...

面试:第十六章:Java中级开发(16k)

HashMap底层实现原理,红黑树,B+树,B树的结构原理 Spring的AOP和IOC是什么?它们常见的使用场景有哪些?Spring事务,事务的属性,传播行为,数据库隔离级别 Spring和SpringMVC,MyBatis以及SpringBoot的注解分别有哪些?SpringMVC的工作原理,SpringBoot框架的优点,MyBatis框架的优点 SpringCould组件有哪些,他们...

面试阿里p7,被按在地上摩擦,鬼知道我经历了什么?

面试阿里p7被问到的问题(当时我只知道第一个):@Conditional是做什么的?@Conditional多个条件是什么逻辑关系?条件判断在什么时候执...

面试了一个 31 岁程序员,让我有所触动,30岁以上的程序员该何去何从?

最近面试了一个31岁8年经验的程序猿,让我有点感慨,大龄程序猿该何去何从。

大三实习生,字节跳动面经分享,已拿Offer

说实话,自己的算法,我一个不会,太难了吧

程序员垃圾简历长什么样?

已经连续五年参加大厂校招、社招的技术面试工作,简历看的不下于万份 这篇文章会用实例告诉你,什么是差的程序员简历! 疫情快要结束了,各个公司也都开始春招了,作为即将红遍大江南北的新晋UP主,那当然要为小伙伴们做点事(手动狗头)。 就在公众号里公开征简历,义务帮大家看,并一一点评。《启舰:春招在即,义务帮大家看看简历吧》 一石激起千层浪,三天收到两百多封简历。 花光了两个星期的所有空闲时...

《Oracle Java SE编程自学与面试指南》最佳学习路线图2020年最新版(进大厂必备)

正确选择比瞎努力更重要!

《Oracle Java SE编程自学与面试指南》最佳学习路线图(2020最新版)

正确选择比瞎努力更重要!

都前后端分离了,咱就别做页面跳转了!统统 JSON 交互

文章目录1. 无状态登录1.1 什么是有状态1.2 什么是无状态1.3 如何实现无状态1.4 各自优缺点2. 登录交互2.1 前后端分离的数据交互2.2 登录成功2.3 登录失败3. 未认证处理方案4. 注销登录 这是本系列的第四篇,有小伙伴找不到之前文章,松哥给大家列一个索引出来: 挖一个大坑,Spring Security 开搞! 松哥手把手带你入门 Spring Security,别再问密...

字节跳动面试官竟然问了我JDBC?

轻松等回家通知

面试官:你连SSO都不懂,就别来面试了

大厂竟然要考我SSO,卧槽。

阿里面试官让我用Zk(Zookeeper)实现分布式锁

他可能没想到,我当场手写出来了

终于,月薪过5万了!

来看几个问题想不想月薪超过5万?想不想进入公司架构组?想不想成为项目组的负责人?想不想成为spring的高手,超越99%的对手?那么本文内容是你必须要掌握的。本文主要详解bean的生命...

自从喜欢上了B站这12个UP主,我越来越觉得自己是个废柴了!

不怕告诉你,我自从喜欢上了这12个UP主,哔哩哔哩成为了我手机上最耗电的软件,几乎每天都会看,可是吧,看的越多,我就越觉得自己是个废柴,唉,老天不公啊,不信你看看…… 间接性踌躇满志,持续性混吃等死,都是因为你们……但是,自己的学习力在慢慢变强,这是不容忽视的,推荐给你们! 都说B站是个宝,可是有人不会挖啊,没事,今天咱挖好的送你一箩筐,首先啊,我在B站上最喜欢看这个家伙的视频了,为啥 ,咱撇...

代码注释如此沙雕,会玩还是你们程序员!

某站后端代码被“开源”,同时刷遍全网的,还有代码里的那些神注释。 我们这才知道,原来程序员个个都是段子手;这么多年来,我们也走过了他们的无数套路… 首先,产品经理,是永远永远吐槽不完的!网友的评论也非常扎心,说看这些代码就像在阅读程序员的日记,每一页都写满了对产品经理的恨。 然后,也要发出直击灵魂的质问:你是尊贵的付费大会员吗? 这不禁让人想起之前某音乐app的穷逼Vip,果然,穷逼在哪里都是...

立即提问
相关内容推荐