采用Web数据接口:
跨广域网
客户端操作原理:
与session类似,当在主服务器上登录之后,得到对应的SessionID(与我们发送请求之后,会为该请求创建一个唯一的SessionID)
以后我们的每次操作都会带上这个SessionID,就好比我们的身份证一样
SID 有效期:
同样,与请求的sessionID一样,都有有效期,这里的有效期是,
- 10分钟之内,至少有一次数据读写操作,这个SID就会一直有效
- 10分钟之内,无任何操作,该SID会被删除,此时进行读写错误就会返回8
- 同时又为了保证可用性,防止因为SID过多而占用内存,所以系统给每个GRM设备分配的Session数目限制为100个。
- 10分钟之内,登陆的数量超过100个,将出现错误15,此时也不会随机删除任何一个,否则会对该用户造成不同程度的损失,所以这里就只能等SID过期自动删除
看到这里可以相信大家可以基本了解SID的特点
另外我们基于以上SID过期自动删除的特点,可以得到以下使用技巧 - 为了防止读取GRM数据时间间隔比较长而导致SID失效(读取间隔大于1分钟),建议在每次读取数据之前都登录一次,这样就可以防止出错8,但是要特别注意,除非是时间间隔长,否则每次都登录,会造成15错误
简称:SID 一个64位的随机数,
变量名:不区分大小写
GRM主服务器固定地址,http://www.yunplc.com:7080
注意:GRM设备的读取操作,会被数据服务器缓冲
但是写操作不会被数据服务器缓冲,若不同客户端对同一个GRM变量进行写操作,那么前面的就会被后面的覆盖
登录GRM服务器:
推荐登录方法:
使用JS代码通过CORS功能直接连接到云服务器来获取数据,无需通过第三方服务器进行转发!
(重点提示: CORS直接登录功能对winXP自带的IE6不支持,需要升级到IE8以上,其他所有非IE浏览器都支持,若一定要兼容IE6,那么就只能由客户的网站服务器来转发数据,通过第三方)
客户端操作
:对所有的操作命令都是HTTP的POST动作,在POST请求里面的必须部分只需要Host和Content_length,若需要读取大量数据,那么我们可以加上一个字段:Accept-Encoding:gzip选项,
作用:启动Http的压缩功能
- 1登录:
作用:直接登录到主服务器,得到SID和该设备所属的数据服务器地址
请求内容中的GRM=xxxxxx就是GRM设备的序号,PASS就是GRM设备的密码,行与行之间的分隔符是\r\n
返回三行:
成功:
OK
ADDR:ip:port
SID:sessionID
出错:
ERROR
- 2读取变量
登录成功之后,就可以来读取对应的变量了
(/exdata?SID=xxxxxx&OP=w)
和我们在Mysql数据库中读取数据类似
既可以读取一个变量,也可以读取所有的数据
发送目标:由我们登录所得到的数据
请求内容:
变量个数\r\n
变量名1\r\n
变量名2\r\n
成功:
OK
2
变量值1
#NAN#(若名称错误,返回#error#错误码,无值#NAN#)
- 3重复上次读
该命令的url和返回内容都与【读变量】命令完全相同,唯一区别就是请求内容为空白,‘
作用:由于GRM服务器读命令使用了缓存,这样是直接冲缓存中中的请求内容,可以节约客户端流量
解析:重复上次读的操作是重复上一次有内容的操作,
比如:我现在执行了读取ph这个变量的读取操作,那么第二次,我将post请求内容置为空,那么这次执行的其实是我们第一次读取ph这个操作,以后执行多少次重复读都是重复的这个操作。
- 4写变量
与请求的发送目标相同,都是我们登陆时候,返回的数据
(/exdata?SID=xxxxxx&OP=w)
单个写命令可以写入的变量数目没有限制,但是对连接在GRM模块串口上的PLC或者IO设备来说,通常每秒钟之只能写入不超过10个变量,若发出很多的写命令,那么会很久才能执行完成/
以上就是简单的介绍,之所以写这篇,是因为现在公司涉及到了这个业务,今天在后端编写了web服务,成功登录到了该GRM云服务器且成功读取了对应的变量值,我会在下一篇将服务贴出来,供大家参考!