这里写自定义目录标题

  • 前言
  • 松下FP系列PLC
  • 通信协议
    • 帧格式
    • BCC的计算
    • 指令
    • 常用指令举例
  • 结语

前言

首先,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程序猿会制作好,电缆连线图如下:

既然是串口通信,那么在通信前,要问清楚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来表示。

计算方式:

代码如下:

        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的响应帧为:

结语

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

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

扫码称重快手台+分拣项目截图:

扫码打印贴标+扫码剔除项目截图:

C#与PLC通信开发之松下FP系列PLC相关推荐

  1. LABVIEW通过串口VISA通讯松下FP系列PLC.读取写入寄存器,辅助继电器,实际项目应用

    LABVIEW通过串口VISA通讯松下FP系列PLC.读取写入寄存器,辅助继电器,实际项目应用. 做成了子VI,包含源程序,松下通讯手册. ID:8325660589934366

  2. LABVIEW通过串口VISA通讯松下FP系列PLC.读取写 入寄存器,辅助继电器,实际项目应用。做成了子VI,包含源程序,松下通讯手册。适合初学者入门

    LABVIEW通过串口VISA通讯松下FP系列PLC.读取写 入寄存器,辅助继电器,实际项目应用.做成了子VI,包含源程序,松下通讯手册.适合初学者入门

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

    C#与PLC通信开发之西门子s7-200 smart 很遗憾,这篇文章,和我之前的其它的PLC教程不一样,因为这篇文章,不是授人以渔,而是授人以鱼! 但您又是幸运的,因为您看了这篇文章,您一样可以获得 ...

  4. 松下FP系列程序 松下FP系列程序,搭配松下伺服,昆仑通态触摸屏锂电池全自动叠片贴胶机

    松下FP系列程序 松下FP系列程序,搭配松下伺服,昆仑通态触摸屏锂电池全自动叠片贴胶机 大型程序近30000步,三个PLC,主从站通信控制 ,隔膜放卷纠偏控制,正负极真空取料叠片控制,可设定叠片层数, ...

  5. 三菱PLC Q、L、FX系列PLC区别

    Q系列是模块组合式PLC,有基板.电源.cpu.IO模块.各种智能模块组成,中型大型PLC, IO控制数量多(最多4095),可拓展模块丰富(最多64块),具备强大的网络通讯功能(cc-link,H网 ...

  6. 三菱q系列plc 和电脑socket_三菱Q系列PLC 以太网通信设置方法

    当使用三菱Q13UDEH PLC 和组态王6.55 进行通信,使用Melsec_Ethernet.dll(60.3.14.30)驱动.使用该驱动时应注意,勾选"允许RUN中写入(FTP与MC ...

  7. oracle 与plc通信,cim系统(com系统和plc的通讯)

    请详细说明,并附带案例 计算机集成制造 Computer Integrated Manu-facturing,简称CIM.20年来,CIM概念不断得以丰富和发展.CIM在世界各工业国的推动下,历经了百 ...

  8. ModBus RTU-上位机与PLC通信

    目录: 一.预备知识 二.上位机经RS485接口与PLC通信 --------------------------------------------------------------------- ...

  9. C#上位机 西门子PLC通信 S7NET协议

    C#上位机 西门子PLC通信 S7NET协议 1,西门子PLC网口通信,可通信S7-200smart,S7-1200,S7-1500. 2,例子简单易懂,自己写的程序,可提供部分 3,现场实测有效. ...

  10. 转盘程序 使用松下XH PLC编程 用了威纶通TK6071IQ屏,PLC用的是松下XH的

    转盘程序 使用松下XH PLC编程 这个程序是本人做的,用了威纶通TK6071IQ屏,PLC用的是松下XH的,包括HMI跟PLC程序及视屏教成,有些同行有机会接触到转盘的工程,但不知道怎么入手. 这里 ...

最新文章

  1. 如何在 SQL 2008 安裝 Performance Dashboard Reports
  2. NLPIR语义挖掘建互联网内容处理全技术链条
  3. bitter matlab,两分钟英语自我介绍模板
  4. redis php 书,php中redis的使用
  5. 将派生类指针赋值给基类的指针
  6. 公子龙:我读研期间通过实习和比赛收入五十万
  7. docker三剑客之docker-machine
  8. Qt工作笔记-遍历文件夹里面的所有文件,并在QTreeWidget内显示
  9. java : jstack 显示虚拟机的线程快照
  10. 这台计算机上缺少此项目引用的 NuGet 程序包,DotNetCompilerPlatform
  11. 【中国传媒大学】史上最全的《电视原理》笔记
  12. 刘铁猛-深入浅出WPF-系列资源汇总
  13. Windows 7/8 fails to install in VirtualBox, Status: 0xC0000225
  14. 强大的文件管理利器-恒辉通用文件管理工具
  15. IRQL深入解析(1)--IRQL级别
  16. oracle之SQL的基本函数
  17. 【围观】CISP-PTE 考题示例
  18. @Autowired(required=true)
  19. Chef Infra 16添加了YAML配方支持
  20. Transformer家族5 -- 推理加速(Faster-Transformer、TurboTransformers)

热门文章

  1. RDP报表工具2.4.2版本
  2. 网络安全工程师必备浏览器插件
  3. ITIL4讲解: 组合管理
  4. 基于强化学习的综合能源系统管理综述-笔记
  5. QT与Coin3D实现机器人的仿真
  6. 如何设置CSDN的ID(仅新建可设置)
  7. Window平台编译log4cpp使用方法记录 (二)
  8. C语言之父是谁?为什么要开发C语言?
  9. DB9串口线定义的解析
  10. VS2012 安装番茄助手