IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> C# TCP/IP与基恩士PLC通讯的最简方式 -> 正文阅读

[网络协议]C# TCP/IP与基恩士PLC通讯的最简方式

使用基恩士的上位链路通讯方式

本人实际项目中在用的。
官方通讯文档下载地址,直接看第8章即可。
说明文档下载地址

通讯使用TCP/IP协议,代码比较简单就直接贴了。

代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace WindowsFormsApp4
{
    class TCP
    {
        readonly object obj = new object();
        string Str;
        public string STR//接收到的消息
        {
            get { return Str; }
            set {; }
        }
        Socket socketSend;//= new Socket (AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
        public bool Connect(string ip, int port)
        {
            try
            {
                socketSend = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                IPAddress IP = IPAddress.Parse(ip);
                IPEndPoint point = new IPEndPoint(IP, port); ;
                socketSend.Connect(point);
                ShowMsg("PLC连接成功");
                //开启新的线程,不停的接收服务器发来的消息
                //Thread c_thread = new Thread(Received);
                //c_thread.IsBackground = true;
                //c_thread.Start();
                return true;
            }
            catch (Exception)
            {
                ShowMsg("请填写正确的IP地址和端口号!");
                return false;
            }
        }
        void ShowMsg(string str)
        {
            Str = str;
        }
        /// <summary>
        /// 接收服务端返回的消息
        /// </summary>
        void Received()
        {
            try
            {
                //3M的缓存区
                byte[] buffer = new byte[1024];
                //实际接收到的有效字节数
                int len = socketSend.Receive(buffer);// 将接受到的数据存入到输入buffer中
                if (len == 0)
                {
                    //断连
                }
                Str = "";
                String str = Encoding.UTF8.GetString(buffer, 0, len);
                ShowMsg(str);
            }
            catch (Exception ex)
            {
                //MessageBox.Show("接收数据出现异常!" + ex.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

        }
        /// <summary>
        /// 向服务器发送消息
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public void Send(string msg)
        {
            lock (obj)
            {
                try
                {
                    byte[] buffer = new byte[1024];
                    buffer = Encoding.UTF8.GetBytes(msg + "\r");
                    socketSend.Send(buffer);
                    Thread.Sleep(10);
                    Received();
                }
                catch (Exception ex)
                {
                    //MessageBox.Show(" 发送数据出现异常!" + ex.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
        }
    }
}

连接PLC代码如下:

        TCP PLC;

        //PLC连接
        public void PLC_link()
        {
            PLC = new TCP();
            PLC.Connect("192.168.1.1", 8501);
        }

这边演示读写,其他命令可以看文档解决。
举例只是方便大家看懂文档,需要注意的是空格和换行符不能少;
返回的数据是包含换行符和回车的。

读取PLC寄存器数据

格式:命令+空格+寄存器地址.数据格式+换行符(换行符写在Send方法里了)
数据格式

            //格式:命令+空格+寄存器地址.数据格式+换行符(换行符写在Send方法里了)
            PLC.Send("RD DM300");
            if (PLC.STR =="00001\r\n")
            {
                //寄存器DM300为1
            }
            else if(PLC.STR.Length == 4)//plc返回的非数据代码长度为4带有换行符和回车 例如:OK\r\n
            {

            }

写入PLC寄存器

写单个格式:命令+空格+寄存器地址.数据格式+空格+数据+换行符(换行符写在Send方法里了)
写多个格式:命令+空格+寄存器地址.数据格式+写入数量+空格+数据+空格+数据+。。。+换行符(换行符写在Send方法里了)
数据格式

            //写单个格式:命令+空格+寄存器地址.数据格式+空格+数据+换行符(换行符写在Send方法里了)
            PLC.Send("WR DM390 2");//改信号为2,扫码信号返回
            if (PLC.STR.Length == 4)//plc返回的非数据代码长度为4例如:OK\r\n
            {
                MessageBox.Show("PLC写入出错:" + PLC.STR);
            }
            // 写多个格式:命令+空格+寄存器地址.数据格式+写入数量+空格+数据+空格+数据+。。。+换行符(换行符写在Send方法里了)
            PLC.Send("WRS DM350.H 5 " + "数据1" + " " + "数据2" + " " + "数据3" + " " + "数据4" + " " + "数据5");//把分割好的信息发给plc

如有需要下面的是代码的下载链接:
下载连接

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-07-14 23:16:55  更:2021-07-14 23:17:04 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/29 9:45:51-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码