C#中串口通信多个窗体操作一个控件

sinat_34493579 2016-05-19 04:23:59
有2个窗体,Form1用来发送串口数据,Form2用来接收串口数据,但是接收不不到。。这是Form2的程序。
private void Form3_Load(object sender, EventArgs e)
{
sp.Open();

sp.ReceivedBytesThreshold = 1;
MessageBox.Show("ss");
sp.DataReceived +=new SerialDataReceivedEventHandler(sp_DataReceived);
MessageBox.Show("jieshouwan");
sp.Close();

}
public void sp_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
MessageBox.Show("kaishishou");
CheckForIllegalCrossThreadCalls = false;
List<byte> bytes = new List<byte>();
int n = sp.BytesToRead;
byte[] buffer=new byte[n];
sp.Read(buffer, 0, n);
// string data=null;
for (int i = 0; i < n; i++)
{
recdata += buffer[i].ToString();
}
MessageBox.Show(recdata);

}
...全文
309 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
sinat_34493579 2016-05-21
  • 打赏
  • 举报
回复
引用 12楼whwnew 的回复:
失去意义的事情不要再干了。 串口通信 是设备与PC的通信接口 或者是PC和PC的通信接口 设计这样的测试程序才有意义 串口指针 2,3 一个是接 一个是发。A电脑的 2插针 对应B电脑的3插针  A电脑的3插针对应B电脑的2插针 这样一个发 一个接就能接受到数据
现在刚刚开适学,用的是虚拟的
sinat_34493579 2016-05-20
  • 打赏
  • 举报
回复
引用 10楼兵工厂三剑客 的回复:
[quote=引用 5 楼 sinat_34493579 的回复:] [quote=引用 4楼我是你的主体 的回复:][quote=引用 3楼兵工厂三剑客 的回复:]明明是Form3用来收的。 如果非要用一个串口在一个程序中完成收和发的功能来模拟串口通信那就真的没什么意义了。 如果你要琢磨串口的收发功能,可以用Virtual SerialPort来生成一对(2个,假如是COM2与COM3)虚拟串口。 那么你就可以通过COM2与COM3来互发(互收)了。这样才有实际意义。
现在不管是Form1还是Form2都接收不到串口数据,这是为何?[/quote]有3个窗体,1打开2,2打开3,2用来发数据,3用来收数据,但目前2和3都收不到,求助[/quote] 你用的是虚拟串口。看你的代码Form3是用来收的,至于是Form1发还是Form2发就不知道了。 采用虚拟串口。发与收使用的只能是非同一个串口,且必须是一对。比如你Form3使用COM2收,Form2使用COM3发,且COM2与COM3必须是一对串口。 看看你的俩个串口是不是一对。 已经说了,不建议在一个程序中同时实现收和发的功能。最好开2个程序,这俩个程序分别使用不同的配对串口,一个发,另一个收。 你的程序没有体现这种思路。[/quote]我com3和com4是一对,form2用com3发,在调试助手中打开com4收,form3在调试助手中打开com4发,在程序中用com3收,收不到
兵工厂三剑客 2016-05-20
  • 打赏
  • 举报
回复
引用 5 楼 sinat_34493579 的回复:
[quote=引用 4楼我是你的主体 的回复:][quote=引用 3楼兵工厂三剑客 的回复:]明明是Form3用来收的。 如果非要用一个串口在一个程序中完成收和发的功能来模拟串口通信那就真的没什么意义了。 如果你要琢磨串口的收发功能,可以用Virtual SerialPort来生成一对(2个,假如是COM2与COM3)虚拟串口。 那么你就可以通过COM2与COM3来互发(互收)了。这样才有实际意义。
现在不管是Form1还是Form2都接收不到串口数据,这是为何?[/quote]有3个窗体,1打开2,2打开3,2用来发数据,3用来收数据,但目前2和3都收不到,求助[/quote] 你用的是虚拟串口。看你的代码Form3是用来收的,至于是Form1发还是Form2发就不知道了。 采用虚拟串口。发与收使用的只能是非同一个串口,且必须是一对。比如你Form3使用COM2收,Form2使用COM3发,且COM2与COM3必须是一对串口。 看看你的俩个串口是不是一对。 已经说了,不建议在一个程序中同时实现收和发的功能。最好开2个程序,这俩个程序分别使用不同的配对串口,一个发,另一个收。 你的程序没有体现这种思路。
whwnew 2016-05-20
  • 打赏
  • 举报
回复
失去意义的事情不要再干了。 串口通信 是设备与PC的通信接口 或者是PC和PC的通信接口 设计这样的测试程序才有意义 串口指针 2,3 一个是接 一个是发。A电脑的 2插针 对应B电脑的3插针  A电脑的3插针对应B电脑的2插针 这样一个发 一个接就能接受到数据
sinat_34493579 2016-05-19
  • 打赏
  • 举报
回复
引用 8楼oysy 的回复:
虚拟串口, 没用过 怎么过虚拟法?
就是虚拟两个com口,互相收发数据,,
飞天凤凰601 2016-05-19
  • 打赏
  • 举报
回复
虚拟串口, 没用过 怎么过虚拟法?
sinat_34493579 2016-05-19
  • 打赏
  • 举报
回复
引用 6楼oysy 的回复:
接收不到数据,可能是对方PLC呀这些问题,你用串口助手试试 PS:合作的同事,PLC用的串口线接错了,搞了一晚上,害我白等。
我现在用的是虚拟串口和调试助手
飞天凤凰601 2016-05-19
  • 打赏
  • 举报
回复
接收不到数据,可能是对方PLC呀这些问题,你用串口助手试试 PS:合作的同事,PLC用的串口线接错了,搞了一晚上,害我白等。
sinat_34493579 2016-05-19
  • 打赏
  • 举报
回复
引用 4楼我是你的主体 的回复:
[quote=引用 3楼兵工厂三剑客 的回复:]明明是Form3用来收的。 如果非要用一个串口在一个程序中完成收和发的功能来模拟串口通信那就真的没什么意义了。 如果你要琢磨串口的收发功能,可以用Virtual SerialPort来生成一对(2个,假如是COM2与COM3)虚拟串口。 那么你就可以通过COM2与COM3来互发(互收)了。这样才有实际意义。
现在不管是Form1还是Form2都接收不到串口数据,这是为何?[/quote]有3个窗体,1打开2,2打开3,2用来发数据,3用来收数据,但目前2和3都收不到,求助
sinat_34493579 2016-05-19
  • 打赏
  • 举报
回复
引用 3楼兵工厂三剑客 的回复:
明明是Form3用来收的。 如果非要用一个串口在一个程序中完成收和发的功能来模拟串口通信那就真的没什么意义了。 如果你要琢磨串口的收发功能,可以用Virtual SerialPort来生成一对(2个,假如是COM2与COM3)虚拟串口。 那么你就可以通过COM2与COM3来互发(互收)了。这样才有实际意义。
现在不管是Form1还是Form2都接收不到串口数据,这是为何?
兵工厂三剑客 2016-05-19
  • 打赏
  • 举报
回复
明明是Form3用来收的。 如果非要用一个串口在一个程序中完成收和发的功能来模拟串口通信那就真的没什么意义了。 如果你要琢磨串口的收发功能,可以用Virtual SerialPort来生成一对(2个,假如是COM2与COM3)虚拟串口。 那么你就可以通过COM2与COM3来互发(互收)了。这样才有实际意义。
sinat_34493579 2016-05-19
  • 打赏
  • 举报
回复
引用 1楼oysy 的回复:
难道你不能在form1接收后,把数据传到form2?
这想法好!我试试,谢谢
飞天凤凰601 2016-05-19
  • 打赏
  • 举报
回复
难道你不能在form1接收后,把数据传到form2?

110,566

社区成员

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

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

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