暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

【原创技术分享】基于TCP协议的Socket 通信

众智创新团队 2021-10-25
1269

·点击蓝字·关注我们  NEW TERM



软件:

1.TIA Portal V16,S7-PLCSIM Advanced V3.0

2.Visual Studio



一, 下位机:PLC服务器设置



1. 程序编写



程序如图1.1.1-图1.1.4所示。



图1.1.1 建立通讯



图1.1.2 发送数据



图1.1.3 接收数据



图1.1.4 建立发送数据数据块



2. 参数设置



在连接属性中设置参数,PLC作为服务器,其IP地址为192.168.0.1,端口号为2000。(这里用PLCSIM Advanced仿真,端口IP地址为192.168.0.241,如图1.2.1所示。)



图1.2.1设置参数



二, 上位机:利用窗体应用完成数据接收



1. 建立窗体样式



窗体样式如图2.1.1所示。



图2.1.1 连接界面



2.编写代码



实现连接并显示数据。



    //创建socket(TCP协议封装)
    private Socket Tcpclient;
    //创建取消数据源
    private CancellationTokenSource cts = new CancellationTokenSource();
    private void button1_Click_1(object sender, EventArgs e)
    {
    if (this.button1.Text=="连接")
    {
    //实例化socket
    this.textBox3.Text = s;
    Tcpclient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    EndPoint EP = new IPEndPoint(IPAddress.Parse(this.textBox1.Text), int.Parse(this.textBox2.Text));
    try
    {
    Tcpclient.Connect(EP);
    }
    catch (Exception ex)
    {
    MessageBox.Show("连接失败:" + ex.Message);
    return;
    }
    MessageBox.Show("连接成功:");

    this.button1.Text = "断开";
    this.textBox3.Text = s;
    Task.Run(new Action(() =>
    {
    GetPLCValue();
    }));
    }
    else
    {
    Tcpclient?.Close();
    this.button1.Text = "连接";
    }
    }



    接收数据设置 



      private void GetPLCValue()
      {
      byte[] data = new byte[1024*10];
      int recv = Tcpclient.Receive(data);
      String result = System.Text.Encoding.Unicode.GetString(data, 0, recv);
      Tcpclient.Shutdown(System.Net.Sockets.SocketShutdown.Receive);
      s=result;
      }



      三, 项目演示



      将博途程序下载到PLCSIM Advanced中,利用仿真PLC通讯,效果如图3.1.1-图3.1.2所示。



      图3.1.1 上位机与PLC建立连接成功



      图3.1.2 上位机接收到字符“E”





      发现“分享”“赞”了吗,戳我看看吧


      文章转载自众智创新团队,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

      评论