通信人家园

标题: 远程通信学习  [查看完整版帖子] [打印本页]

时间:  2020-5-13 14:40
作者: bbt995     标题: 远程通信学习

1)PLC与计算机串口通信http://topic.csdn.net/u/20080822/14/96b46e49-1820-43b6-aa3a-4045b4d23115.html
1.添加using Sysytem.IO.Ports或者直接往界面里面放入一个serialport控件
2.public  SerialPort serialPort1=new SerialPort ();实例化对象(如果是放控件的方式就不用了)
  private string b;//用来显示接收到的数据
3.serialPort1.DataReceived += new SerialDataReceivedEventHandler(serialPort1_DataReceived);//定义串口接收事件*/
4.private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
        {
          if (serialPort1.BytesToRead == 0)
            {
                return;
            }
            char[] buffer = new char[serialPort1.BytesToRead];
            serialPort1.Read(buffer, 0, serialPort1.BytesToRead);
            b = new string(buffer); //借用楼上
          this.Invoke(SerialDelegate);//委托机制显示接收到的数据
        }
5.打开串口try
            {
                if (serialPort1.IsOpen == false)
                {
                    serialPort1.Open();
                }
                else
                {
                    serialPort1.Close();
                    serialPort1.Open();
                }
            }
            catch (Exception e)
            {
                //MessageBox.Show("错误:" + e.Message);
                //if (e.Message == "对端口”COM1“的访问被拒绝。")
                    MessageBox .Show ("当前设置的串口不存在或者已经被占用,请重新设置串口并尝试连接");
            }
            if (serialPort1.IsOpen == true)
            {
              serialPort1.DiscardOutBuffer();
            }

6.由于线程安全问题,如果要将接收到的数据显示出来需要使用委托的机制,故:
private delegate void MydelegateShow();//声明一个委托
        private MydelegateShow SerialDelegate;//实例化一个委托对象
同时在窗口构造函数中添加SerialDelegate = new MydelegateShow(UpdateBox);
7.编写UpdateBox代码:
private void UpdateBox()
{
  textBox1.Text+=b;
}
8.发送是主动的,可以按照需求发送就可以
2)Microsoft .Net Remoting系列专题之三:Remoting事件处理全接触
应用Remoting技术的分布式处理程序,通常包括三部分:远程对象、服务端、客户端。因此从事件的方向上看,就应该有三种形式:
1、服务端订阅客户端事件
2、客户端订阅服务端事件
3、客户端订阅客户端事件
服务端订阅客户端事件,即由客户端发送消息,服务端捕捉该消息,然后响应该事件,相当于下级向上级发传真。反过来,客户端订阅服务端事件,则是由服务端发送消息,此时,所有客户端均捕获该消息,激发事件,相当于是一个系统广播。而客户端订阅客户端事件呢?就类似于聊天了。由某个客户端发出消息,其他客户端捕获该消息,激发事件。可惜的是,我并没有找到私聊的解决办法。当客户端发出消息后,只要订阅了该事件的,都会获得该信息。


时间:  2020-5-13 14:47
作者: 魏志勇

加强学习,提高个人能力




通信人家园 (https://www.txrjy.com/) Powered by C114