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

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("请打开某个串口", "错误提示");
}
}
...全文
1303 12 打赏 收藏 转发到动态 举报
写回复
用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,这样代码里也得加如果接收到了数据的时候,再发送一点数据,就能实现自己收自己发。
虚拟串口工具端口右边的“】”符号表示连接关系。

111,129

社区成员

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

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

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