对串口也是一无所知,做串口的底层开发。想请教大神,一个串口能发送数据,然后自己接收数据么?我这样写完 用虚拟串口测试 开启两个程序可以互相收发开启一个程序,打开串口,进去发送数据没有反应。订阅事件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("请打开某个串口", "错误提示");
}
}
{
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("请打开某个串口", "错误提示");
}
}
解决方案 »
- 各位路过走光的大侠们,有没有人做过字符模糊匹配算法的,请进来指点一下小弟~~,不胜感激...
- C# 获取远程服务器返回的XML文档(接口是C++编写的组件)
- 控件参数问题?
- 帮小弟我看看这个上传组件
- 请问在WEB下的DATAGRID怎么实现两层页眉啊?
- 如何把一张表离地数据导入到数组,.......
- 100分求 LearnVisualStudio.Net 系列英文视频教学(upto)
- 方法调用问题
- 有没有办法获取从0到250之间的随机整数值?
- 急!答题立结!(Up有分)
- WPF ListView 滚动问题
- AppDomain中跨域委托,在Console程序中可用,在Asp.net中提示调用的目标发生异常
虚拟串口工具一般添加的是一对,比如com2和com4,这个时候,你需要开启两个你的应用程序(Debug/Release目录下的exe)。一个选择com2,另一个选择com4,这样com2里发送的数据,在com4里接收。
如果你想一个串口自己收发,就在上图中选择两个一样的串口比如都是com2,这样代码里也得加如果接收到了数据的时候,再发送一点数据,就能实现自己收自己发。
虚拟串口工具端口右边的“】”符号表示连接关系。
sp1.Read(receivedData, 0, receivedData.Length);
AddContent(new UTF8Encoding().GetString(receivedData));
sp1.WriteLine("send test");//加得试试这样试试
我的其他串口都试过了 不行 难道是版本问题? 我的vspd是7.2
我下了个vspd6.9 就可以了 我先试试 能不能自发自收
能创建两个com3 但是 却打不开了
分开创建com4 com2就可以打开 难道是程序的问题?
其它参考
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();