1.3 PLC串口通信应用
串口通信在PLC的通信领域使用十分广泛,欧姆龙、AB、西门子和倍福的PLC都带有串行通信端口或扩展串行通信端口,1.1节和1.2节介绍的串口原理也是PLC串口通信的基础,同时每种PLC在串口电缆的接线方式上又有自己的特性。由于倍福PLC本身不带有串口,需要配置扩展串口模块,而且倍福PLC的串口应用比较少,因此本书对倍福PLC的串口通信就不做描述了。有些PLC的串口只支持RS-422/RS-485通信标准,但是计算机侧串口只支持RS-232通信标准,因此如果PLC串口是RS-422/RS-485接口,要实现计算机与PLC的通信,就需要一根RS-422/RS-485到RS-232的转换电缆。
串口在PLC通信中的应用十分广泛,主流的PLC都带有串口模块,大多数PLC的编程软件需要通过串口与PLC通信。本书就以欧姆龙、AB、西门子3种PLC的串口通信为例,介绍串口通信在PLC中的应用。
1.欧姆龙PLC
欧姆龙PLC的串口是标准的9针RS-232接口,最大通信距离为15m,串口电缆可以自己制作,也可以购买欧姆龙官方指定的电缆。串口支持Hostlink、Toolbus、Modbus、无协议等多种通信方式,本书第2章将重点介绍欧姆龙PLC的Hostlink和无协议两种串口通信方式。
Hostlink协议是大多数欧姆龙PLC默认的串口通信协议。有些PLC(例如CJ、CS等)默认的通信方式为Toolbus,这些默认不是Hostlink通信方式的PLC在使用Hostlink协议之前,需要对PLC的串口进行拨码设定,通过拨码把Hostlink变为默认的通信方式。另外,在计算机与PLC通信之前,需要通过PLC编程软件CX-Programmer设置PLC的波特率、停止位等串口基本参数,然后计算机端编程时对串口参数的设定要与PLC端的串口参数保持一致。
Hostlink是一种字符形式的协议,有固定的字符格式,是一串以“@”开头的字符串,其中命令字符部分是决定读或者写以及读取和写入长度等重要信息的部分。本书的Hostlink部分将介绍两种命令格式,一种是C-Mode,另一种是FINS。区别这两种命令的最好方式是,FINS命令字符以“FA”开头,而C-Mode的命令字符直接以命令开始,例如“RD”(读)“WR”(写)等。
欧姆龙PLC还支持无协议通信,无协议通信需要在PLC端使用无协议通信指令编写PLC发送和接收程序来实现与第三方的串口通信。无协议通信的好处是通信的数据没有固定的通信格式,可以自行编写通信协议,例如与扫描枪、传感器等通信。
2.AB PLC
AB PLC支持RS-232和RS-485串口标准,物理层包括一组电缆和一个串口模块,接口电缆可以自己制作,也可以使用AB提供的标准串口通信电缆,本书使用AB官方提供的标准串口通信电缆。AB PLC各个节点之间使用的网络链接包括DH、DH+、DH485、ControlNet等。DF1协议是AB PLC应用最广的数据链路层通信协议。串口模块是DF1链接与网络链接之间的接口,在使用DF1链接之前也需要使用AB PLC编程软件查看串口默认的链接是不是DF1,如果不是,需要设为DF1。然后,还需要设置串口为全双工/半双工、数据校验为BCC/CRC,以及波特率、停止位等串口参数,再写入PLC。计算机端编写上位机程序时,也需要按照这些参数初始化串口,然后在编写DF1协议程序时,校验码、全双工/半双工也需要与PLC端的设置保持一致。串口的参数设置在AB PLC编程软件里是以通道表示的,串口硬件与AB PLC编程软件对应的通道名可以通过查找PLC的手册来获得。
AB中小型和大型PLC的数据存储方式是不一样的,中小型PLC的数据根据数据类型的不同命名进行存储,一般中小型PLC的数据类型包括位(B)、计时器(T)、计数器(C)、整数(N)、浮点数(F)等,DF1协议访问不同类型的数据需要使用对应数据类型的命令。大型PLC利用标签名称来管理和创建数据存储变量,DF1协议无法直接访问标签,需要用PLC编程软件把标签映射成与中小型PLC一样的数据类型名后才能访问。本书第3章重点介绍的就是DF1协议。
3.西门子PLC
西门子PLC串口同样支持RS-232和RS-485串口标准,本书第4章的例子使用的S7-200串口就是RS-485半双工串行通信端口。西门子PLC支持多种通信方案,包括自由口、PPI、MPI、USS、Modbus、Profibus-DP等,西门子PLC的串口一般默认为PPI协议,西门子的PPI协议不对外公开。本书第4章将重点介绍西门子串口的自由口和Modbus协议。在我们使用自由口协议之前,需要先把串口模式调整为自由口模式。由于本书的例程使用的是RS-485串口通信,因此串口通信电缆使用的也是西门子官方提供的标准的RS-485转RS-232通信电缆。
自由口通信需要在PLC端通过自由口指令编程实现,其中串口的基本参数(如波特率、奇偶校验、数据位长度等)需要通过特殊寄存器SMB30或者SMB130来设置,接收和发送的过程也是通过特殊寄存器的标志位置位来实现。自由口通信与欧姆龙的无协议一样,通信内容不受任何协议的制约,可以通过编写PLC程序制定自己需要的通信协议。
串口的Modbus协议有两种——Modbus ASCII和RTU。西门子PLC有Modbus RTU协议指令,因此第4章将主要介绍Modbus RTU协议,其串口设置与自由口一样,使用的是串口的自由口功能。Modbus RTU协议的数据帧结构主要包括站地址、功能码、数据位和CRC校验位。Modbus RTU访问不同的内存数据需要使用不同的功能码,主要分两种,即访问I/O区域功能码和访问寄存器区域功能码。Modbus协议是一种应用非常广泛的通信协议,在第9章介绍西门子以太网通信时就用到了另一种Modbus TCP/IP协议。