Skip to main content

三菱PLC

本驱动使用三菱Melsec协议(MC协议)从三菱PLC读取数据,仅支持以太网方式。三菱PLC都可以通过此协议访问,但是需要对PLC进行设置。

配置说明

windows环境

如果在windows上运行驱动,需要安装nodejs运行环境和npm工具。

点击链接,下载windows安装包,按照说明安装,安装过程可以参考此博客

【非必须】有的时候由于网络原因,需要使用淘宝镜像加快下载依赖的速度,有以下两种方案。

  • 执行npm命令时加上--registry=https://registry.npm.taobao.org
  • 安装cnpm:具体操作参看此博客第三部分。

PLC通信设置

使用MC协议与PLC通信需要知道PLC的IP和端口,且这个端口的通信方式需要是MC协议。如果不了解这些设置,需要用GX works2软件进行设置。

  1. 安装GX works2软件(已测试过1.591R版本,可用)。
  2. 将PLC与安装GX works2软件的电脑连接,PLC端最好使用串口,PC端需要从设备管理器中确认哪个串口是连通的。
  3. 打开GX works2软件,新建工程,选择正确的系列和机型。

  1. 连接目标,选择当前连接目标(或新建目标并设置为默认)。设置连接,双击计算机侧I/F,设置COM口。测试连接,可以连接后点击确定。

  1. 点击顶端导航栏,在线,plc读取,选择参数(parameter),点击执行,将当前PLC设置复制到本地。如果本地有设置会提示是否要覆盖,选择是。有可能提示有当前软件无法处理的参数,有可能是GX works2版本不对,可以先读取下来看看。(下图仅供参考,实际上只用选择参数即可)。

  1. 双击左侧导航栏参数下的plc参数,点击以太网端口设置。如果没有此标签说明GX works2版本不对,重试后如果还是这样则需要重新安装另一个版本的GX works2。

  1. 在以太网端口设置界面,将IP修改为安装平台的机器可以访问的地址。通信数据代码设置与PLC型号有关,尽量建议选择二进制代码通信。

  1. 点击打开设置,配置通信端口。一个PLC通信通道支持多个连接,选择一个,协议设置为TCP,打开方式设置为MC协议,设置本站端口号(1025~5548或5560~65534)。设置完后保存。

    测试时可以打开一个数据监视端口,然后通过浏览器访问即可看到PLC的状态。

  1. 记录设置的IP、端口和通信数据代码设置。
  2. 点击顶端导航栏,在线,plc写入,选择参数(parameter),点击执行,将本地PLC设置上传到PLC。
  3. 将PLC断电重启,ping之前设置的IP,如果可以ping通基本算设置完成。

使用说明

设备IP和端口

设备IP与以太网端口设置界面中的一致,设置前确保在运行驱动的设备上可以ping通。

端口与以太网端口-打开设置界面中的设置一致(协议=TCP,打开方式=MC协议)。

代码设置

一般PLC支持ASCII码和二进制码两种代码设置,根据以太网端口设置界面的通信数据代码设置选择其中一种。

可能出现PLC不支持ASCII码通信或者二进制码通信的情况,请以手册为准。

PLC类型与帧类型

PLC类型与帧类型两个参数的选择以设备的用户手册或者对应以太网的用户手册为准,下表仅供参考。PLC可能支持多种帧类型。

PLC类型PLC型号
A1Efx3u,A系列
QnA3EQnA系列
Q
L
R

访问路径设置

访问路径是MC协议报文的一部分,用以太网通信时有4个参数。对于1E帧,只能够设置可编程控制器编号,而另外两种帧可以设置四个参数。在配置界面输入的是10进制数。

如果运行驱动的计算机与访问对象直接连接时,不用做任何设置。

名称说明适用于
网络编号指定访问目标的网络编号3E/4E
可编程控制器编号指定访问目标的网络模块的站号全部帧(但实际上用1E帧时驱动不会读这个参数)
请求目标模块I/O编号访问多点连接站的情况下,指定多点连接源模块的起始输入输出编号
指定多CPU系统、冗余系统的CPU模块3E/4E
请求目标模块站号访问多点连接站的情况下,指定访问目标模块的站号3E/4E

具体意义参考《MELSEC通信协议参考手册》第二部分6.2节。

点数倍率

仅限于1E帧。发现数据点较少时驱动可以读取但是多了却读取不了时,考虑修改这个参数。

MC协议中,对软元件尽心操作时对一次通信中可以处理的点数(即软元件数量)做出了限制。根据MC协议,批量读取字单位时,读取位字软元件和位软元件的数量限制分别是128字(2048点)和256点。但是对于部分型号,尽管可以使用MC协议通信,这个点数限制往往比MC协议中规定的小(比如使用FX3U-ENET-ADP时,批量读取字单位时,读取位字软元件和位软元件的数量限制分别是32字(256点)和64点)。

这个参数仅限于1E帧的数据读取,其意义为MC协议中的点数限制与实际设备的点数限制的比值。比如使用FX3U-ENET-ADP时,这个参数应该设置为4。

当驱动可以正常读取数据时,这个参数不需要调整。增加这个参数会使得读取数据时向PLC发送的请求数量增加,降低读取效率。

《MELSEC协议通信参考手册》附录5

《FX3U-ENET-ADP中文手册》7.4节

软元件

软元件是PLC存储数据的基本单元,不同类型的软元件除了名称和符号不同外,单元的长度和表记也可能不同。

《MELSEC协议通信参考手册》8.1节 软元件代码一览

image-20210603204859198.png 常见的X/Y/M/S软元件都是位类型的(1bit),只能读写1/0(true/false),而D软元件是字类型的,包含16个bit。对于字类型和双字类型的软元件,可以整体的读(用16个bit表示的数据)、组合起来读(相邻的两个软元件表示一个32bit的数据,比如INT32)以及单独读取某个bit(返回true或false)。

表记会影响配置数据点时的软元件编号。

软元件名称

配置数据点和指令时都需要写软元件名称,格式略有不同,注意字母都要大写

软元件名称由四部分组成,其中首字母和编号是必须的:

  • 首字母:软元件类型,必须为大写。常用的有D,Y,M等。PLC支持的软元件类型与PLC型号有关。
  • 数据类型:(仅读取时有效)将数据点直接转化成特定格式的数据,可缺省。可选值:REAL|FLOAT|DWORD|DINT|WORD|UINT|INT|STR|CHAR|BYTE|BIT。
  • 编号:软元件编号,从0开始,其上限与软元件的类型与PLC型号有关。如果软元件的表记是16进制的(比如X,Y),则编号需要写为16进制的(比如XA)。
  • 位数(非必须):部分软元件既支持字读写也支持位读取,进行位读写时,在编号后加上.和位数(如D0.2)。

数据读写

写入示例

用指令修改软元件的值时,软元件名称中不能包含数据类型。

对于类型是位的软元件,只能写入1或0。

对于类型是字的软元件,既可以写入一个整数(改变多个bit的值),也可以单独写入一个bit。软元件名称中不包含位数时,写入的是带符号的INT16,所以范围是从-32768至32767,F位(首位)为符号,1为负0为正;包含位数时,写入的是1或0。

  • S0写入1:S0所对应的bit为1。
  • D2写入7:D2的前13个bit是0,后3个bit是1(7=二进制111)。
  • D3写入0:D3的所有位都是0。
  • D3.0写入1:D3的0位是1,其余位是0。
  • D11写入-32768:D11的F位是1,其余位是0。

读取示例

下文中软元件的值与写入示例中写入的值相同。未提及的软元件没有写入过数值,即所有位都是0。 读取一个bit时,返回的是1或者0。

  • S0:读取写入示例中的S0,返回1。
  • D2.0:读取写入示例中的D10的第0位(最后一个bit),返回1。
  • D2.3:读取写入示例中的D10的第3位,返回0。
  • D3.0:读取写入示例中的D10的第0位,返回1。
  • D3.1:读取写入示例中的D10的第1位,返回0。

读取位类型的软元件时,不同数据类型返回的结果不同:

  • D11:返回-32768。
  • DINT11:因为D软元件的缺省类型是INT,返回-32768。
  • DUINT11或DWORD11:返回二进制数1000 0000 0000 0000对应的无符号整数,即32768。

有的数据类型是用32个bit表示的,可以将两个软元的32个bit一起读出来,此时软元件的编号的意义是起始软元件的编号:

  • DDINT2或DDWORD2:实际上使用D2和D3的32个bit组合成,返回65543(二进制数0000 0000 0000 0001 0000 0000 0000 0111),说明是从D3的F位开始读,以D2的0位为止。
  • DREAL20:将D20和D21的32个bit读取为小数,顺序为D21的F为至0位,D20的F位至0位。并不是任意一个32位二进制数都能对应一个小数(在线互转)。
    • 选定一个小数:-120.2,以二进制表示为1100 0010 1111 0110 0110 0110 0110 0110。
    • 将前16位和后16位分别写入D21和D20,对应的带符号INT16分别为-15626和26214。
    • 读取DREAL20,返回-123.19999694824219。
    • 将26214写入D22,读取DREAL21,返回的是2.7243517139461285e+23,这是由于此时是从D22开始读的。

由于ASCII码对应一个8位二进制数,一个位类型的软元件可以储存两个ASCII码,因此我们可以将软元件读取位字符串。将D0和D1分别写入为20299=79 256 + 75和10281=40 256 + 41,其中79,75,40,41分别是"O","K","(",")"的ASCII码。

  • DSTR0:返回的是"K"(说明只需要读前8个bit)。
  • DSTR1:返回的是")"(说明读的是D1的前8个bit)。

参考

《MELSEC通信协议参考手册》

《FX3U -ENET-ADP用户手册》

《FX 3S ·FX 3G ·FX 3GC ·FX 3U ·FX 3UC 系列微型可编程控制器编程手册》

在线二进制-浮点数转换

ASCII码对照表