可以多点同时调用api,接口是没有规定限制的,接口是根据服务器的资源来调整的,并不是不变的。目前是没有固定的频率限制,正常业务上的调用是没有问题的。
Authorization参数的Bearer与token只能一个空格,多个空格,导致报错。
该接口可以用于获取监控点值,也就是用来获取用户的实时数据的,这个接口是有频率限制的,建议不要超过一秒一次,若超过一定的频率,Ng会屏蔽IP处理。
现接口一次性最多能添加20个监控点的数据,这个是接口的限制,但是可以多次添加。
通过监控点的名称或者id,可以查询到监控点的数据,获取监控点数据,由于这种方式会高频调用,对服务器稳定性较大,对我们服务器产生一定影响时,会屏蔽ip处理,不建议使用,建议使用signalr推送。
盒子在线,直接把配置下发到盒子,盒子不在线,server先记录,待盒子上线后下发(离线任务)。
盒子的任务没完成就开点,只能先等个几秒钟。
调用接口写值改变了其他的监控点的数据是不存在的,第一步检查下平台的监控点是否设置的正确,在平台上手动改值,如果平台上手动改变一个监控点的值,其他的监控点的数值也改变了,说明监控点配置错误,从监控点的数据类型及地址检查,如果其他的监控点的数据没有改变,那么就是客户在提交代码这一块有问题,需要客户自己再检查下代码。
盒子的监控点的属性已经包含了设备控制器的开关,控制监控点就可以控制设备开关,有些点是不能写的,变回来就是表示不能写。主要是看地址类型。根据情况配置。需要寻找专门自动化程序的人员看指令。
客户类型的指令很多,我们只能告诉客户监控点的数据类型,根据实际情况配置就对了。监控点需要寻找具体负责项目的系统集成商或者专门做自动化的程序人员,这种问题需要找这类人来确认。
9999:Body格式为集合[{},{}],可以一次添加多个监控点。10050,新增监控点的devAlias参数需要填写驱动的别名
查看附录一,Guid或UUID在程序中代码生成。postman调试接口可百度生成。
在平台上如果客户是自动定位获取的地址,那么是在接口中可以查询出来的,如果是在平台上客户是手动获取的地址,那么在接口中是获取不了信息的。(调用获取盒子地理位置接口,使用蜂窝网络的盒子支持,2G或4G模块的盒子(需要插上手机卡)上线会上传地理位置,服务器会保存,所以下线的盒子还能显示地理位置,只有再次上线才会更新地理位置。以太网无法获取地理信息。手工定位的信息无法通过接口获取,接口返回424(只是我们记录)。经纬度为百度地图,火星坐标系)。
监控点的分组是不能同名的,,同一个监控点的配置信息都一样,signalr会推送多个结果。
Body格式为集合[{},{}],每次下发会覆盖之前的驱动。
使用接口下载plc驱动,会覆盖原先下发的plc驱动。所以需要先拼接[{},{}]
获取报警总数,目前不提供,可以在报警列表自己统计。
添加报警条目后,在FlexManager登记报警联系人接收报警通知。或者二次开发的程序侦听signalr的报警触发与还原事件接收。
子会在本地存储报警数据,等盒子上线后,会再上报服务器,服务器推送,上线的产生的报警数据也是会推送,分不同的通道推送。
1.就是报警分组下报警点是不可删除的。
2.同盒子下的报警点的名称不可重复。添加监控点或报警点超过限制,会产生什么影响吗?条目超过限制。盒子有于采集队列过多,处理效率低下,也有可能导致盒子重启。
数组长度不要超过20个。
触发报警只会上报一次,报警消息都是由盒子上报的,那条件数据一模一样,需要你们那边过滤,最好多几个字段判断,比如值。
如果对接了实时数据推送,直接加上这个两个报警事件侦听就行了,这两个事件没有前置条件,只要侦听就行。一个小时一次是可以的,但是如果盒子数量非常多的话,你们要控制下,不能并发调用。主要是报警历史记录接口会耗服务器资源。公有云客户数据量多,频繁调用,公有云服务器资源不够的。
报警还原就是,当前值不满足报警条件了。
历史数据存服务器是3个月,数据累计后,查询历史数据不会变慢。
建议客户这边自己搭建服务器,把接收到的实时数据当做历史数据来存储。
想要获取历史记录数据,必须先要进行登记历史条目,再调用获取历史记录数据接口,每个历史条目可以添加16个采集通道,查询历史记录数据是查询历史条目下的通道数据,通道最多16个。
FlexManager平台上显示的N/A是plc未给值的,所以在接口上拿到数据的空的。
获取历史记录数据,方法是GetByChanneIHistoryData其中监控点是hdataItem,通道是其下的channels。查询历史记录是查询历史条目下的通道数据。
单个历史数据点,100条打一包,100包写到flash,写5次,内存100条打一包,可存100包,每条历史数据点可存至少5w条数据,同时,记录历史数据的点可以添加100点,写满后,不会覆盖。
这个缺失的数据就是缺失了,数据找不回来了的。
获取设备上的数据就是获取监控点的数据,而获取控监点的值建议使用signalr实时数据推送事件,实时数据推送事件dMonUpdateValue报文下的status和value,事件触发前提调用开启FBox所有监控点控制接口,上线后首次调用该接口会推送一遍当前所有值,后面是盒子线程扫描PLC数据有变化,上报服务器推送。
连接signalr的时候,需要进行开点操作,有100个盒子需要调用100次开点接口,开点接口是没有限制的,开点成功后会把所有在线盒子的监控点数据推送一遍,现在是推送是一条一条推送,判断fbox的状态通过signalr盒子状态变更事件,推送数据的时候也会推送盒子号。
拔掉网线的话,服务器不会那么快响应,需要等2~3分钟,服务器在2分钟内没有收到盒子的心跳会ping盒子,然后才探测。
Signalr盒子状态变更事件的state(0:未知1:已连接2:超时3:断开)。0,3是离线,1,2是在线,2超时是中间阶段,服务器会ping盒子,有可能没数据。有可能信号很弱。
接口Header下的X-FBox-ClientId参数必须与创建signalr连接的querystring下的X-FBox-ClientId一致。侦听signalr实时数据变更事件前需要先调用开启监控点数据推送接口。盒子每次上线后都需要重新调用,接口调用失败需要重试,否则盒子未订阅,未订阅的盒子内的监控数据无法推送。
盒子数据上报机制是变化推送的,PLC的数据变了就会推送,可以通过设置死值区,省流量模式(下发到盒子控制),这两个参数会减慢推送,变化推送一般不可以敢于频率,只能通过这两个参数调节下。
当前数据与上一次数据的差值>=死值区后会推送。
不需要,用我们的SDK的话,是对所有的在线盒子进行开点,如果是自己二次开发的,只需要把想检测的盒子订阅就行(调用监控点推送控制接口)。
目前signalr推送是变化推送的,MQTT支持定时推送。
是需要再重新开点的。盒子离线后,服务器的订阅信息是会清除的。盒子离线了,在次上线,均需要调用开点,开点只需要在盒子上线后调用一次就行。
在plc状态正常的时候是没有的,如果用gson解析的话,他会给默认值0。
需要找盒子技术支持协助客户,监控点的status非0,需要检查客户端的配置,检查plc与盒子的连接网络问题。
这些值都是实时变化的,我们通过signalr事件触发的,不是定时轮询机制,这个数据我们数据库是不存的,无法抓取。
我们由前端的angular1框架方法接收。Mvvm模式。你们的平台里的需要自己研究下。实现这个工作现在大体有两种方法:1、前端不断地向后台轮询请求数据查询的接口(不管你是用AJAX还是什么)然后将返回的数据重绘在页面上,这以前端页面为主动的方式。2、如果浏览器支持Websocket那么在后台建立一个websocket服务器,与前端页面建立websocket连接,进行从后台到前端的推送,前端接到推送数据后,将数据重绘在页面上。
Signalr连接成功后,盒子在线状态变更事件会触发,根据推送的在线盒子进行开点,第一次订阅会推送一遍当前所有点的数据,之后监控点的数据发生变化才会触发推送。如需要获取某些点的数据,调用(只开启某些监控点推送控制接口)即可。Signalr推送在线的盒子状态,在线盒子删除,新增后状态不推送,离线会推送。
推送的数据是plc数据,FlexManager显示的是经过监控点配置了数值运算后的值,若是要推送经过处理的值,目前是可以使用边缘计算处理下,经过边缘计算处理的数据就会一致。
1.可能是New这个实例的时候,建立连接,后面如果不用了Start未关闭。没有把hubProxy.subscribe的
事件回调unsubscribe掉。而在c#中调用connectstate+=事件的时候,需要-=。2.signalr示例建立了多个,老的对象未销毁。signalr推送的实时数据state为什么收到的数据是Normalstate是个枚举类型,Normal代表是正常状态。
单个程序是可以启动连接多个signalr的,一个账号一个signalr,只要连接signalr时候与数据推送的开点接口带的GUID一致。同一个账号建立多个signalr连接,对每个signalr展开不同的盒子数据推送接口,建议signalr的连接数1~5个左右,最大10个。
盒子的状态是可以推送到客户的服务器上的,signalr推送盒子的状态。我们SDK就相当于一个client连接服务器的时候就带了ip,不需要设置。
程序启动时,signalr连接,会判断盒子是否在线,在线则把所有的监控点的数据推送客户端,之后监控点的数据发生变化就会推送变化的数据。如需要获取某数据,可以根据boxNo进行过滤。分包也是由盒子决定的。
signalr推送数据的数据类型有整型,浮点数,字符串等。
signalr推送的时候返回这个500InternalServerError,有两种情况,调用开点接口的时候signalr未连接,可以先测试下,本地开启signalr,调用开点接口,如果有数据推送说明是signalr连接成功的。还有一种情况就是signalr的连接带的guid和调用开点接口带的guid不一致,也会导致返回500InternalServerError情况。
盒子是线程一直扫描PLC数据,他是一个一个地址读的,只是扫描速度是微妙级别,点数越多,扫描越耗时。这个不一定是一致的,受限于各种条件,盒子读PLC数据有可能这个点读不到下一次扫描才能读到,然后盒子发到服务器,在发到你们程序,这个影响因素太多了。
就是获取所有的的统一写组参数。
把一组监控数据的值统一改写。可以对不同分组下的监控组写值.
注:调用接口给一个盒子下的多个监控点写值,下发到盒子下,而盒子底下是同步写值的,建议每次写值间隔300ms。盒子是同步给plc写值的,接口只是把任务下发,盒子在队列登记任务,底下是一个一个的写,任务太多有可能会导致写值失败。
所有如果有客户统一写值,建议客户:
0,3状态是代表盒子离线状态,1,2,代表是盒子在线断开,超时是一个中间段,服务器会ping盒子,可能是没数据的。
盒子上线之后盒子会上报给服务器,客户盒子没有上过线有可能导致没有获取到固件版本信息。
流程:就是把原盒子的数据重新下发。复制的盒子的接口是不开放的,包括导入,导出盒子的接口也不开放。
替换盒子无需做配置修改,旧的盒子会在账号下删除,需要重新添加后可使用,接口获取配置信息均不变。替换盒子是不开发接口的。
可以一直添加盒子,但是会影响客户端的响应速度,建议5000个。
如果平台上没有显示字地址或者DB地址的话,那么就说明当前寄存器不支持者两个地址。
目前是有两个方法:
下载到盒子上,基本是并行的。
盒子有线程扫描plc设备的数据(毫秒级别),变化就上传服务器,服务器通过signal推送客户端。
一个账号可以一直放盒子,建议5000个,不会影响接口推送,但是会影响客户端的响应速度。每个类型的盒子可以添加的条目是不同的,“基础配置”-->“数据限制”。
有些类型的盒子。可以2G和网线自由切换的,Sim卡与网线同时上网,优先卡,卡无信号切换网线。4G流量卡不能固定ip,服务器是域名访问,ip在维护或者网络类型切换可能会随机变化。
更新固件是不会清除边缘计算,边缘计算是在FBox上的,与服务器无关,不移除脚本里定义的变量plc驱动,均不会影响脚本。
(3):Post推送,接口返回后调下一个接口,数据漏推,查看失败次数,可能接口限流导致关于边缘计算暂无接口,需要在客户端编写,边缘计算与服务器无关,是盒子执行的。不移除脚本里定义的变量PLC驱动,均不会影响脚本,比如更新固件,不会清除脚本,盒子掉线,脚本也能运行
勾选省流量模式之后,数据会按照条目刷新间隔推送数据。即在周期内开始值与结束值不同推送。
数据达到死值区后会推送。即:差值>=死值区,触发推送。
从未上线的盒子显示,盒子上线后会上报这些数据。
(1).C#中,sdkdemo是.netcore工程。
Winform是.netframework工程。Java中,是gradle和maven工程。(2).Signalr需要保持长连接,并且是单例,C#SDK中的Restart()方法只需全局调用一次,Restart()方法内部就是获取token连接signalr。(3)Winform程序引用SDK,.NETFramework版本号要>=4.6.1,java的jdk要>=1.8.1
(4).调用signalrXMLHTTPRequest提示"Acces-Control-Allow-Origin"
在主工程里面引用一次System.NETHTTP4.3.3,在子工程引用Microsoft.AspNet.SignalR.Client2.3
restart()方法是进入sdk的开始,是必要的,restart()开启进入sdk,然后对某个盒子进行操作。Restart当成初始化就行,只要构造后调用一次。
1.java.net.SocketException:Softwarecausedconnectionabort:socketwriteerror
2.Gettokenfailed.javax.net.ssl.SSLHandshakeException:Remotehostclosedconnectionduringhandshake3.Gettokenfailedjavax.net.UnknownhostExection:account.flexem.cn为什么连接signalr的之后就突然断开了呢?先让客户使用我们的SDK的demo试下,我们的SDK内部处理了signalr和重连,不会外报异常。Restart后,返回task。Token的runtocompletion就是成功状态,signalr内部机制会ping服务器,ping会带token
实时数据:需要添加监控点,盒子必须在线(与服务器正常通讯),当PLC(设备)数据发生变化,盒子往服务器上报,通过siganlr推送,实时数据在服务器中不存储。
1.通过signalr推送的实时数据,你们存,但是盒子掉线后会丢失数据。
2.定时来我们服务器获取历史数据,你们存,盒子离线,历史数据离线的缓存也是有限的,条目越多存储的
3.通过调用获取监控点值接口获取实时数据。(不建议使用)。
4.通过MQTT协议推送数据。
Fbox与服务器之前连接采用DigestAuthentication身份验证方式,通讯过程数据加密,有完整性检验,确保数据安全。
api接口请求正确一般返回200,500是服务器的错误,我们是把一些常见的错误就返回400,然后把code放在header里了。如果调用接口参数正确还是调用失败,建议用fiddler检查下请求的报文。一般盒子离线调用开点,接口返回200,传入盒子不存在的返回400,signalr未连接接口返回500或421.
初始化参数或者服务器地址有误,需要客户自己检查下关于写接口地址的地方。
1.私有云+sdk方式2.MQTT方案3.私有云+MQTT
不需要设置,我们sdk相当于一个client连服务器的时候就带ip来了。
非付费用户账号每天10条短信或者10条语音。付费用户可以按照每条短信0.1元,语音每条0.2元计算,短信充值找销售或者商务。
一般是服务器繁忙处理不过来,客户提供url给到SDK的技术支持。