# 三菱PLC内置WEB功能读写API **Repository Path**: czdsa/msPLC ## Basic Information - **Project Name**: 三菱PLC内置WEB功能读写API - **Description**: 读了下三菱PLC内置WEB服务器自定义WEB功能的文档,把内置读写接口总结了下 - **Primary Language**: JavaScript - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 8 - **Forks**: 1 - **Created**: 2021-02-21 - **Last Updated**: 2024-07-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README **具体用法见官方PDF文档跟MS_PLC.js 文件** Webサーバ機能 MELSEC iQ-Fシリーズ ## 三菱PLC WEB 功能使用说明 ## 1 需要FX5U以上支持WEB功能版本的PLC,一个SD存储卡。 2 GX Works3 设定PLC IP地址,开启WEB功能,设置登录账户,建议用默认80端口,或者网页里在IP后面再加上 :端口号。 3 把仓库WWW文件复制到SD卡里,然后把卡插入PLC卡槽。 4 测试之后,自己修改里面的网页代码,做自己的页面。 5 WEB服务器的网页读写PLC原理 => 页面用异步请求,即XHR给PLC的内置cgi接口POST发消息,传输的PLC数值用的是16进制字符串。 ![Picture](./Picture/测试用的PLC程序.png) ![Picture](./Picture/PLC相关设置.png) ![Picture](./Picture/内置WEB的用户设置.png) ![Picture](./Picture/PLC的内置WEB登录页面.png) ![Picture](./Picture/PLC的内置WEB主页面.png) ![Picture](./Picture/软元件状态页面.png) ![Picture](./Picture/软元件状态页面2.png) ![Picture](./Picture/用户网页点进去.png) ![Picture](./Picture/1.png) ![Picture](./Picture/2.png) ![Picture](./Picture/3.png) ![Picture](./Picture/4.png) ![Picture](./Picture/5.png) ![Picture](./Picture/6.png) ![Picture](./Picture/7.png) ![Picture](./Picture/自定义页面代码.png) ![Picture](./Picture/通讯获取PLC值的方法.png) ![Picture](./Picture/用C#通讯库的测试结果.png) ***6***读写PLC变量的方法 **读**:RdDevBlk.cgi (读取一个连续区域地址 req.param NUM: 20 DEV: D10) "/cgi/RdDevRnd.cgi"(读取查询字符串实例: NUM=3&DEV1=D10&TYP1=W&DEV2=D11&TYP2=D&DEV3=M0&TYP3=B ,可读取单个或多个,NUM= 读取点数个数 DEV1=D10&TYP1=W 设备1地址和数据类型, & 符号拼接) **写**:/cgi/WrDev.cgi(单个地址写入 请求的字符串req.param 类似 NUM=1&DEV1=D11&TYP1=D&DATA1=a ) **其他** cgi举例:/cgi/GetRndNum.cgi 获取一个随机数, /cgi/login.cgi、/cgi/logout.cgi,用户登录登出, /cgi/GetErrInf.cgi(获取错误信息), /GetLedInf.cgi(PLC LED信息),/GetCpuDiagInf(CPU诊断信息),/GetAccLog.cgi(访问操作日志),重点参考MS_PLC.js里面相应部分,这个代码是官方的页面里面的JS代码,编辑器在里面搜索XMLHttpRequest,有对应返回内容解析。 c = new XMLHttpRequest(); c.open("POST", "/cgi/GetEventLog.cgi", !0); (accXhr = new XMLHttpRequest()), accXhr.open("POST", "/cgi/GetAccLog.cgi", !0), accXhr = new XMLHttpRequest(), accXhr.open("POST", "/cgi/GetAccLog.cgi", !0), p = new XMLHttpRequest(); p.open("POST", "/cgi/RdDevRnd.cgi", !0); a = new XMLHttpRequest(); a.open("POST", "/cgi/RdDevBlk.cgi", !0); writeXhr = new XMLHttpRequest(), writeXhr.open("POST", "/cgi/WrDev.cgi", !0), a = new XMLHttpRequest(); a.open("POST", "/cgi/GetErrInf.cgi", !0); LOGIN_LOCATION = "/cgi/login.cgi", LOGOUT_LOCATION = "/cgi/logout.cgi", GET_RANDOM_NUM = "/cgi/GetRndNum.cgi", unitinfXhr = new XMLHttpRequest(), unitinfXhr.open("POST", "/cgi/GetUnitInf.cgi", !0), a = new XMLHttpRequest(); a.open("POST", "/cgi/GetClockData.cgi", !0); var a = new XMLHttpRequest(); a.open("POST", "/cgi/GetUnitInf.cgi", !0); a = new XMLHttpRequest(); a.open("POST", "/cgi/GetLedInf.cgi", !0); ***7*** 其实自己用Chrome浏览器看下WEB页面与PLC的通讯请求,自然就知道规则。 ***8*** 这个WWW文件里面我个人放了个VUE跟ELEMENT UI,由于不支持ICON FONT,图标/图标建议用SVG,里面有部分其他SVG学习测试代码。。详见(https://electrobit.ee/FX5U-user-web-demo/) ***9***解释下读写 X/Y(即三菱PLC的输入输出区域)需要注意的地方 PLC编程软件十进制(8个能用),PLC内部16进制(只针对于我测试的FX5UC,应该还有PLC内部是8进制,具体PLC型号内部采用什么规格,需要自己找文档核实,或者实际测试下) 下面的序列,左边是PLC程序内的地址编号规则,右边是通讯时候的PLC实际内存访问地址 即要获取(FX5UC)程序里面Y10现在的值,页面通讯读取的是Y8这个地址,类推可知 要获取(FX5UC)程序里面Y12现在的值,页面通讯读取的是Ya(YA,接口对大小写不敏感)这个地址 要获取(FX5UC)程序里面Y22现在的值,页面通讯读取的是Y12(YA,接口对大小写不敏感)这个地址 要获取(FX5UC)程序里面X32现在的值,页面通讯读取的是X1a(YA,接口对大小写不敏感)这个地址 0 =>0 1 =>1 2 =>2 3 =>3 4 =>4 5 =>5 6 =>6 7 =>7 10 =>8 11 =>9 12 =>a 13 =>b 14 =>c 15 =>d 16 =>e 17 =>f 20 =>10 21 =>11 22 =>12 23 =>13 24 =>14 25 =>15 26 =>16 27 =>17 30 =>18 31 =>19 32 =>1a 33 =>1b 34 =>1c 35 =>1d 36 =>1e 37 =>1f 😳 另外PLC 的FTP功能,初始登录跟密码均为FX5CPU,可以从SD卡读取CSV等log文件,日后有需要再测试。 请谨慎测试后使用,今天测试发现写入Y30位1结果Y60点置位,而且查看日志也是写入Y30点位。。。 三菱的软件跟实际PLC的地址之间有必要转换并测试。 ***!请谨慎测试后用于实际工程中***