欢迎来到巨控湖南分公司|长沙聚控电子科技有限公司!

常见问题
联系我们
·地址:长沙星沙镇天华南路银河大厦
·电话/微信:15307483969 王工
·邮箱:54150175@qq.com

巨控GRM530的http接口协议【巨控湖南办】

巨控GRM云服务器提供多种不同的接口以访问GRM设备中的数据,程序员可以使用https协议访问巨控云服务器,实现数据二次开发调用。
巨控GRM530的http接口协议
详细可以咨询巨控王工,电话/微信:15307483969
接口 支持的客户端 优点 缺点 是否默认开通
内置网页系统 任何浏览器,包括PC浏览器,手机浏览器等等。 无需任何编程,所有平台包括手机均可用。
可直接看到变量表格,也可以修改变量。
页面布局是固定的,不能随意排版,也不支持动画效果。
Web数据接口 任何支持HTTP协议的设备,可以是PC,服务器,手机或者平板电脑等。包括网页中的JS脚本。 可以跨广域网,跨操作系统来访问数据。客户端可以是任何操作系统,包括手机系统。 客户必须自行编写程序来执行HTTP POST动作。
得到数据后,客户必须自行编写程序来显示数据。
OPC Server 所有的PC组态软件,包括西门子WinCC,组态王,InTouch等等。
也支持客户自编程序(例如C++,C#,VB等等)
对组态软件无需任何编程。所有的组态软件均支持OPC标准协议。 只能用于Windows平台,并且OPC Server不能动态的添加设备(受组态软件和OPC协议限制)

本文档描述的是巨控GRM530的http接口协议。另外两种接口(内置网页系统和OPC Server)在本文档中不涉及。
Web数据接口对于每个GRM设备默认是不开通的,需要开通该功能的请与我们联系。


巨控GRM530的http接口协议的使用基本流程
1:由模块使用者先配置好巨控模块,使之正常运行。
2:开发者可以先用模块的设备序号密码登录www.yunplc.com。可以看到模块里面的变量。
     在这个网页上能看到的变量,能修改的变量, WEB接口用同样的密码都能读写。
3:开发者根据WEB接口文档,来读写变量即可自行开发网页或者APP, 实现对设备的监试,报警,控制。

1.客户端的操作原理

客户端需要2步骤动作:第一步是在主服务器上登录,得到一个代表该设备的Session ID(以后简称SID),以及该设备对应的数据服务器的地址。
第二步是在数据服务器上用SID来做读写操作。SID是一个64位的随机数,它是客户端能够访问这个GRM设备的唯一凭据。客户端的IP地址可能随
时变化,只要拥有正确的SID就可以跟设备通讯。在不同的设备之间传递SID也是可以的。例如,客户自己的服务器到GRM服务器来登录,得到SID
,然后把SID传给手机APP程序,这样手机APP程序就可以在不知道GRM设备密码的情况下读写数据了。
网络上所有的变量都来自于GRM模块,在网络上只能使用GRM模块中已配置的变量,网络读写权限也是在GRM模块里面配置。如果配置GRM模块
和编写客户端程序的不是同一个人,请自行协调有关变量名的问题。变量名里面的英文是不区分大小写的。如果您从内置网页系统里面查看变量名,
要注意系统变量名的替换(参见第三章第1节)。当然,客户端也可以用E命令来枚举GRM设备中的变量名和变量的各种属性。
因为所有变量都完全按名字访问,建议在编写客户端程序之前预先确定所有需要在网络上操作的变量的名字。如果客户端程序已经写好,而GRM模
块又被重新配置,改变了变量名,客户端程序就可能无法正确读写了!除了变量名之外,变量的其它属性可以在GRM模块里面随便修改,对网络上
的读写操作完全没有影响,包括改变这个变量在PLC中的地址,改变数据类型,改变PLC通讯参数等等。
每个Session只要每隔10分钟有至少1次数据读或写操作,这个SID就会一直有效。而如果在连续10分钟内没有发生任何数据读写操作,这个SID就自
动被服务器删除。如果读写操作返回了错误8,表示服务器认为这个SID是无效的,请重新登录一次,不需要管是什么原因。服务器为了防止客户端程
序忘了处理错误8,可能在1-2天之内随机的踢掉客户端(曾经有客户端程序忘了处理SID失效,结果上线后一个多月才碰上服务器维护重启,导致SID
无效,结果他的程序就出错了。后来我们增加了这个功能)。
因为服务器上的每个Session需要占用一定的系统资源,系统给每个GRM设备分配的Session数目限制为100个。如果您在10分钟之内登录超过100次,
将得到错误15,您只能等到某个旧的SID在10分钟后被删掉,然后才能登录上。客户对于不想使用的SID没有办法明确的删除,只能等10分钟超时自动删掉。
如果您读取GRM设备数据的间隔比较长(1分钟或者更长),建议可以在每次读取数据之前登录一次,这样您的程序内部不需要记录任何状态。但如果
数据读取间隔小于1分钟,推荐您只登录一次然后保存着登录得到的SID,下次就不用再登录了。
我们的主服务器是固定的地址http://www.yunplc.com:7080(如果客户自行搭建主服务器,请向服务器提供商索取地址),数据服务器有多个,具体某个
GRM设备属于哪个数据服务器由登录命令返回。如果有多个客户端连接到同一个GRM设备,这些客户端会得到同样的数据服务器。
如果没有任何客户端访问,GRM设备端不会有数据流量,只有心跳数据包以便维持GPRS连接。此时一个月只消耗几兆的流量。只要有任何客户端连接到
云服务器,不论是服务器支持的三种接口(内置网页系统,Web数据接口,OPC Server)中的哪一种,数据服务器都会自动启动到GRM设备的读操作。所
有客户端的读都被数据服务器缓冲。不论有多少个客户端,到GRM设备的读流量只有1份。但是写操作是不缓冲的,如果多个客户端从不同的入口都来写同
一个GRM设备变量,后发出的写会覆盖之前的写的结果,导致只有最后一个写有效。客户需要自行避免其中的冲突问题。

2.客户端登录的推荐作法

我们云服务器已支持标准的CORS跨域功能。客户端如果是网页,推荐使用网页上的JS代码通过CORS功能直接连到我们云服务器来获取数据,无需客户端
自己的网页服务器从我们云服务器读数据再转发!(提示:CORS功能对WinXP自带的IE6不可用!需要升级到IE8以上!其它所有非IE的浏览器,包括安卓
和iPhone的浏览器均可正常使用。如果一定要兼容IE6,只能继续由客户的网站服务器来转发数据)。
如果客户自己做网站来从我们服务器获取数据,请特别注意:不要在每次Web客户请求页面的时候登录!这样不仅影响系统性能,而且是错误的!因为每个
GRM设备同时只能登录100个SID。如果10分钟内有若干个Web客户累计刷新了100次页面,那么这个设备的SID就用光了,之后您的网站就无法再登录了!
如果负载量不大,简单的做法是:在Web客户登录您的网站的时候来登录,然后保存SID供以后的数据访问来使用。也就是您的每个Web客户占用一个我们
服务器的SID。因为每个设备只能同时登录100个SID,这样就限制了您的网站对每个设备只能同时连接100个Web客户。
对于手机程序(安卓或IOS),通常也使用这种方法。这样就不需要额外的服务器了,每个手机程序都是直接连接到我们数据服务器的。一般来说每个设备同
时上线100个手机已经足够用了。如果您要让每个设备同时上线更多的手机,仍然得用下面的做法,通过自己的一个服务器来缓存数据。
对于负载量很大的网站,因为一个GRM设备上只有一份数据,在每个Web客户请求页面的时候都从我们数据服务器重复读取是没有意义的,我们推荐的最佳做
是:用客户网站的Web服务器内部做一个数据缓存。也就是说,在有Web用户登录到客户网站的时候,客户的Web服务器到我们服务器登录一次(对每个设
备只需要登录这一次!),然后用单独的一个线程或者定时器,定时读取该设备的全部变量,缓存起来(读全部数据只有第一次需要带所有变量名,以后都可以
[重复上次读]命令)。Web客户的所有网页请求都从Web服务器的缓存里面直接获取数据,无需任何等待。网页如果要写入变量,也是由网页首先提交到Web
服务器的缓存里面(以保证其他的用户的页面能立刻看到),然后再排队,用Web服务器自己的SID写到我们数据服务器。(后面3.4和3.6节有相应的简单做法
和最佳做法的流程)
注意,每个SID只有一个读命令缓存。如果客户A用一个SID发出某种方式的读,然后就开始使用 [重复上次读]命令以节约流量,而客户B也用这个SID发出了另一
个不同的读命令,那么客户A的“重复上次读”就会读到错误的结果(变成了重复B的读命令结果)。因此不要在不同的地方复用同一个SID。

客户端操作命令说明

客户端所有的操作命令都是HTTP的POST动作。POST请求里面的必备部分只需要HostContent-Length,如果要读取大量数据,强烈推荐在HTTP请求中带上
Accept-Encoding:gzip选项,以便启用HTTP的gzip压缩功能(通常可以把服务器发回的数据量压缩到50%以下)。其他的HTTP头选项均不被服务器识别,也
无意义。
POST请求里面的Content-Type 实际被服务器强制当作 ”text/plain;charset=UTF-8”,也就是无格式的UTF-8纯文本。客户端指定其他任何Content-Type均无效。
因为HTTP协议规定POST默认的Content-Type是”application/x-www-form-urlencoded”,请一定要记得修改这个!否则服务器会返回HTTP错误码406。
POST的数据区永远是UTF8编码的(如果有中文,请特别注意编码!)。数据区如果有多行,行与行之间的分隔符是回车换行\r\n(也就是十六进制的0x0D和0x0A,
或者十进制的13和10)。

举列
1.[登录]

该命令用于客户端到主服务器登录,以得到SID和该设备所属的数据服务器地址。
发送目标 主服务器(http://www.yunplc.com:7080)       只是登陆服务器地址,不用于数据操作
HTTP动作 POST
URL /exlog
请求内容 GRM=xxxxxx
PASS=xxxxxx
成功返回 OK
ADDR=xxxx:xx            这里是后面操作命令要用的数据服务器地址!
SID=xxxxxx
出错返回 ERROR
错误码
错误描述
请求内容中的GRM=xxxxxx就是GRM设备的序号(11位数字),PASS=xxxxxx就是GRM设备的密码。行与行之间的分隔符是回车换行\r\n
返回值有3行,第一行OK或者ERROR表示成功还是出错,如果出错会有错误码和描述。
ADDR=xxxx:xx,冒号前面的部分是该设备所属的数据服务器的地址,后面的部分是数据服务器的端口。