c#同时打开串口多个串口

C#最简单易懂的串口读写入门程序_百度文库
您的浏览器Javascript被禁用,需开启后体验完整功能,
享专业文档下载特权
&赠共享文档下载特权
&10W篇文档免费专享
&每天抽奖多种福利
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
C#最简单易懂的串口读写入门程序
阅读已结束,下载本文需要
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,同时保存到云知识,更方便管理
加入VIP
还剩1页未读,
定制HR最喜欢的简历
你可能喜欢查看: 5679|回复: 30
自己写的两个简单串口助手 C++(MFC)和C#的
主题帖子精华
高级会员, 积分 660, 距离下一级还需 340 积分
在线时间59 小时
自己写的两个简单串口助手 & 源码开放 由于写的匆忙 有bug 欢迎大家批评指正
05c79db9e23f21f9b1d18d1ea062c12d_612.png (0 Bytes, 下载次数: 366)
22:54 上传
f4ad6d7f4f240056afcba80c4dc.png (0 Bytes, 下载次数: 346)
22:54 上传
22:27 上传
点击文件名下载附件
2.39 MB, 下载次数: 6167
22:27 上传
点击文件名下载附件
149.51 KB, 下载次数: 5668
wearm.xin我的个人博客 欢迎大家前来做客!
主题帖子精华
金钱129739
在线时间1169 小时
不错啊,测试过大量数据传输么?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺:
主题帖子精华
高级会员, 积分 660, 距离下一级还需 340 积分
在线时间59 小时
回复【2楼】正点原子:
---------------------------------&
没呢&等没事的时候我试试
wearm.xin我的个人博客 欢迎大家前来做客!
主题帖子精华
在线时间589 小时
谢谢分享!!
我的博客:http://blog.csdn.net/itdo_just
主题帖子精华
在线时间1159 小时
看着还不错&&顶下
道不同,不相与为谋
主题帖子精华
中级会员, 积分 409, 距离下一级还需 91 积分
在线时间134 小时
。。。。。。。。。
最近爱上了stm32
主题帖子精华
金牌会员, 积分 2033, 距离下一级还需 967 积分
在线时间288 小时
谢谢分享!!
活着才是王道!健康是一切的前提!
头像被屏蔽
主题帖子精华
在线时间23 小时
提示: 作者被禁止或删除 内容自动屏蔽
主题帖子精华
初级会员, 积分 65, 距离下一级还需 135 积分
在线时间8 小时
好资料,顶。。。。。
主题帖子精华
新手入门, 积分 34, 距离下一级还需 -14 积分
在线时间1 小时
主题帖子精华
新手入门, 积分 29, 距离下一级还需 -9 积分
在线时间0 小时
谢谢分享!
主题帖子精华
初级会员, 积分 193, 距离下一级还需 7 积分
在线时间44 小时
谢谢,不错不错&&
逆水行舟不进则退
主题帖子精华
高级会员, 积分 563, 距离下一级还需 437 积分
在线时间131 小时
主题帖子精华
初级会员, 积分 152, 距离下一级还需 48 积分
在线时间15 小时
主题帖子精华
中级会员, 积分 294, 距离下一级还需 206 积分
在线时间37 小时
主题帖子精华
初级会员, 积分 75, 距离下一级还需 125 积分
在线时间35 小时
谢谢分享& &
主题帖子精华
初级会员, 积分 192, 距离下一级还需 8 积分
在线时间62 小时
主题帖子精华
金牌会员, 积分 2357, 距离下一级还需 643 积分
在线时间132 小时
顶 顶 顶,楼主太好了。正需要这些东东。
主题帖子精华
中级会员, 积分 244, 距离下一级还需 256 积分
在线时间22 小时
好资料,顶。。。。。
主题帖子精华
初级会员, 积分 96, 距离下一级还需 104 积分
在线时间22 小时
楼主这个C++的是用什么软件写的?
主题帖子精华
高级会员, 积分 660, 距离下一级还需 340 积分
在线时间59 小时
楼主这个C++的是用什么软件写的?
wearm.xin我的个人博客 欢迎大家前来做客!
主题帖子精华
中级会员, 积分 244, 距离下一级还需 256 积分
在线时间22 小时
谢谢分享!!
主题帖子精华
新手入门, 积分 11, 距离下一级还需 9 积分
在线时间1 小时
谢谢分享! 想请问一下,您测试的时候有乱码吗?为什么我测试的时候是乱码呢?
主题帖子精华
新手入门, 积分 44, 距离下一级还需 -24 积分
在线时间8 小时
不错哦,感谢楼主;啊!
主题帖子精华
新手入门, 积分 9, 距离下一级还需 11 积分
在线时间0 小时
谢谢,不错不错
主题帖子精华
新手入门, 积分 23, 距离下一级还需 -3 积分
在线时间3 小时
主题帖子精华
初级会员, 积分 162, 距离下一级还需 38 积分
在线时间17 小时
流弊的一塌!强!
主题帖子精华
初级会员, 积分 70, 距离下一级还需 130 积分
在线时间11 小时
主题帖子精华
中级会员, 积分 311, 距离下一级还需 189 积分
在线时间43 小时
谢谢楼主分享!正在学着写!
主题帖子精华
中级会员, 积分 264, 距离下一级还需 236 积分
在线时间52 小时
膜拜,楼主,
主题帖子精华
中级会员, 积分 414, 距离下一级还需 86 积分
在线时间47 小时
"原子哥”推荐 /1
资料包括正点原子开发板全套视频,源码,手册等。原子粉丝请关注公众号。
Powered by实现一个串口被多个Form窗体调用的功能
很简单,是我自己摸出来的,不要用c#自带的serialPort控件,自己定义一个静态实例即可。
public static SerialPort serialPort1 = new SerialPort();
然后连接虚拟串口COM3:
private void bt_connectPlc_Click(object sender, EventArgs e)
if (serialPort1.IsOpen)
{ serialPort1.Close(); }
serialPort1.PortName = "COM3";
//serialPort1.PortName = ReadTenCom();//设置串口号,ReadTenCom()是读取串口号的方法,返回的是string类型
serialPort1.ReceivedBytesThreshold = 1;//设置能引发serialport的DataReceived事件所需要的字节个数
serialPort1.BaudRate = 19200;//设置波特率
serialPort1.DataBits = 8;
serialPort1.Parity = System.IO.Ports.Parity.N//设置串口的奇偶校验为无奇偶校验
serialPort1.StopBits = System.IO.Ports.StopBits.O//设置停止位为1
serialPort1.Open();//打开端口
catch (Exception er)
MessageBox.Show("串口打开失败!" + er.Message, "YC1");
output = new byte[1];
private void button1_Click(object sender, EventArgs e)
output[0] = 0x55;
serialPort1.Write(output, 0, 1);//Form1的button1发送0x55字节指令
然后是Form2的按钮button20发送0x44指令:
byte[] output2 = new byte[1];
private void button20_Click(object sender, EventArgs e)
output2[0]=0x44;
Form1.serialPort1.Write(output2, 0, 1);
两个指令接收端都接受到了,如下图:
没有更多推荐了,c# 串口通讯如何多次重复发送一帧数据,并且保证发送和回复每一帧数据的顺序正确
<a data-traceid="question_detail_above_text_l&&
C#串口通讯时,已经实现正确发送数据包,正确得到回复;如何实现若发送失败最多发送5次,并且发送多个数据包时,发送数据和回复数据在界面的显示不串行;我尝试做过,会出现数据串行,或者一帧数据已成功发送、回复还继续发送的情况,如图
我的大概思路如下:
// 每帧数据发送出去后,等待500ms接收返回的数据,若无信息返回,则连续发送5次,5次都失败则终止操作
private void SendData(string[] hexString)
for (int i = 0; i & 6; i++)
if (i & 5)
if (!IsReceived)
WriteTable(hexString[0].Trim(), 2, 16, 0);
System.Threading.Thread.Sleep(500);
//暂停500ms
IsReceived =
MessageBox.Show(&发送错误,无回应数据&);
for (int i = 0; i & 6; i++)
if (i & 5)
if (!IsReceived)
WriteTable(hexString[1].Trim(), 18, 0, 1);
System.Threading.Thread.Sleep(500);
//暂停500ms
IsReceived =
MessageBox.Show(&发送错误,无回应数据&);
private void WriteTable(string hexString, int dataLen, int startAddress, int tableType)
byte[] package = new byte[dataLen];
int k = 0;
package[0] = 0xAA;//帧头
byte[] bytes = Common.StrToToHexByte(hexString);
foreach (byte b in bytes)
package[k++] =
//数据包组码
if (!mycomm.IsOpen)
MessageBox.Show(&串口没有打开,请打开串口!&);
string data = ByteArrayToHexString(package);
textBoxSend.AppendText(&发送&&&:& + data + &\n&);
mycomm.Write(package, 0, package.Length);//向串口发送一包的数据 */
private void ReadTable(object sender, SerialDataReceivedEventArgs e)
string errorInfo = &回复出错&;
int n = mycomm.BytesToR
byte[] buf = new byte[n];
mycomm.Read(buf, 0, n);//读取缓冲数据
//&协议解析&
bool data_1_catched =
//1.缓存数据
buffer.AddRange(buf);
//2.完整性判断
while (buffer.Count &= 4)
//2.1 查找帧头
if (buffer[0] == 0xAA)
data_1_catched =
errorInfo = &帧头错误&;
if (data_1_catched)
//显示回复的数据
this.textBoxSend.AppendText(&&&&回复:& + ByteArrayToHexString(binary_data_1) + &\n\n&);
this.textBoxSend.AppendText(&\n&);
//这个变量表示是否接收到数据,决定是否重复发送数据,要是改行代码放在该if块的第一行,得到的结果不一样,我猜想是因为显示回复的数据时占用了时间,这个如何设置更合理???
IsReceived =
this.textBoxSend.AppendText(&&&&回复:& + errorInfo + &\n\n&);
MessageBox.Show(&接受数据时出错&);
如果能加一位校验位就好了,通过这一校验位就能判断出来返回的数据是否串行了
引用来自“樂”的答案如果能加一位校验位就好了,通过这一校验位就能判断出来返回的数据是否串行了我已经加入校验码了,只是在我给出的代码里没有体现出来
典型的基于流的串行通信& 都可以参考tcp的处理方式.
1. 加包头指明长度, 包头要含包头校验码, 这几乎是稳定收发 必须要做. & 2. 加最简单的校验码& 3. 链接,状态机.
--- 共有 1 条评论 ---
平常直接读串口得到的一个包是: 底层的串口芯片能靠一定时间间隔无数据而帮你截的一个包出来, 但这不可靠,不能作为逻辑分包的依据. 毕竟对方CPU处理发包的速度, 远不是串口这种IO能比的.
TCP作为该类通信的成熟代表, 其设计原理值得参考借鉴.

我要回帖

更多关于 电脑串口怎么打开 的文章

 

随机推荐