串口发送数据接收数据问题。

fantasykakaxi 2018-09-05 04:19:15
对串口也是一无所知,做串口的底层开发。

想请教大神,一个串口能发送数据,然后自己接收数据么?

我这样写完 用虚拟串口测试 开启两个程序可以互相收发

开启一个程序,打开串口,进去发送数据没有反应。订阅事件Sp1_DataReceived不触发。

求大神帮忙

private void Form1_Load(object sender, EventArgs e)
{
if (cbCom.Items.Count > 0)
{
cbCom.SelectedIndex = 0;
sp1.ReceivedBytesThreshold=1;
sp1.BaudRate = 9600;
sp1.DtrEnable = true;
sp1.RtsEnable = true;
sp1.ReadTimeout = 1000;
sp1.ReceivedBytesThreshold = 1;
sp1.DataReceived += new
SerialDataReceivedEventHandler(this.Sp1_DataReceived);
sp1.Open();
}
}
private void Sp1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
if (sp1.IsOpen)
{

DateTime dt = DateTime.Now;
txtReceived.Text += dt.GetDateTimeFormats('f')[0].ToString() +"\r\n";
try
{
Byte[] receivedData = new Byte[sp1.BytesToRead];
sp1.Read(receivedData, 0, receivedData.Length);
AddContent(new UTF8Encoding().GetString(receivedData));
}
catch (System.Exception ex)
{
MessageBox.Show(ex.Message, "出错提示!!!!!");
txtSendStr.Text = "";
}
}
else
{
MessageBox.Show("请打开某个串口", "错误提示");
}
}
...全文
1208 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
vampire琪宝宝 2018-09-10
  • 打赏
  • 举报
回复
最近也在做串口项目,这里有串口接收代码,你可以参考一下,完全可以使用的,已实现串口收发。

this.Invoke(//WPF为单线程,此接收中断线程不能对WPF进行操作,用如下方法才可操作
new Action(
delegate
{
//recCount.Text = (Convert.ToInt32(recCount.Text) + recBuffer.Length).ToString();//接收数据字节数
if (recModeCheck.Checked == true)
{
//string recBuffer16 = new string();
StringBuilder recBuffer16 = new StringBuilder();//定义16进制接收缓存
for (int i = 0; i < recBuffer.Length; i++)
{
recBuffer16.AppendFormat("{0:X2}" , recBuffer[i]);//X2表示十六进制格式(大写),域宽2位,不足的左边填0。
}
// portNum = System.Text.Encoding.Default.GetBytes(recBuffer16.ToString());//将接收recBuffer16中的字符串转换为byte数组
textREC.Text += recBuffer16.ToString();
  • 打赏
  • 举报
回复
直接把TX和RX短接即可,祝你好运
fantasykakaxi 2018-09-06
  • 打赏
  • 举报
回复


这个地方还要配置么
fantasykakaxi 2018-09-06
  • 打赏
  • 举报
回复
引用 3 楼 w1p000 的回复:
不敢当,我也是新手,刚好最近弄了一下这个,这个也不是很明白

你的com2是不被占用了,换其他口试试,我用虚拟串口6.9可以添加一对一样的
sp1.Read(receivedData, 0, receivedData.Length);         
AddContent(new UTF8Encoding().GetString(receivedData));
sp1.WriteLine("send test");//加得试试
这样试试


能创建两个com3 但是 却打不开了
分开创建com4 com2就可以打开 难道是程序的问题?
fantasykakaxi 2018-09-06
  • 打赏
  • 举报
回复
引用 5 楼 w1p000 的回复:
随便找个带console口的交换机,用电脑真实的物理串口连上去,你给交换机下发命令,它就会上送(回显)命令,这样也是一个串口自己发自己收


我下了个vspd6.9 就可以了 我先试试 能不能自发自收
quanzhan 2018-09-06
  • 打赏
  • 举报
回复
随便找个带console口的交换机,用电脑真实的物理串口连上去,你给交换机下发命令,它就会上送(回显)命令,这样也是一个串口自己发自己收

fantasykakaxi 2018-09-06
  • 打赏
  • 举报
回复
引用 3 楼 w1p000 的回复:
不敢当,我也是新手,刚好最近弄了一下这个,这个也不是很明白

你的com2是不被占用了,换其他口试试,我用虚拟串口6.9可以添加一对一样的
sp1.Read(receivedData, 0, receivedData.Length);         
AddContent(new UTF8Encoding().GetString(receivedData));
sp1.WriteLine("send test");//加得试试
这样试试


我的其他串口都试过了 不行 难道是版本问题? 我的vspd是7.2
quanzhan 2018-09-06
  • 打赏
  • 举报
回复
我没有配置,就是默认的Standard
其它参考
quanzhan 2018-09-05
  • 打赏
  • 举报
回复
不敢当,我也是新手,刚好最近弄了一下这个,这个也不是很明白

你的com2是不被占用了,换其他口试试,我用虚拟串口6.9可以添加一对一样的
sp1.Read(receivedData, 0, receivedData.Length);         
AddContent(new UTF8Encoding().GetString(receivedData));
sp1.WriteLine("send test");//加得试试
这样试试

fantasykakaxi 2018-09-05
  • 打赏
  • 举报
回复
引用 1 楼 w1p000 的回复:

虚拟串口工具一般添加的是一对,比如com2和com4,这个时候,你需要开启两个你的应用程序(Debug/Release目录下的exe)。一个选择com2,另一个选择com4,这样com2里发送的数据,在com4里接收。
如果你想一个串口自己收发,就在上图中选择两个一样的串口比如都是com2,这样代码里也得加如果接收到了数据的时候,再发送一点数据,就能实现自己收自己发。
虚拟串口工具端口右边的“】”符号表示连接关系。

谢谢老师指导 刚才按照你说的打开了弹出了错误

代码这边还要怎么修改呢
quanzhan 2018-09-05
  • 打赏
  • 举报
回复

虚拟串口工具一般添加的是一对,比如com2和com4,这个时候,你需要开启两个你的应用程序(Debug/Release目录下的exe)。一个选择com2,另一个选择com4,这样com2里发送的数据,在com4里接收。
如果你想一个串口自己收发,就在上图中选择两个一样的串口比如都是com2,这样代码里也得加如果接收到了数据的时候,再发送一点数据,就能实现自己收自己发。
虚拟串口工具端口右边的“】”符号表示连接关系。
C#串口介绍以及简单串口通信程序设计实现 源代码和串口程序介绍连接:https://www.cnblogs.com/JiYF/p/6618696.html 本站积分太贵,自己变得。。直接到连接地址下载代码 周末,没事干,写个简单的串口通信工具,也算是本周末曾来过,废话不多,直接到主题 串口介绍   串行接口简称串口,也称串行通信接口或串行通讯接口(通常指COM接口),是采用串行通信方式的扩展接口。(至于再详细,自己百度) 串口应用:   工业领域使用较多,比如:数据采集,设备控制等等,好多都是用串口通信来实现!你要是细心的话,你会发现,目前家用国网智能电能表就具备RS485通信总线(串行总线的一种)与RS232可以相互转化(当然一般,非专业的谁也不会闲的蛋疼,趴电表上瞎看,最多也就看看走了多少度电) RS232 DB9介绍: 1.示意图 2.针脚介绍: 载波检测(DCD) 接受数据(RXD) 发出数据(TXD) 数据终端准备好(DTR) 信号地线(SG) 数据准备好(DSR) 请求发送(RTS) 清除发送(CTS) 振铃指示(RI) 3.实物图: 以下是我购买XX公司的一个usb转串口线:这个头就是一个公头,另一端是一个usb口 笨小孩串口工具运行图: 1.开启程序 2.发送一行字符串HelloBenXH,直接将针脚的发送和接收链接起来就可以测试了(针脚2 接受数据(RXD) 和3 发出数据(TXD))直接链接, C#代码实现:采用SerialPort 1.实例化一个SerialPort [csharp] view plain copy 在CODE上查看代码片派生到我的代码片 private SerialPort ComDevice = new SerialPort(); 2.初始化参数绑定接收数据事件 [csharp] view plain copy 在CODE上查看代码片派生到我的代码片 public void init() { btnSend.Enabled = false; cbbComList.Items.AddRange(SerialPort.GetPortNames()); if (cbbComList.Items.Count > 0) { cbbComList.SelectedIndex = 0; } cbbBaudRate.SelectedIndex = 5; cbbDataBits.SelectedIndex = 0; cbbParity.SelectedIndex = 0; cbbStopBits.SelectedIndex = 0; pictureBox1.BackgroundImage = Properties.Resources.red; ComDevice.DataReceived += new SerialDataReceivedEventHandler(Com_DataReceived);//绑定事件 }

111,098

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧