精华内容
下载资源
问答
  • C#与PLC通信开发之三菱FX系列PLC 版权归作者本人所有,如需转载,请注明出处,谢谢! 如有项目合作,请联系:18635729543 前言 本文讲解的是上位机如何与三菱FX系列PLC进行通信,开发语言使用的是C#语言,代码不多,...

    C#与PLC通信开发之三菱FX系列PLC

    前言

    本文讲解的是上位机如何与三菱FX系列PLC进行通信,开发语言使用的是C#语言,代码不多,主要是讲解通信协议。

    刚做了一个转盘式翻斗分拣机项目,采用的是三菱PLC,之前没有接触过三菱的PLC,查看了一些资料,但是这些资料要么不完整,或者写的不够清楚,导致自己实际开发的时候,还是碰到一些问题,所以想花点时间总结一下,写一篇比较完整而且得到实际项目验证的文章记录下来。

    简单介绍一下项目:项目的功能是按波次分拣订单,订单的特点是:每个订单的数量较多,商品的尺寸较小,大部分是胶带,小部分是很轻很薄的纸片式的商品,还有部分是比较大的比如记事本啊什么的。

    订单商品
    订单商品
    分拣机由51个分拣口(含一个异常口),每个波次可以分拣50个订单,每个波次2000-3500件商品。由于商品的特殊性,没办法采用相机顶扫的方式,所以采用人工扫码,这台分拣机两个熟练的操作员操作的话,可以达到每秒1件商品的分拣速度,一小时能分拣3000多件商品,效率还是杠杠的。
    分拣机

    好了,闲话少说,下面切入正题。

    三菱FX系列PLC

    通信接口

    三菱FX系列PLC,采用串口与PC机进行通信,使用 SC-09 编程电缆作为计算机与 PLC 通信的连线。电缆的 9 芯 D 形插头连接在计算机串口上,另一端连接 PLC 的 RS-422 编程口。

    FX-PLC
    FX-PLC

    SC-09-DB9线
    SC-09-DB9线

    串口参数设置如下:

    波特率:9600

    奇偶校验:Even(偶校验)

    数据位:7位

    停止位:1位

    串口参数设置好了以后,连接PLC,使用串口调试助手,按16进制发送05给PLC,如果连接正常的话,PLC会返回06。

    通信测试

    通信协议

    三菱FX系列PLC的通信协议有三个特点:

    1. 上位机(我们的PC机)和PLC之间的通信是应答式的,也就是说,上位机给PLC发送指令,PLC作出相应的应答,PLC不会主动给上位机发送任何指令。注意:每次给PLC发送指令后,必须等待PLC的应答完成才能发送下一条指令,否则下一条指令将会失败!
    2. 指令都是ASCII码的形式,而且都是十六进制的。比如你要往某个地址写入数值100,如果用二进制表示,那么只需要一个字节就行了,但是用ASCII码表示,就需要3个字节,在内存里面分别是:31H、30H、30H。整条指令,包括起始符、终止符、地址、值、校验都是使用ASCII码。
    3. 指令简单。除了上文所说的05H通信测试指令之外,还有另外4条指令:

    指令
    我在项目中,主要用到的就是读写这两个指令,置位和复位这两个指令没有用到,不过下面将会逐一的讲解这4个指令(置位和复位这两个指令的内容从别人的文章里复制~)

    校验

    这4条指令都涉及到校验,所以在逐一讲解这4条指令之前,先说一下校验。三菱FX系列PLC的指令校验方式,采用的是和校验方式,也就是累加求和,然后取最后两位。很简单,直接上代码吧:

            public string CheckSum(byte[] cmd)
            {
                byte sum = 0;
                
                for (int i = 0; i < cmd.Length; i++)
                {
                    sum = (byte)(sum + cmd[i]);
                }
    
                return sum.ToString("X2");
            }
    

    地址

    地址需要进行转换,转算算法为:

    address = address*2 + 1000H

    比如要往D134这个地址写入数据,那么地址为:

    address = 134*2 + 4096

    值得注意的是,FX系列PLC,读写的基本单元是字,也就是说每个地址对应的是两个字节,如图所示:
    地址

    读指令

    上位机指令

    先来看看读指令的指令格式,一条完整的读指令,包含起始符(ASCII码里面的STX)、命令(30H)、首地址、读取的字节数、终止符(ASCII码里面的ETX)、校验这6个部分。下面的图示里,我们以读取首地址为D123为例,读取2个字节,也就是读一个short数据出来:
    读指令
    下面逐一讲解各个部分:

    • STX:起始符,ASCII码里面的STX,值为02H。一个字节。

    • CMD:指令,读指令为ASCII码的’0’,值为30H。一个字节。

    • 首地址:读取数据的起始地址,4个字节表示。地址的计算方式,上文有讲解,这个图里我们读取的是D123的地址,根据计算公式address=123*2 + 4096 = 10F6H,转换成ASCII码,就是31H,30H,46H,36H。

    • 字节数:要去读的字节数,2个字节表示。需要注意的是,一条读指令,最多能读取64个字节

    • ETX:指令终止符,ASCII码里面的ETX,值为03H。一个字节。

    • 校验:2个字节表示。校验在前面也讲解过,采用的是累加求和,取最后两个字节。从CMD到ETX这部分参与运算:

    读指令校验

    PLC响应

    如果一切正常的话,那么PLC会对读指令进行响应,返回要读取的数据,我们假设PLC返回的short值是30,那么响应格式为:
    读指令响应
    基本上,PLC响应的各部分和指令是相同的。需要注意的是这个部分,我们的指令是读取2个字节,但是这个部分有4个字节,是因为FX系列通信协议里,指令和响应都是ASCII码表示的,每个字节用两个ASCII码字符表示,所以一共有4个字节。如果我们是按字读取值的话,也就是读取一个short的值,那么有两个地方需要注意:

    1. 字节顺序是:低位在前,高位在后,解析的时候需要调整顺序。
    2. 里面存储的是ASCII码,需要进行转换。

    如何把这4个字节,还原成一个short呢?

    首先,将31H45H30H30H,高低位调整顺序变成30H30H31H45H,然后把ASCII码转换成值001EH,也就是1*16 + 14 = 30。

    其中,ASCII码转换成数值的代码如下:

            public static int AsciiToInt(byte ascVal)
            {
                if (ascVal >= 0x30 && ascVal <= 0x39) // ASCII字符0-9之间
                {
                    return (ascVal - 0x30);
                }
                else if (ascVal >= 0x41 && ascVal <= 0x46) // ASCII字符A-F之间
                {
                    return (ascVal - 0x41 + 10);
                }
                else if (ascVal >= 0x61 && ascVal <= 0x66) // ASCII字符a-f之间
                {
                    return (ascVal - 0x61 + 10);
                }
                else
                {
                    return -1;
                }
            }
    

    完整的转换一个short值的代码如下:

        public static short TranslateToShortValue(byte[] buf)
        {
            int lowByte = AsciiToInt(buf[0]) * 16 + AsciiToInt(buf[1]);
            int highByte = AsciiToInt(buf[2]) * 16 + AsciiToInt(buf[3]);
            int intVal = highByte * 256 + lowByte;
            return (short)intVal;
        }
    

    其中,buf数组里面,存储的就是从PLC里面读取的数据31H45H30H30H。

    写指令

    上位机指令

    假设我们往地址D123里写入一个short值98(注意,不是16进制),指令格式为:

    写指令
    大体上和读指令的格式是一样的,只是有两个地方需要注意:

    1. 字节数:这里我们是按short类型写入,也就是写入一个字,所以字节数是2个。但是在数据部分,却占了4个字节,是因为指令全部由ASCII码组成。
    2. 数据部分:首先数值98要转换成16进制0063H,然后低位在前,高位在后,然后再转换成ASCII码。

    PLC响应

    写指令因为不需要返回数据,所以PLC的响应很简单,只返回一个字节。

    • 如果写入正确,则返回ACK(06H)
    • 如果写入错误,则返回NAK(15H)

    完整的代码如下:

            private static string STX = "\x02";
            private static string ETX = "\x03";
            private SerialPort _serialPort;
    
            public bool WriteData(int addr, short value)
            {
                if (null == _serialPort || !_serialPort.IsOpen)
                {
                    return false;
                }
    
                StringBuilder sb = new StringBuilder();
    
                sb.Append("1"); // CMD
    
                addr = addr * 2 + 4096;
                sb.Append(addr.ToString("X4")); // 首地址
    
                sb.Append("02");    //字节数
    
                string strValue = value.ToString("X4"); // 数据
                sb.Append(strValue.Substring(2, 2));    // 低字节在先
                sb.Append(strValue.Substring(0, 2));    // 高字节在后
    
                sb.Append(ETX);   // 结束符
    
                // 计算SUM
                byte[] cmd = System.Text.Encoding.ASCII.GetBytes(sb.ToString());
                string sum = CheckSum(cmd);
                sb.Append(sum); // SUM
    
                sb.Insert(0, STX);  // 插入起始符
    
                try
                {
                    // 转换成字节并写入串口
                    byte[] cmdArr = System.Text.Encoding.ASCII.GetBytes(sb.ToString());
                    _serialPort.Write(cmdArr, 0, cmdArr.Length);
                }
                catch (System.ServiceProcess.TimeoutException ex)
                {
                    Logger.WriteLog("写入plc超时");
                    return false;
                }
                catch (Exception ex)
                {
                    Logger.WriteLog("写入plc失败,异常:" + ex.Message);
                    return false;
                }
    
                try
                {
                    // 读取PLC响应
                    int ret = _serialPort.ReadByte();
                    if (ret == 6)
                    {
                        // 正确应答
                        return true;
                    }
                }
                catch (System.ServiceProcess.TimeoutException ex)
                {
                    Logger.WriteLog("读取plc应答超时");
                }
                catch (InvalidOperationException ex)
                {
                    Logger.WriteLog("读取plc应答失败,串口未打开");
                }
                catch (Exception ex)
                {
                    Logger.WriteLog("读取plc应答失败,异常:" + ex.Message);
                }
    
                return false;
            }
    

    置位指令

    上位机指令

    置位指令
    这里需要注意的就是:地址计算方式,address = address / 8 + 100H

    PLC响应

    PLC的响应很简单,只返回一个字节。

    • 如果写入正确,则返回ACK(06H)
    • 如果写入错误,则返回NAK(15H)

    复位指令

    上位机指令
    复位指令
    这里需要注意的就是:地址计算方式,address = address / 8 + 100H

    PLC响应

    PLC的响应很简单,只返回一个字节。

    • 如果写入正确,则返回ACK(06H)
      是:地址计算方式,address = address / 8 + 100H

    PLC响应

    PLC的响应很简单,只返回一个字节。

    • 如果写入正确,则返回ACK(06H)
    • 如果写入错误,则返回NAK(15H)

    复位指令

    上位机指令

    [外链图片转存中…(img-9eSEcDCT-1603044910210)]

    这里需要注意的就是:地址计算方式,address = address / 8 + 100H

    PLC响应

    PLC的响应很简单,只返回一个字节。

    • 如果写入正确,则返回ACK(06H)
    • 如果写入错误,则返回NAK(15H)
    展开全文
  • C#与PLC通信开发之西门子s7-200 smart 很遗憾,这篇文章,和我之前的其它的PLC教程不一样,因为这篇文章,不是授人以渔,而是授人以鱼! 但您又是幸运的,因为您看了这篇文章,您一样可以获得读写S7-200 smart PLC...

    C#与PLC通信开发之西门子s7-200 smart

    很遗憾,这篇文章,和我之前的其它的PLC教程不一样,因为这篇文章,不是授人以渔,而是授人以鱼

    但您又是幸运的,因为您看了这篇文章,您一样可以获得读写S7-200 smart PLC的能力!

    如果你的项目采用的是西门子S7-200 smart PLC,那么我不建议你像其它的PLC一样,去学习它的通信协议,然后自己编码,原因有二:

    1. S7协议很复杂,作为上位机开发人员,完全没有必要花费这么多的学习成本去进行学习,而且一般来说,项目周期也不允许你有太多的学习时间。
    2. 西门子S7-200 smart,通信接口采用的是以为网口,也就是说要编写socket通信,说实话,要写稳定一个tcp客户端软件,已经不是件很容易的事情了。

    所以,我给你推荐一个库,和S7-200 smart PLC通信,只需要简单的调用一些函数,就能实现读取和写入数据。这个库高效稳定,经受了无数项目的考验(和S7-200 smart PLC通信的,十个有八个用的是这个库),让你完全没有后顾之忧,然后你就可以把重心放在自己的业务上。

    来吧,展示:

    在这里插入图片描述

    源码下载传送门:

    https://download.csdn.net/download/weixin_44455060/13116058

    展开全文
  • 通过西门子S7协议,实现c#编写的上位机西门子S7-1500进行通信,并实现断线重连功能,多线程访问
  • C#与PLC通信开发之松下FP系列PLC

    千次阅读 2020-09-10 09:49:04
    这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、...

    前言

    首先,C#与PLC通信的开发,要和PLC程序开发区分开,C#与PLC通信的开发,是上位机软件开发,PLC程序开发,是编写在PLC里运行的程序,是PLC程序猿的事情。我最初接触PLC的时候,不是很清楚,毕竟搞软件开发的,硬件都不怎么熟悉。第一次碰到需要和PLC打交道的项目时,曾经一度差点放弃,找不到方向,迫于项目时间的压力,只能在网络上盲目的寻找资料,甚至买了一本PLC编程的书籍来看,结果完全看不懂。后来才知道,那本书介绍的是如何编写PLC里面运行的程序的教程,需要一定的电子电气方面的基础,是PLC程序猿看的书。而我需要的,是C#如何与PLC进行通信方面的资料,完全搞错了方向。

    一般来说,自动化设备的项目,有一个上位机程序猿和一个PLC程序猿一起合作,C#写上位机软件,PLC程序猿写PLC程序。不过不要指望可以从PLC程序猿那里获取更多的信息,因为一般PLC程序猿对上位机软件开发也是一窍不通,他不可能教你怎么和PLC通信,因为他也不会,不过他可以告诉你,有没有通信上,结果正确不正确。作为一个上位机软件开发,我们不需要深入了解PLC,只要能知道一些概念,能和PLC程序猿正常沟通就行了,重点是怎么和PLC通信。

    PLC有众多的品牌,国外的有西门子、ABB、三菱、松下这些,国内也有不少,比如台达、永宏、汇川等等。同一品牌的PLC又有多种型号,不同的型号,通信方式有的也不一样,所以做项目一般要先问清楚:什么品牌的PLC,具体是什么型号?

    所谓和PLC通信,就是读写PLC的存储区,或者是给PLC发送命令。上位机和PLC的物理接口,有的是串口,比如松下和三菱系列的PLC,还有的是网口,比如西门子的PLC。所以和PLC通信,涉及到串口编程和网络编程。如果您没有串口编程的基础,可以参看我的另一个专栏:C#完全掌握串口通信开发

    C#与PLC通信的开发,最大的障碍是硬件。这也是上位机开发的一个问题,如果手头上没有硬件的话,写出来的程序是对是错也没办法验证。不过幸运的是,这个专栏里的PLC,都是我项目中遇到的,经受过实际硬件的验证,可以确保程序的正确性。我把这些整理出来,让大家少走一些弯路,减少项目开发的时间。

    松下FP系列PLC

    松下FP系列PLC与工控机之间的通信方式可以采用串口通信,与工控机连接的RS232电缆必须按照松下的产品手册所给的连线图进行制作,否则通信将无法实现。一般这根线PLC程序猿会制作好,电缆连线图如下:
    RS232电缆连线图
    既然是串口通信,那么在通信前,要问清楚PLC程序猿波特率、奇偶校验位、停止位这些重要的串口通信参数。在编写代码前,可以先使用串口调试助手来检查是否能正常通信。我们可以给PLC的串口发送这串16进制数据来验证是否能正常通信(注意:以16进制形式发送):

    2530312357435352303031323132300D

    注:这条指令是往触点R12写入1

    暂时先不要管这条数据的含义,如果可以和PLC正常通信,那么PLC是有反馈的,串口调试助手可以收到数据。如果PLC没有反馈,那么可以根据以下顺序检查问题:

    1. 确保串口号是正确的。
    2. 确认波特率、奇偶校验位、停止位这些参数是一致的。
    3. 跟PLC程序猿确认RS232电缆的接线是正确的。

    通信协议

    与PLC能正常进行串口通信之后,接下来就是根据通信协议来收发数据,进行通信。松下PLC与工控机之间的通信是遵照松下电工的专用通讯协议:MEWTOCOL来实现的。松下官方有关于这个协议的完整的描述文档,网上到处都可以找得到,我这里也有一份。不过说实话,这个文档说的不是很详细,看完这个文档,很多要紧的地方还是稀里糊涂的,比如指令的内容具体该怎么填写,BCC(指令校验)到底该怎么计算才是正确的。这也是我写这篇文章的目的,我曾经走了不少弯路,浪费了不少时间和精力,后来总算搞清楚了。所以我建议,大家结合我这篇文章来看那个文档,就会很清楚了。本文也不会完全复制官方的文档,毕竟有30多页,只是结合我的体会,概述的讲讲,具体的指令,大家还是下载官方的文档来看。
    官方文档下载地址:松下通信协议文档下载地址

    该协议由以下特点:

    1. 数据传输采用ASCII的形式。
    2. 应答式协议,首先由工控机发送指令,然后PLC会自动对指令进行响应。也就是说,不需要编写任何PLC程序,只要PLC和工控机连接正常,工控机给PLC发送指令,都能得到PLC的响应回复。

    帧格式

    指令是以帧为单位进行,工控机向PLC发送命令帧,然后PLC作出响应,向工控机发送响应帧。

    命令帧格式
    命令帧格式
    其中:

    1. %为起始码,这是固定不变的。
    2. AD(H)和 AD(L)是目标站号的高位和低位。一般如果只有一个PLC的话,那么就填写01,高位是0,低位是1。
    3. #也是固定不变的。
    4. 指令代码。每个指令会有不同的指令代码,后面会讲。
    5. 文本代码。指令的内容,不同的指令,内容也不同。
    6. BCC(H)和BCC(L),是帧的数据校验的高低位,数据校验范围是BCC前面的所有字符。
    7. CR,回车键,ASCII为0x0D,不可见字符。

    响应帧格式
    响应帧有两种,一种是正确响应,一种是错误响应。也就是说,如果工控机给PLC发送的指令是正确的,那么PLC就会返回正确的响应帧,否则就返回错误的响应帧。
    响应帧格式
    可见,可以从第4个字符来判断是正确响应,还是错误响应。

    BCC的计算

    BCC校验码的计算方式是将指令中的各个ASCII字符的16进制(00~FF)进行异或求和后生成的. 该校验码也以两个ASCII码字符表示(高位在前,低位在后)。
    例如这条指令:

    %01#RCSX00001DCR
    注意:CR不是两个字符,是一个字符,回车键,但是是不可显示字符,所以这里用CR来表示。

    计算方式:
    BCC的计算方法
    代码如下:

            public static string Bcc(string cmd)
            {
                cmd = cmd.Trim();
                
                byte bcc = 0;
                byte[] cmdArr = System.Text.Encoding.ASCII.GetBytes(cmd);
                for (int i = 0; i < cmdArr.Length; i++)
                {
                    bcc = (byte)(bcc ^ cmdArr[i]);
                }
    			
    			return bcc.ToString("X2")
            }
    

    参数cmd为指令的前半部分,也就是去掉bcc和CR的部分。例如指令为:%01#RCSX00001DCR,则cmd参数为:%01#RCSX0000

    指令

    工控机可以给PLC发送的指令一共有20多种,不过我们常用的指令一般有9种。
    所有指令
    常用指令

    常用指令举例

    例1:写入单触点状态(指令代码:WCS)
    写入单触状态命令
    例如我们往触点R12写入1,则命令帧为:

    %01#WCSR0012120CR

    拆开成各个部分:% 01 # WCS R 0012 1 20 CR
    正常通信情况下,PLC会返回正确的响应帧:

    %01$WC14CR

    例2:读取单触点状态(指令代码:RCS)
    读取单触点状态
    例如我们读取触点R12的值,则命令帧为:

    %01#RCSR001214CR

    拆分成各个部分:% 01 # RCS R 0012 14 CR
    正常通信情况下,假如R12触点的值为1,那么PLC返回的响应帧为:

    %01$RC120**CR

    例3:写入数据寄存器值(指令代码:WD)
    写入数据寄存器值
    例如我们写入字数值到PLC的 DT1到DT3,其中:DT1=05H,DT2=1507H,DT3=900H,则命令帧为:
    命令帧
    这里需要注意的是:

    1. 写入的数值是按字写入,也就是说,每个值占2个字节。
    2. 低位在前,高位在后。
    3. 写入的字符是16进制的。

    所以,需要代码进行处理。例如此处的DT2=1507H,1507H的10进制值是5383,则处理步骤为:

    1. 先将5383转换为16进制的字符1507
    2. 将字符转换顺序,低位在前,高位在后,也就是转换成:0715

    我们写一个函数来进行处理:

            private string ConvertShortToPlcFormat(short value)
            {
                string temp = value.ToString("X4");
                return temp.Substring(2, 2) + temp.Substring(0, 2);
            }
    

    正常通信情况下,PLC的响应帧为:
    PLC响应帧

    结语

    在这篇文章里,我概述了如何使用MEWTOCOL协议与松下FP系列PLC进行串口通信,详细讲解了几个常用的指令和BCC的计算,相信通过阅读本文,再结合松下官方的协议文档,掌握C#工控机与松下FP系列PLC的通信开发不再是难事了。

    我曾经在几个项目里面和松下的PLC打过交道,一个扫码称重+按快递公司分拣的流水线项目,另一个是扫码打印贴标+扫码剔除的项目,目前两个项目都在稳定的运行中。其中,前一个项目读码相机采用的是海康的智能读码套件MV-PD010003-21IH,后一个项目读码相机采用的是得利捷的300N,PLC都是采用的松下PLC。

    扫码称重快手台+分拣项目截图:
    项目软件运行图
    扫码打印贴标+扫码剔除项目截图:
    扫码贴标和剔除系统

    展开全文
  • 两本书中详细介绍了上位机与PLC之间的通信编程过程,以及C#开发的实例
  • C#与DVP PLC通信实例

    2013-06-15 11:15:13
    本人使用的是DVP的PLC,通过学习,实现了C#与DVP的串口通信,希望对大家有所帮助。
  • 通过C#语言做的一个西门子PLC通信的上位机DEMO,可做参考使用。使用的是西门子的S7.NET库文件进行,对上位机开发有帮助
  • C#与三菱PLC串口通信

    2015-09-16 20:16:11
    C#与三菱PLC串口通信,SerialPort控件实现。
  • C#实现上位机与PLC通信

    万次阅读 2019-11-07 14:48:54
    C#与MX COMPONENT通讯 本文链接:https://blog.csdn.net/han_better/article/details/80609161 1、三菱 MX COMPONENT下载及安装测试:安装测试 2、通讯测试及数据监控 打开PLC监控程序: 可以看到之前设置的通讯...

    C#与MX COMPONENT通讯

     

    本文链接:https://blog.csdn.net/han_better/article/details/80609161

    1、三菱 MX COMPONENT下载及安装测试:安装测试 
    2、通讯测试及数据监控 
    打开PLC监控程序: 
    这里写图片描述 
    可以看到之前设置的通讯配置,也可以重新设置: 
    这里写图片描述 
    点击OK 
    这里写图片描述 
    在右侧可以输入地址可以对PLC数据进行监控 
    这里写图片描述 
    PS:1:plc地址,2:开始结束监控,3:更改监控方式 
    这里写图片描述 
    buffer memory监控 
    这里写图片描述 
    也可以根据输入地址进行自定义监控 
    这里写图片描述 
    往PLC写入数据及设置PLC时间 
    这里写图片描述 
    可以按位写,也可以一次写入多位 
    这里写图片描述

    3、好多人一开始就在找通讯的源码,我已开始也找了好久,可恶的是有些人知道源码不仅不提供还收金币下载,这里先画个圈圈;一般这种软件都带源码的啊,我就不信MX COMPONENT没有,终于让我在莫个角落里找到了,感慨一番。。。。。。。 
    这里写图片描述 
    选中该程序,右击属性: 
    在属性面板中选择 打开文件位置: 
    这里写图片描述 
    找到程序所在文件夹: 
    这里写图片描述 
    回到上个目录: 
    这里写图片描述 
    进入samples文件夹(终于找到C#源码了,哈哈): 
    这里写图片描述 
    以上大家可以参考源码进行测试;

    下面就告诉大家怎么自己建项目: 
    新建一个C#窗体应用,添加引用,发现没有案例程序中的dll。 
    这里写图片描述 
    菜单栏中选择工具,下拉框中点击选择工具箱项。 
    这里写图片描述 
    选择com组件选项卡,在选择界面中勾选你所需要的控件 
    这里写图片描述 
    在工具箱中的常规项中就可以看到mx的控件了 
    这里写图片描述 
    然后后面大家可以根据案例中的进行程序不开发了,后续开发再写吧,这个真的拖了好久了,最近项目有点忙,惭愧。。。

    展开全文
  • C#与西门子PLC通信上位机程序

    千次阅读 2020-02-21 15:07:54
    1.该程可以实现c#与西门子全系列plc(200,200smart,300,1200,1500)的以太网s7通讯,通讯传输快稳定。 2.该程序采用s7.net.dll动态链接库方式,是最近几年才出来的一种与西门子plc通讯的方式,本人经过几个星期的...
  • C#通过Kepserver 与PLC通信配置及C#实现通过Kepserve实现读取实例教程
  • C# 上位机松下plc通信的列子。 用于手机屏幕异物检测。
  • C#实现PC三菱PLC串口通讯程序及详解(包括C#通信程序、PLC通信程序、中文版通信协议资料);C#实现PC三菱PLC串口通讯程序及详解(包括C#通信程序、PLC通信程序、中文版通信协议资料)
  • S7.NET支持连接S7-200SMART,S7-1200,S7-1500,S7-300,S7-400PLC,只支持西门子系列PLC,而且连接方式要是profinet通信 一,引用S7.NET的dll文件 二,using S7.Net; 三,实例化PLC 如果是连接PLC SMART200...
  • 本工具使用C#语言编写,可以对三菱PLC的数据进行读取和写入。
  • 项目需要用C#写一个上位机,用Modbus/TCP协议与PLC通信,控制伺服电机的启停、转速等。 “启动”的代码如下,btn_stop_Click 是“启动”这个按钮对应的代码,启动一个新线程,实际的代码在StopEnginer函数中实现 ...
  • 记录一波,不能让这方面的知识太少了。 第一次搞这玩意迷糊的很,因为写过自动贩卖机的通信,自然的以为是通过主板控制,通过提供的上位机指令和下...3.C#参考MX Component自带Demo,与PLC编程人员协商好寄存器的号即
  • 据某份数据不完全统计,目前中国市场十大国际PLC品牌如下(避免争议,排名不分先后):西门子、施耐德、欧姆龙、三菱、罗克韦尔、松下、ABB、倍福、艾默生、GE再盘点一下中国市场十大国内PLC品牌:和利时、台达、...
  • C#与PLC S7-1200的通信

    千次阅读 2019-09-30 15:20:37
    1.引用S7.Net 2.private void Button1_Click(object sender, EventArgs e) { Plc plc = new Plc(CpuType.S71200, "192.168.0.1", 0, 1); plc.Open(); if (!plc.IsConne...
  • 1、三菱 MX COMPONENT下载及安装测试2、通讯测试及数据监控打开PLC监控程序:可以看到之前设置的通讯配置,也可以重新设置:点击OK在右侧可以输入地址可以对PLC数据进行监控PS:1:plc地址,2:开始结束监控,3:...
  • C#与PLC通讯.rar

    2019-09-29 01:55:49
    pc三菱plc串口通信,pc松下plc串口通信
  • 这个项目是演示用c#实现定时读取PLC某个地址的值,PLC地址可依据具体业务修改。
  • 上一篇聊到了C#与三菱PLC设备任何通信,这篇详细介绍结合本人项目中的使用。包括32位数据寄存器的读取写入。 1.数据寄存器(如D100),数据寄存器直接使用32位即可 private void btn_ReadDeviceBlock_Click...
  • C#调用S7TCPDLL.dll实现西门子S7-200 SMART PLC通信的例子,里面的S7TCPDLL.dll有使用时间限制,如需正版的S7TCPDLL.dll,请联系本人!
  • 可同步读取写入数据。可通过双击修改当前状态或数据。
  • 倍福TwinCAT3上位机与PLC通信测试(ADS通信) 包含C#和C++代码 程序介绍:https://www.cnblogs.com/JiYF/p/7780948.html 最底部有下载连接,不需要在这里下载 本次测试需要环境: VS2013,TwinCAT3(本人...

空空如也

空空如也

1 2 3 4 5 ... 9
收藏数 176
精华内容 70
关键字:

c#与plc通信

c# 订阅