JOYZL SCADA Server
通信类接口
| 模块 | 接口 | 用途 | 权限 |
|---|---|---|---|
| Device | AlarmAmount | 获取报警数量 | SYATEM |
| Device | AlarmSelect | 获取多个报警 | SYATEM |
| Device | AlarmClear | 清除所有报警 | ADMINISTRATOR |
| Device | FaultAmount | 获取故障数量 | SYATEM |
| Device | FaultSelect | 获取多个故障 | SYATEM |
| Device | FaultClear | 清除所有故障 | ADMINISTRATOR |
| Device | DeviceAmount | 获取设备数量 | SYATEM |
| Device | DeviceSelect | 获取多个设备 | SYATEM |
| Device | DeviceState | 获取设备状态 | SYATEM |
| Driver | DriverSelect | 获取可用通信驱动 | ADMINISTRATOR |
| Device | DeviceCreate | 新建设备 | ADMINISTRATOR |
| Device | DeviceUpdate | 修改设备 | ADMINISTRATOR |
| Device | DeviceEnable | 启用或禁用设备 | ADMINISTRATOR |
| Device | DeviceMove | 移动设备 | ADMINISTRATOR |
| Device | DeviceDelete | 删除设备 | ADMINISTRATOR |
| Device | AttributeAmount | 获取属性数量 | SYATEM |
| Device | AttributeSelect | 获取多个属性 | SYATEM |
| Device | ValueSelect | 获取时序数据 | SYATEM |
| Device | AttributeRead | 读取属性值或遥测 | SYATEM |
| Device | AttributeWrite | 设置属性值或遥控 | SYATEM |
| Driver | DriverAttributes | 获取驱动预定义属性 | ADMINISTRATOR |
| Device | AttributeCreate | 新建属性 | ADMINISTRATOR |
| Device | AttributeUnique | 校验属性唯一性 | SYATEM |
| Device | AttributeUpdate | 修改属性 | ADMINISTRATOR |
| Device | AttributeMove | 移动属性 | ADMINISTRATOR |
| Device | AttributeDelete | 删除属性 | ADMINISTRATOR |
| Device | TriggerAmount | 获取触发器数量 | SYATEM |
| Device | TriggerSelect | 获取多个触发器 | SYATEM |
| Device | TriggerState | 获取触发器状态 | SYATEM |
| Device | TriggerCreate | 新建触发器 | ADMINISTRATOR |
| Device | TriggerUpdate | 修改触发器 | ADMINISTRATOR |
| Device | TriggerEnable | 启用或禁用触发器 | ADMINISTRATOR |
| Device | TriggerMove | 移动触发器 | ADMINISTRATOR |
| Device | TriggerDelete | 删除触发器 | ADMINISTRATOR |
| Device | TimerAmount | 获取定时器数量 | SYATEM |
| Device | TimerSelect | 获取多个定时器 | SYATEM |
| Device | TimerState | 获取定时器状态 | SYATEM |
| Device | TimerCreate | 新建定时器 | ADMINISTRATOR |
| Device | TimerUpdate | 修改定时器 | ADMINISTRATOR |
| Device | TimerEnable | 启用或禁用定时器 | ADMINISTRATOR |
| Device | TimerMove | 移动定时器 | ADMINISTRATOR |
| Device | TimerDelete | 删除定时器 | ADMINISTRATOR |
| Device | ServoAmount | 获取边缘端数量 | SYATEM |
| Device | ServoSelect | 获取多个边缘端 | SYATEM |
| Device | ServoState | 获取边缘端状态 | SYATEM |
| Device | ServoCreate | 新建边缘端 | ADMINISTRATOR |
| Device | ServoUpdate | 修改边缘端 | ADMINISTRATOR |
| Device | ServoEnable | 启用或禁用边缘端 | ADMINISTRATOR |
| Device | ServoReload | 重载边缘端 | ADMINISTRATOR |
| Device | ServoRestart | 重启边缘端 | ADMINISTRATOR |
| Device | ServoMove | 移动边缘端 | ADMINISTRATOR |
| Device | ServoDelete | 删除边缘端 | ADMINISTRATOR |
| Device | ServoLogin | 边缘端登录 | NONE |
| Device | AttributeNotice | 通知属性值 | SERVO |
报警
报警必须由触发器触发,且不会持久化保存。 如果服务端(JOYZL SCADA Server)程序重启,所有已触发的报警将被丢弃, 如果报警条件依旧满足将在触发器执行时重新激活。
报警等级(AlarmType)
- NONE(0) 无;
- NOTICE(1) 一级报警,提醒;
- WARNING(2) 二级报警,警告;
- DANGER(3) 三级报警,严重。
获取报警数量(AlarmAmount)
获取当前激活的报警数量。 缺省所有参数时,返回当前用户可见范围内的所有报警数量。 指定区域标识(ZoneId)参数时,仅返回指定区域的报警数量。 指定设备标识(DeviceId)参数时,仅返回指定设备的报警数量。 指定属性标识(AttributeId)参数时,仅返回指定属性的报警数量。 指定触发器标识(TriggerId)参数时,仅返回指定触发器的报警数量。
请求示例
{
// 区域标识(可选)
"ZoneId": 821305322504207,
// 设备标识(可选)
"DeviceId": 821370753646611,
// 属性标识(可选)
"AttributeId": 821323777441809,
// 触发器标识(可选)
"TriggerId": 821333843771410
}响应示例
{
"ZoneId": 821305322504207,
"DeviceId": 821370753646611,
"AttributeId": 821323777441809,
"TriggerId": 821333843771410,
// 提醒级报警数
"Notice": 10,
// 警告级报警数
"Warning": 10,
// 严重级报警数
"Danger": 1,
// 响应状态码
"Status": 2,
}获取多个报警(AlarmSelect)
获取当前激活的报警。 缺省所有参数时,返回当前用户可见范围内的所有报警。 指定区域标识(ZoneId)参数时,仅返回指定区域的报警。 指定设备标识(DeviceId)参数时,仅返回指定设备的报警。 指定属性标识(AttributeId)参数时,仅返回指定属性的报警。 指定触发器标识(TriggerId)参数时,仅返回指定触发器的报警。
请求示例
{
// 区域标识(可选)
"ZoneId": 821305322504207,
// 设备标识(可选)
"DeviceId": 821370753646611,
// 属性标识(可选)
"AttributeId": 821323777441809,
// 触发器标识(可选)
"TriggerId": 821333843771410
}响应示例
{
"ZoneId": 821305322504207,
"DeviceId": 821370753646611,
"AttributeId": 821323777441809,
"TriggerId": 821333843771410,
// 报警集合
"Alarms": [
{
// 设备标识
"DeviceId": 821370753646611,
// 属性标识
"AttributeId": 821323777441809,
// 触发器标识
"TriggerId": 821333843771410,
// 报警等级类型
"Type":{
"name":"WARNING",
"value":2,
"text":"二级报警"
},
// 报警内容
"Content":"主轴速度异常 2375",
// 激活状态
"Alert":true,
// 创建时间
"Created": "2024-9-12 8:04:10",
// 更新时间
"Updated": "2024-9-12 8:04:10"
}
...
],
// 响应状态码
"Status": 2
}清除所有报警(AlarmClear)
清除当前所有已激活的报警;之后触发器执行时如果条件满足会重新报警。
请求示例
{
// 没有任何参数
}响应示例
{
// 响应状态码
"Status": 2
}故障
故障指通信故障,由通信驱动检测并报告,通信故障不会持久化保存。 如果服务端(JOYZL SCADA Server)程序重启,所有已报告的故障将被丢弃, 如果故障依旧存在,会在被通信驱动发现时重新报告。
注意区分: 通信故障不同于设备故障, 通信故障由通信驱动报告,用于排查网络故障。 设备故障由设备自行监测(如果有)并通过属性(信号)反映出来, 必须由对应属性配置的触发器报告为报警。
故障类型(FaultType)
- NORMAL(0) 正常;
- DISCOVER(1) 发现设备;
- DRIVER(1000) 驱动错误;
- DRIVER_NOT_FOUND(1001) 驱动不存在;
- DRIVER_INVALID(1002) 驱动无效;
- DRIVER_PROTOCOL(1003) 协议无效;
- DRIVER_MESSAGE(1004) 消息无效;
- DRIVER_VALIDATION(1005) 消息校验失败;
- DRIVER_IDENTITY(1006) 消息标识无效;
- DRIVER_FUNCTION(1007) 功能错误;
- DRIVER_OVERLENGTH(1008) 消息超长;
- DRIVER_OTHER(1999) 其它错误;
- DEVICE(2000) 设备故障;
- DEVICE_OFFLINE(2001) 离线;
- DEVICE_PARENT(2002) 隶属错误;
- DEVICE_DRIVER(2003) 驱动无效;
- DEVICE_POINT(2004) 接点无效;
- DEVICE_POINT_CONFLICT(2005) 接点冲突;
- DEVICE_ADDRESS(2006) 地址无效;
- DEVICE_ADDRESS_CONFLICT(2007) 地址冲突;
- DEVICE_PASSWORD(2008) 密码错误;
- DEVICE_IDENTITY(2009) 标识错误;
- DEVICE_TIMEOUT(2996) 超时;
- DEVICE_OTHER(2999) 其它错误;
- ATTRIBUTE(3000) 属性错误;
- ATTRIBUTE_CODE(3001) 代码无效;
- ATTRIBUTE_DENIED(3002) 拒绝访问;
- ATTRIBUTE_INVALID(3003) 无效数据或值;
- ATTRIBUTE_UNSUPPORTED(3004) 不支持的操作;
- ATTRIBUTE_TYPE(3005) 类型无效;
- ATTRIBUTE_OTHER(3999) 其它错误;
获取故障数量(FaultAmount)
获取当前报告的故障数量。 缺省所有参数时,返回当前用户可见范围内的所有故障数量。 指定区域标识(ZoneId)参数时,仅返回指定区域的故障数量。
提示: 并非所有通信故障都能区分区域,特别是从端通信模式的设备(既由设备主动连接服务器), 当连接失败或通信消息无效时,可能无法断定是其中哪个设备。
请求示例
{
// 区域标识(可选)
"ZoneId": 821305322504207
}响应示例
{
"ZoneId": 821305322504207,
// 故障数量
"Fault":2,
// 发现数量
"Discover":1,
// 响应状态码
"Status": 2
}获取多个故障(FaultSelect)
获取当前报告的故障。 缺省所有参数时,返回当前用户可见范围内的所有故障。 指定区域标识(ZoneId)参数时,仅返回指定区域的故障。
提示: 并非所有通信故障都能区分区域,特别是从端通信模式的设备(既由设备主动连接服务端), 当连接失败或通信消息无效时,可能无法断定是其中哪个设备。
请求示例
{
// 区域标识(可选)
"ZoneId": 821305322504207,
// 设备标识(可选)
"DeviceId": 821370753646611,
// 故障类型(可选)
"Type":1
}响应示例
{
"ZoneId": 821305322504207,
"DeviceId": 821370753646611,
"Type":2001,
// 故障集合
"Alarms": [
{
// 设备标识
"DeviceId": 821370753646611,
// 属性标识
"AttributeId": 821323777441809,
// 故障类型
"Type":{
"name":"DEVICE_OFFLINE",
"value":2001,
"text":"离线"
},
// 故障内容
"Content":"...",
// 激活状态
"Alert":true,
// 创建时间
"Created": "2024-9-12 8:04:10",
// 更新时间
"Updated": "2024-9-12 8:04:10"
}
...
],
// 响应状态码
"Status": 2
}清除所有故障(FaultClear)
清除当前所有已报告的故障; 之后由通信驱动发现的故障会重新报告。
请求示例
{
// 没有任何参数
}响应示例
{
// 响应状态码
"Status": 2
}设备
设备字段
Driver 表示特定通信方式的驱动名称字符串,名称是预先定义的, 并且区分主端通信和从端通信连接方式。 可通过 设备通信 了解为每种通信方式定义的名称以及更多详细信息。
通信驱动命名方式:
[NAME]_[TCP/UDP]_[MASTER/SLAVE]
[NAME]_[TCP/UDP]_[MASTER/SLAVE]
Point 表示网络通信接点,根据设备连接的主从性,接点可以是网络地址和端口或仅端口; 网络地址既以太网 IPv4 或 IPv6 地址,端口范围 0~65535,0表示由系统分配; 作为主端通信的接点是允许重复的,IP地址也可省略(仅指定端口),通信驱动会自动进行适配。
通信接点表示方式:
[IP]:<PORT>
Address 用于间接与设备连接时,对设备进行二级区分。 例如多个设备使用串行通信(RS485)连接到网关(GETWAY), 网关通过以太网与服务端(JOYZL SCADA Server)连接, 此时设备接点(Point)设置为网关地址, 设备地址(Address)应设置为设备所在串行链路的地址号。
与设备直接连接方式:
- SCADA(SLAVE Point) → 设备(MASTER)
- SCADA(MASTER Point) ← 设备(SLAVE)
与设备间接连接方式:
- SCADA(SLAVE Point + Address) → GETWAY(MASTER) ─ 设备
- SCADA(MASTER Point + Address) ← GETWAY(SLAVE) ─ 设备
获取设备数量(DeviceAmount)
获取全部或指定区域的设备数量,可见范围视用户所在区域而定。 缺省所有参数时,返回当前用户可见范围的所有设备数量; 指定区域标识(ZoneId)参数时,仅返回指定区域(含子区域)的设备数量; 指定边缘标识(ServoId)参数时,仅返回指定边缘的设备数量。
请求示例
{
// 区域标识(可选)
"ZoneId": 821305322504207,
// 边缘标识(可选)
"ServoId": 1397778584436739
}响应示例
{
"ZoneId": 821305322504207,
"ServoId": 821382497697812,
// 设备总数
"Devices": 10,
// 启用的设备数
"Enables": 10,
// 正常的设备数
"Normals": 10,
// 响应状态码
"Status": 2
}获取多个设备(DeviceSelect)
获取全部或指定区域的设备,可见范围视用户所在区域而定。 缺省所有参数时,返回当前用户可见范围的所有设备; 指定区域标识(ZoneId)参数时,仅返回指定区域(不含子区域)的设备; 指定边缘标识(ServoId)参数时,仅返回指定边缘的设备; 指定启用或禁用(Enable)参数时,仅返回指定状态的设备。
请求示例
{
// 区域标识(可选)
"ZoneId": 821305322504207,
// 边缘标识(可选)
"ServoId": 821382497697812,
// 启用或禁用(可选)
"Enable": true
}响应示例
{
"ZoneId": 821305322504207,
"ServoId": 821382497697812,
"Enable": true,
// 设备集合
"Devices": [
{
// 设备标识
"Id": 821196270600196,
// 区域标识
"ZoneId": 821305322504207,
// 边缘标识
"ServoId": 821382497697812,
// 设备名称
"Name": "环境1",
// 设备型号
"Model": "H001",
// 设备生产厂商
"Manufacturer": "JOYZL",
// 通信驱动
"Driver": "MODBUS_TCP_SLAVE",
// 通信接点
"Point": "192.168.8.6:502",
// 识别地址
"Address": "1",
// 通信鉴别
"Identity": "user",
// 通信密码
"Password": "admin",
// 扫描间隔(毫秒)
"Interval": 1000,
// 延迟时间(秒)
"Delay": 3,
// 超时时间(秒)
"Timeout": 6,
// 备注
"Remark": "示例设备",
// 启用或禁用
"Enable": true,
// 创建时间
"Created": "2024-9-12 8:04:10",
// 更新时间
"Updated": "2024-9-12 8:04:10"
// 当前状态
"Fault":{
"name":"NORMAL",
"value":0,
"text":"正常"
},
// 状态更新时间戳
"Timestamp": 175234567835
}
...
],
// 响应状态码
"Status": 2
}获取设备状态(DeviceState)
获取指定设备的最新状态。 此接口仅返回设备状态,不会返回设备的其它字段。
请求示例
{
// 设备标识(必要)
"Id": 821196270600196
}响应示例
{
"Id": 821196270600196,
// 当前状态
"Fault":{
"name":"NORMAL",
"value":0,
"text":"正常"
},
// 状态更新时间戳
"Timestamp": 175234567835
// 响应状态码
"Status": 2
}获取可用通信驱动(DriverSelect)
获取服务端(JOYZL SCADA Server)已集成可用的设备通信驱动。 这些通信驱动以设备形式返回, 但这并不是用户创建的设备,不具有设备标识(Id)。 驱动名称列表用于创建设备时指定设备所用的通信驱动; 返回的驱动设备已为大部分字段设置默认值,可作为新建设备的原型。
请求示例
{
// 设备列表返回(可选)
"Device":true,
// 驱动名称返回(可选)
"Name":true
}响应示例
{
"Device":true,
"Name":true,
// 设备集合
"Devices":[
{
"Id": 0,
"ZoneId": 0,
"ServoId": 0,
"Name": "MODBUS TCP SLAVE",
"Model": "TCP",
"Manufacturer": "MODBUS",
"Driver": "MODBUS_TCP_SLAVE",
"Point": "192.168.8.6:502",
"Address": "1",
"Interval": 1000,
"Delay": 3,
"Timeout": 6,
"Remark": "设备通信驱动",
"Enable": false,
}
...
],
// 名称集合
"Names":[
"DLT645_1997_TCP_SLAVE",
"DLT645_2007_TCP_SLAVE",
"DLT645_2007E_TCP_SLAVE",
"MTCONNECT_HTTP_SLAVE",
"MODBUS_RTU_SLAVE",
"MODBUS_RTU_SLAVES",
"MODBUS_TCP_SLAVE",
"MODBUS_TCP_SLAVES",
"SNMP_V1_SLAVE",
"SNMP_V2_SLAVE",
],
// 响应状态码
"Status": 2
}新建设备(DeviceCreate)
创建新的设备用于通信,设备必须指定其所属的区域标识(ZoneId)参数; 新创建的设备处于禁用状态,后续还须为设备添加需要遥测的信号(属性)。
请求示例
{
// 区域标识(必要)
"ZoneId": 821305322504207,
// 边缘标识(可选)
"ServoId": 821382497697812,
// 设备名称(必要)
"Name": "环境1",
// 设备型号(可选)
"Model": "H001",
// 设备生产厂商(可选)
"Manufacturer": "JOYZL",
// 通信驱动(可选)
"Driver": "MODBUS_TCP_SLAVE",
// 通信接点(可选)
"Point": "192.168.8.6:502",
// 识别地址(可选)
"Address": "1",
// 通信鉴别(可选)
"Identity": "user",
// 通信密码(可选)
"Password": "admin",
// 扫描间隔(毫秒)(可选)
"Interval": 1000,
// 延迟时间(秒)(可选)
"Delay": 3,
// 超时时间(秒)(可选)
"Timeout": 6,
// 备注(可选)
"Remark": "示例设备"
}响应示例
{
"ZoneId": 821305322504207,
"ServoId": 821382497697812,
"Name": "环境1",
"Model": "H001",
"Manufacturer": "JOYZL",
"Driver": "MODBUS_TCP_SLAVE",
"Point": "192.168.8.6:502",
"Address": "1",
"Identity": "user",
"Password": "admin",
"Interval": 1000,
"Delay": 3,
"Timeout": 6,
"Remark": "示例设备",
// 设备标识
"Id": 821196270600196,
// 设备状态
"Enable": false,
// 创建时间
"Created": "2024-9-12 8:04:10",
// 响应状态码
"Status": 2
}修改设备(DeviceUpdate)
通过设备标识(Id)修改设备的常规字段值。 不能在设备启用状态下修改并更新设备的通信相关参数,应先将设备禁用。 除名称(Name)、型号(Model)、厂商(Manufacturer)、备注(Remark)之外的均为通信相关参数。 设备所属的区域调整须通过 移动设备(DeviceMove) 接口实现; 设备的启用或禁用须通过 启用或禁用设备(DeviceEnable) 接口实现。
请求示例
{
// 设备标识(必要)
"Id": 821196270600196,
// 设备名称(必要)
"Name": "环境1",
// 设备型号(可选)
"Model": "H001",
// 设备生产厂商(可选)
"Manufacturer": "JOYZL",
// 通信驱动(可选)
"Driver": "MODBUS_TCP_SLAVE",
// 通信接点(可选)
"Point": "192.168.8.6:502",
// 识别地址(可选)
"Address": "1",
// 通信鉴别(可选)
"Identity": "user",
// 通信密码(可选)
"Password": "admin",
// 扫描间隔(毫秒)(可选)
"Interval": 1000,
// 延迟时间(秒)(可选)
"Delay": 3,
// 超时时间(秒)(可选)
"Timeout": 6,
// 备注(可选)
"Remark": "示例设备"
}响应示例
{
"Id": 821196270600196,
"ZoneId": 821305322504207,
"ServoId": 821382497697812,
"Name": "环境1",
"Model": "H001",
"Manufacturer": "JOYZL",
"Driver": "MODBUS_TCP_SLAVE",
"Point": "192.168.8.6:502",
"Address": "1",
"Identity": "user",
"Password": "admin",
"Interval": 1000,
"Delay": 3,
"Timeout": 6,
"Remark": "示例设备",
// 更新时间
"Updated": "2024-9-12 8:04:10"
// 响应状态码
"Status": 2
}启用或禁用设备(DeviceEnable)
被禁用的设备将断开连接且不再发起通信也不会采集数据; 已禁用设备重新启用,将自动尝试恢复通信并采集数据。
请求示例
{
// 设备标识(必要)
"Id": 821196270600196,
// 启用或禁用(必要)
"Enable": true
}响应示例
{
"Id": 821196270600196,
"Enable": true,
// 更新时间
"Updated": "2024-09-12 16:20:15",
// 响应状态码
"Status": 2
}移动设备(DeviceMove)
移动设备到另一个区域或边缘端,使其成为另一个区域或边缘端的设备。 如果将设备移动到边缘端中,边缘端主机并不能自动发现,需要通知边缘端重载设备; 从边缘端移除设备也是如此。
请求示例
{
// 设备标识(必要)
"Id": 821196270600196,
// 区域标识(单选)
"ZoneId": 821305322504207,
// 边缘标识(单选)
"ServoId": 821382497697812
}响应示例
{
"Id": 821196270600196,
"ZoneId": 821305322504207,
"ServoId": 821382497697812,
// 更新时间
"Updated": "2024-09-12 16:20:15",
// 响应状态码
"Status": 2
}删除设备(DeviceDelete)
删除设备时,设备内的属性和属性的触发器都将一并删除,并且无法恢复。
请求示例
{
// 设备标识(必要)
"Id": 821196270600196
}响应示例
{
"Id": 821196270600196,
// 响应状态码
"Status": 2
}属性
设备中配置的属性对应着需要遥测的设备信号。 服务端(JOYZL SCADA Server)程序会根据设定频率持久存储这些数据值, 通常会配置数据的有效时间,防止磁盘写满。
属性字段
Code 代码由各个通信驱动定义格式,格式错误或无效的属性代码将导致数据遥测失败。 可参考 设备通信 了解各种设备的代码定义和格式的详细说明。
Source 和 Target 分别表示来自设备的原始值类型和最终所需的值类型。 原值类型如果省略将视为与属性终值类型相同, 原值类型仅用于识别或转换从设备获得的数据, 触发器以及之后的数据存储和显示均使用属性终值; 程序会自动进行值类型转换。
从设备读取的值(原始值),可能并不是最终所需的值(属性值)。 部分单片机设备由于运算能力有限,可能会避免直接运算浮点数,进而采用放大后的整数运算来代替; 需要将这些整数除以放大倍数而还原为最终的浮点值。 Ignore 和 Factor 字段专门用于适应此类换算。
Ignore 精度指示用于决定浮点数的小数位, 例如将其设置为 0.001 则表示最多3位小数, 小于 0.001 的部分将被忽略(舍去)。 如果仅需要保留整数应设置为 0,这也是缺省时的默认值。
数值精度计算公式如下:
V = V - V MOD Ignore
Factor 倍率可用于将整数值转换为小数, 例如将其设置为 0.01 如果源值为 211 则终值为 2.11。 如果要保持原值不变应设置为 1,这也是缺省时的默认值。
数值倍率计算公式如下:
V = V × Factor
Factor 参数先于 Ignore 参数作用于原始值, 因此原始属性值将首先计算倍率再计算精度,之后便得到最终值。
Control 参数决定属性的读写性质,这将限制服务端和客户端对属性可执行的操作。 如果属性为只读,那么将只能遥测; 如果属性为读写,则即可遥测也可遥控。
Unit 用于设置值的计量单位,额外还支持枚举格式 "[禁用,启用]", 这意味着0代表“禁用”,1代表“启用”, 这有助于将表示状态的数值显示为更易读的字符。 桌面客户端实体对象内部方法可检查是否为枚举单位并处理为最终显示。 WEB 客户端可通过 ValueText 字段获取已转换后的值。
Rank 等级决定属性是否需要持续读取,低于 100 的属性将自动持续更新当前值; 大于等于 100 的属性系统不会自动读取,须由用户请求读取或触发器请求读取。
控制类型(ControlType)
- READ_ONLY(0) 只读
- READ_WRITE(1) 读写
- EXECUTE(2) 执行
- WRITE_ONLY(3) 只写
值类型(ValueType)
- EMPTY(0) 无值
- BOOLEAN(1) 布尔值
- BYTE(2) 字节数
- BYTE_SIGNED(21) 有符号字节数
- BYTE_UNSIGNED(22) 无符号字节数
- SHORT(4) 有符号短整数
- SHORT_BE(41) 有符号短整数
- SHORT_LE(42) 有符号短整数
- WORD(3) 无符号短整数
- WORD_BE(31) 无符号短整数
- WORD_LE(32) 无符号短整数
- INTEGER(6) 有符号整数
- INTEGER_BE(61) 有符号整数
- INTEGER_BL(62) 有符号整数
- INTEGER_LB(63) 有符号整数
- INTEGER_LE(64) 有符号整数
- DWORD(5) 无符号整数
- DWORD_BE(51) 无符号整数
- DWORD_BL(52) 无符号整数
- DWORD_LB(53) 无符号整数
- DWORD_LE(54) 无符号整数
- LONG(7) 有符号长整数
- LONG_BE(71) 有符号长整数
- LONG_BL(72) 有符号长整数
- LONG_LB(73) 有符号长整数
- LONG_LE(74) 有符号长整数
- FLOAT(8) 单精度浮点数
- FLOAT_BE(81) 单精度浮点数
- FLOAT_BL(82) 单精度浮点数
- FLOAT_LB(83) 单精度浮点数
- FLOAT_LE(84) 单精度浮点数
- DOUBLE(9) 双精度浮点数
- DOUBLE_BE(91) 双精度浮点数
- DOUBLE_BL(92) 双精度浮点数
- DOUBLE_LB(93) 双精度浮点数
- DOUBLE_LE(94) 双精度浮点数
- STRING(10) 字符串
- DATE(11) 日期
- TIME(12) 时间
- DATETIME(13) 日期时间
关于每个值类型的详细定义和数值范围,请参考 数据类型。
获取属性数量(AttributeAmount)
获取全部或指定范围的属性数量。缺省所有参数时,返回当前用户可见范围的所有属性数量。指定区域标识(ZoneId)参数时,仅返回指定区域的属性(含子区域)数量。 指定边缘标识(ServoId)参数时,仅返回指定边缘端的属性数量。 指定设备标识(DeviceId)参数时,仅返回指定设备中的属性数量。
请求示例
{
// 区域标识(可选)
"ZoneId": 821305322504207,
// 边缘标识(可选)
"ServoId": 821382497697812,
// 设备标识(可选)
"DeviceId": 821370753646611
}响应示例
{
"ZoneId": 821305322504207,
"ServoId": 821382497697812,
"DeviceId": 821370753646611,
// 属性数量
"Attribute": 11254,
// 响应状态码
"Status": 2
}获取多个属性(AttributeSelect)
获取全部或指定范围的属性。 缺省所有参数时,返回当前用户可见范围的所有属性。 指定区域标识(ZoneId)参数时,仅返回指定区域的属性(不含子区域)。 指定边缘标识(ServoId)参数时,仅返回指定边缘端的属性。 指定设备标识(DeviceId)参数时,仅返回指定设备中的属性。 指定等级(Rank)参数时,将返回小于等于指定等级的属性。 指定值类型(Type)参数时,将返回指定值类型的属性。 指定控制类型(Control)参数时,将返回指定控制类型的属性。
注意: 请谨慎设置获取属性的范围,在大规模实施中,部分设备的属性可能上千个, 属性总数量可超十万个以上。如果需要返回的属性较多,可能会导致响应超时。
请求示例
{
// 区域标识(可选)
"ZoneId": 821305322504207,
// 边缘标识(可选)
"ServoId": 821382497697812,
// 设备标识(可选)
"DeviceId": 821370753646611,
// 值类型(可选)
"Type": 1,
// 控制类型(可选)
"Control": 1,
// 等级(可选)
"Rank": 0
}响应示例
{
"ZoneId": 821305322504207,
"ServoId": 821382497697812,
"DeviceId": 821370753646611,
"Type": 1,
"Control": 1,
"Rank": 0,
// 属性集合
"Attributes": [
{
// 属性标识
"Id": 821177815662595,
// 名称
"Name": "温度",
// 代码
"Code": "40001",
// 源值类型
"Source": 8,
// 值类型
"Target": 8,
// 控制类型
"Control": 0,
// 值缓存数
"Caches":1,
// 单位
"Unit": "℃",
// 组名
"Group": "监测",
// 等级
"Rank": 0,
// 精度与忽略
"Ignore": 0,
// 倍率
"Factor": 1,
// 默认值
"Worth": ""
// 备注
"Remark": "示例属性",
// 属性值
"Value":{
Type: 1,
Value: true
},
// 更新时间戳
"Timestamp" : 12456798765432
}
...
],
// 响应状态码
"Status": 2
}获取时序数据(ValueSelect)
获取属性在指定时间段的时序数据值。 如果指定的时间范围不在已存储数据范围内,将不会返回任何数据。 不应请求跨度过大的时间段,这有可能因数据过多而导致响应超时。 如果缺省开始(Begin)和结束(End)时间参数,则返回服务端缓存的属性时序值。
注意: 请谨慎设置开始(Begin)和结束(End)时间参数,如果需求时间跨度较长的数据,应分段请求。 以常见的浮点数信号为例,更新频率为1秒,10分钟将产生600个值,1小时将产生3600个值, 编码为JSON格式后其字节数量约为180Kbyte,24小时数据量将超过5Mbyte; 如果要获取设备中的10个属性,将需要传输50MByte以上的数据量; 部分设备的属性会多达上千个。
请求示例
{
// 属性标识(必要)
"AttributeId": 6892182778556009,
// 开始时间(可选)
"Begin": "2025-08-26 10:15:00",
// 结束时间(可选)
"End": "2025-08-26 11:15:00"
}注意:通过 JSON 请求时,时间字符串没有毫秒部分, 因此无法精确到毫秒级的请求。 如果需要更加精确的时间请求,请通过集成开发工具包(JOYZL SCADA Client)实现。
响应示例
{
"AttributeId": 6892182778556009,
"Begin": "2025-08-26 10:15:00",
"End": "2025-08-26 11:15:00",
// 值集合
"Values": [
{
// 类型
"Type": 1,
// 值
"Value": 0.987,
// 时间戳
"Timestamp": 12356987634
},
{
"Type": 1,
"Value": 2.967,
"Timestamp": 12356988934
}
...
],
// 响应状态码
"Status": 2
}时序数据值集合(Values)中为多个数据值对象,其中Value为值, Timestamp为时间戳(1970年1月1日零点到当前时间的毫秒), 转换为日期时间对象时请注意时区。
在工业场景中, 生产类设备(例如数控机床)单个产品(工件)单个信号产生的数据通常为多个值(数组); 质检类设备(例如齿轮啮合仪)单个产品(工件)单个信号产生的数据通常为单个值, 此时可将开始(Begin)和结束(End)时间设置为相同的时刻。 质检设备通常还会生成质检报告文件, 可由 JOYZL Archive 自动采集并归档这些文件。
读取属性值或遥测(AttributeRead)
读取服务端属性缓存的最新值, 或从设备立即读取属性最新值。 设备直读(Direct)参数指示是立即从设备读取最新的属性值或服务端(JOYZL SCADA Server)缓存获取属性当前值, 缺省此参数时将从服务端缓存获取属性值。 服务端内存保持每个属性的最后更新值,更新频率受设备参数和通信速度规定。 通常情况下服务端缓存值已满足大部分需求, 如果指示从设备获取最新的属性值,请求将触发一条设备指令,并等待指令返回。
此接口可用于客户端持续轮询获取服务端缓存的属性最新值, 如果有多个属性值需要持续更新, 应执行排队请求并适时暂停,以避免突破客户端并发上限或导致服务器过于繁忙。
注意: 不要过于频繁的请求从设备直读(Direct)属性值,大部分设备的处理能力远不及个人计算机和服务器, 高频的指令请求可能会导致设备宕机。
请求示例
{
// 属性标识(必要)
"AttributeId": 821256668577802,
// 设备直读(可选)
"Direct": true
}响应示例
{
"AttributeId": 821256668577802,
"Direct": true,
// 更新时间戳
"Timestamp" : 12456798765432,
// 属性值
"Value":{
Type: 1,
Value: true
},
// 响应状态码
"Status": 2
}设置属性值或遥控(AttributeWrite)
设置属性值,既对设备执行远程控制。 此请求将向设备发送通信指令,并等待从设备获得确认后返回。 如果属性未规定值时可缺省值(Value)参数, 某些特殊属性没有具体值类型,例如:清除或重置, 反之必须指定有效的属性值。
请注意,与现场控制相比,远程控制无法实时感知现场实际情况, 设备可能处于不适合执行特定指令的状态,从而可能引发安全事故,造成人员伤亡或财产损失。
请求示例
{
// 属性标识(必要)
"Id": 821177815662595,
// 属性值(可选)
"Value": "10"
}响应示例
{
"Id": 821177815662595,
"Value": "10",
// 时间戳
"Timestamp" : 12456798765432,
// 响应状态码
"Status": 2
}获取驱动预定义属性(DriverAttributes)
获取通信驱动预先定义的属性。 预定义属性并不是用户创建的属性,因此没有属性标识。 驱动名称(Driver)参数用于通过驱动名称获取预定义属性。 厂商(Manufacturer)和型号(Model)参数用于通过设备厂商型号获取预定义属性。 驱动名称(Driver)与厂商(Manufacturer)和型号(Model)参数,应至少指定一种; 推荐指定全部参数,此时将优先通过厂商型号匹配, 如果未能找到匹配的预定义属性将尝试通过驱动名称获取。
请求示例
{
// 驱动名称(可选)
"Driver": "MODBUS_TCP_SLAVE",
// 型号(可选)
"Model": "H001",
// 厂商(可选)
"Manufacturer": "JOYZL"
}响应示例
{
// 属性集合
"Attributes": [
{
// 属性标识
"Id": 0,
// 名称
"Name": "温度",
// 代码
"Code": "40001",
// 值类型
"Target": 8,
// 控制类型
"Control": 0,
// 值缓存数
"Caches":1,
// 单位
"Unit": "℃",
// 组名
"Group": "监测",
// 源值类型
"Source": 8,
// 级别
"Rank": 0,
// 精度与忽略
"Ignore": 0,
// 倍率
"Factor": 1,
// 默认值
"Worth": "0"
// 备注
"Remark": "示例属性"
}
...
],
// 响应状态码
"Status": 2
}新建属性(AttributeCreate)
在设备中创建新的属性(信号)用于采集(遥测)或控制(遥控)。 设备中的属性代码(Code)应确保唯一不重复,每种设备的具体代码格式参考 设备通讯 文档。
请求示例
{
// 属性标识(必要)
"Id": 821177815662595,
// 名称(必要)
"Name": "温度",
// 代码(必要)
"Code": "40001",
// 值类型(必要)
"Target": 8,
// 控制类型(必要)
"Control": 0,
// 值缓存数(可选)
"Caches":1,
// 单位(可选)
"Unit": "℃",
// 组名(可选)
"Group": "监测",
// 源值类型(可选)
"Source": 8,
// 级别(可选)
"Rank": 0,
// 精度与忽略(可选)
"Ignore": 0,
// 倍率(可选)
"Factor": 1,
// 默认值(可选)
"Worth": ""
// 备注(可选)
"Remark": "示例属性"
}响应示例
{
"Name": "温度",
"Code": "40001",
"Target": 8,
"Control": 0,
"Caches":1,
"Unit": "℃",
"Group": "监测",
"Source": 8,
"Rank": 0,
"Ignore": 0,
"Factor": 1,
"Worth": ""
"Remark": "示例属性",
// 属性标识
"Id": 821177815662595,
// 创建时间
"Created": "2024-09-12 14:36:34",
// 响应状态码
"Status": 2,
}校验属性代码(AttributeUnique)
校验属性代码是否可用。 设备中不允许存在代码相同的属性,设备通过属性代码标识信号。 指定属性标识参数时,将排除指定属性的代码。
请求示例
{
// 属性标识(可选)
"Id": 821177815662595,
// 设备标识(必要)
"DeviceId": 821370753646611,
// 代码(必要)
"Code": "40001"
}响应示例
{
"Id": 821177815662595,
"DeviceId": 821370753646611,
"Code": "40001",
// 是否可用
"Available": true,
// 响应状态码
"Status": 2,
}修改属性(AttributeUpdate)
通过属性标识(Id)修改属性的常规字段值。 属性所属的设备调整须通过 移动属性(AttributeMove) 接口实现。
请求示例
{
// 属性标识(必要)
"Id": 821177815662595,
// 名称(必要)
"Name": "温度",
// 代码(必要)
"Code": "40001",
// 值类型(必要)
"Target": 8,
// 控制类型(必要)
"Control": 0,
// 值缓存数(可选)
"Caches":1,
// 单位(可选)
"Unit": "℃",
// 组名(可选)
"Group": "监测",
// 源值类型(可选)
"Source": 8,
// 级别(可选)
"Rank": 0,
// 精度与忽略(可选)
"Ignore": 0,
// 倍率(可选)
"Factor": 1,
// 默认值(可选)
"Worth": ""
// 备注(可选)
"Remark": "示例属性"
}响应示例
{
"Id": 821177815662595,
"Name": "温度",
"Code": "40001",
"Target": 8,
"Control": 0,
"Caches":1,
"Unit": "℃",
"Group": "监测",
"Source": 8,
"Rank": 0,
"Ignore": 0,
"Factor": 1,
"Worth": ""
"Remark": "示例属性"
// 更新时间
"Updated": "2024-09-12 16:20:15",
// 响应状态码
"Status": 2,
}移动属性(AttributeMove)
移动属性到另一个设备,使其成为另一个设备的属性。 请确保设备中的属性代码唯一性,设备通过属性代码标识信号。 不能移动属性到正在通信的设备中,请先将设备禁用。
请求示例
{
// 属性标识(必要)
"Id": 821256668577802,
// 设备标识(必要)
"DeviceId": 821370753646611
}响应示例
{
"Id": 821256668577802,
"DeviceId": 821370753646611,
// 更新时间
"Updated": "2024-09-12 14:36:34",
// 响应状态码
"Status": 2
}删除属性(AttributeDelete)
删除属性时,属性关联的触发器将一并删除; 属性的采集数据将无法读取,占用的存储空间将在数据过期后释放。
请求示例
{
// 属性标识(必要)
"Id": 821177815662595
}响应示例
{
"Id": 821177815662595,
// 响应状态码
"Status": 2
}触发器
触发器是 JOYZL SCADA 虚拟的概念,并非实际存在的电器硬件。 触发器用于设定当属性值变化时是否报警, 或定时自动执行属性设置,既定时自动遥控设备。
请注意,与现场控制相比,远程控制无法实时感知现场实际情况, 设备可能处于不适合执行特定指令的状态,从而可能引发安全事故,造成人员伤亡或财产损失。
触发行为(CompareType)
- NONE(0) 无条件
- GREATER(1) 大于参照值
- EQUAL(2) 等于参照值
- LESS(3) 小于参照值
- SET(4) 设定为参照值
- GREATER_EQUAL(5) 大于等于参照值
- LESS_EQUAL(6) 小于等于参照值
- RESET(7) 重置为参照值
- UNEQUAL(8) 不等于参照值
报警等级(AlarmType)
- NONE(0) 无;
- NOTICE(1) 一级报警,提醒;
- WARNING(2) 二级报警,警告;
- DANGER(3) 三级报警,严重。
获取触发器数量(TriggerAmount)
获取全部或指定范围的触发器数量,可见范围视用户所在区域而定。 缺省所有参数时,返回当前用户可见范围的所有触发器数量; 指定区域标识(ZoneId)参数时,仅返回指定区域(不含子区域)的触发器数量; 指定定时器标识(TimerId)参数时,仅返回指定定时器的触发器数量; 指定属性标识(AttributeId)参数时,仅返回指定属性的触发器数量; 指定触发器标识(TriggerId)参数时,仅返回指定触发器的触发器数量。
请求示例
{
// 区域标识(可选)
"ZoneId": 821305322504207,
// 定时器标识(可选)
"TimerId": 821276801237004,
// 属性标识(可选)
"AttributeId": 6892182778556009,
// 触发器标识(可选)
"TriggerId": 821333843771410
}响应示例
{
"ZoneId": 821305322504207,
"TimerId": 821276801237004,
"AttributeId": 6892182778556009,
"TriggerId": 821333843771410,
// 触发器数量
"Triggers": 100,
// 启用数量
"Enables": 99,
// 响应状态码
"Status": 2
}获取多个触发器(TriggerSelect)
获取全部或指定范围的触发器,可见范围视用户所在区域而定。 缺省所有参数时,返回当前用户可见范围的所有触发器; 指定区域标识(ZoneId)参数时,仅返回指定区域(不含子区域)的触发器; 指定定时器标识(TimerId)参数时,仅返回指定定时器的触发器; 指定属性标识(AttributeId)参数时,仅返回指定属性的触发器; 指定触发器标识(TriggerId)参数时,仅返回指定触发器的触发器; 指定启用或禁用(Enable)参数时,仅返回指定状态的触发器。
请求示例
{
// 区域标识(可选)
"ZoneId": 821305322504207,
// 定时器标识(可选)
"TimerId": 821276801237004,
// 属性标识(可选)
"AttributeId": 6892182778556009,
// 触发器标识(可选)
"TriggerId": 821333843771410,
// 启用或禁用(可选)
"Enable": true
}响应示例
{
"ZoneId": 821305322504207,
"TimerId": 821276801237004,
"AttributeId": 6892182778556009,
"TriggerId": 821333843771410,
"Enable": true,
// 触发器集合
"Triggers": [
{
// 触发器标识
"Id": 821226469588999,
// 属性标识
"AttributeId": 3102422717169667,
// 触发器标识
"TriggerId": 3102402584510466,
// 定时器标识
"TimerId": 3102251589566465,
// 触发器名称
"Name": "温度超高",
// 触发器条件
"Compare": 1,
// 报警等级
"Alarm": 1,
// 参照值
"Value": "80",
// 延迟(毫秒)
"Delay": 0,
// 启用或禁用
"Enable": true,
// 创建时间
"Created" : "2024-9-12 8:04:10",
// 更新时间
"Updated" : "2024-9-12 8:04:10",
// 最后执行时间戳
"Timestamp": 1723537898764
}
...
],
// 响应状态码
"Status": 2
}获取触发器状态(TriggerState)
获取指定触发器的最新状态。 此接口仅返回触发器状态,不会返回触发器的其它字段。
请求示例
{
// 触发器标识(必要)
"Id": 821226469588999
}响应示例
{
"Id": 821226469588999,
// 最后执行时间戳
"Timestamp": 1723537898764
// 响应状态码
"Status": 2
}新建触发器(TriggerCreate)
创建新的触发器用于监控属性值变化或执行控制, 触发器必须指定其关联的属性标识(AttributeId)参数。 指定定时器标识(TimerId)参数时,触发器在指定时间监测是否满足条件而触发。 指定触发器标识(TriggerId)参数时,将视关联触发器而决定是否联动触发。 未指定定时器也未关联其它触发器时,将在属性值变化时执行。
请求示例
{
// 属性标识(必要)
"AttributeId": 3102422717169667,
// 触发器标识(可选)
"TriggerId": 3102402584510466,
// 定时器标识(可选)
"TimerId": 3102251589566465,
// 名称(必要)
"Name": "温度超高",
// 条件(必要)
"Compare": 1,
// 报警等级(必要)
"Alarm": 1,
// 参照值(可选)
"Value": "80",
// 延迟(毫秒)(可选)
"Delay": 0,
// 启用或禁用(可选)
"Enable": true
}响应示例
{
"AttributeId": 3102422717169667,
"TriggerId": 3102402584510466,
"TimerId": 3102251589566465,
"Name": "温度超高",
"Compare": 1,
"Alarm": 1,
"Value": "80",
"Delay": 0,
"Enable": true,
// 触发器标识
"Id": 821285189845005,
// 创建时间
"Created": "2024-09-12 14:36:34",
// 响应状态码
"Status": 2
}修改触发器(TriggerUpdate)
通过触发器标识(Id)修改触发器的常规字段值。 触发器的关联关系调整须通过 移动触发器(TriggerMove) 接口实现; 触发器的启用或禁用须通过 启用或禁用触发器(TriggerEnable) 接口实现。
请求示例
{
// 触发器标识(必要)
"Id": 821285189845005,
// 名称(必要)
"Name": "温度超高",
// 条件(必要)
"Compare": 1,
// 报警等级(必要)
"Alarm": 1,
// 参照值(可选)
"Value": "80",
// 延迟(毫秒)(可选)
"Delay": 0
}响应示例
{
"Id": 821285189845005,
"Name": "温度超高",
"Compare": 1,
"Alarm": 1,
"Value": "80",
"Delay": 0
// 更新时间
"Updated": "2024-09-12 16:20:15",
// 响应状态码
"Status": 2
}启用或禁用触发器(TriggerEnable)
启用或禁用指定触发器。 被禁用的触发器将不再执行,已触发的报警将被丢弃。
请求示例
{
// 触发器标识(必要)
"Id": 821226469588999,
// 启用或禁用(必要)
"Enable": true
}响应示例
{
"Id": 821226469588999,
"Enable": true,
// 更新时间
"Updated": "2024-09-12 16:20:15",
// 响应状态码
"Status": 2
}移动触发器(TriggerMove)
移动触发器到另一个定时器或触发器,使其成为另一个定时器的触发器或关联触发器。
请求示例
{
// 触发器标识(必要)
"Id": 821226469588999,
// 定时器标识(可选)
"TimerId": 3102251589566465,
// 触发器标识(可选)
"TriggerId": 3102402584510466
}响应示例
{
"Id": 821226469588999,
"TimerId": 3102251589566465,
"TriggerId": 3102402584510466,
// 更新时间
"Updated": "2024-09-12 16:20:15",
// 响应状态码
"Status": 2
}删除触发器(TriggerDelete)
删除触发器时,已触发的报警将被丢弃。
请求示例
{
// 触发器标识(必要)
"Id": 821226469588999
}响应示例
{
"Id": 821226469588999,
// 响应状态码
"Status": 2
}定时器
定时器有多种类型:一次性、按天、按周或按月。 一次性定时器仅在设定的开始日期和时间到达时执行一次。 按天定时器可按间隔天数周期性执行。 按周定时器可按间隔周数以及指定的星期几周期性执行。 按月定时器可按月份和指定日期执行。 定时器类型决定了其具体的执行日期与周期性规则。
除一次性定时器外, 其余类型定时器还可以设定在执行日内是否重复, 重复时从开始时间开始直至结束时间停止。 因此每个定时器由两部分组成:A 哪天执行,B 如何重复。
定时器类型(TimerType)
- ONCE(1) 一次,仅执行一次;
- DAILY(2) 按天,每n天;
- WEEKLY(3) 按周,每n周;
- MONTHLY(4) 按月,指定月份。
定时器字段
定时器月(Month)、周(Week)、日(Day)字段采用多选聚合值。 例如期望在每周的星期三和星期五执行, 那么可将星期三和星期五定义的整数值通过或运算合并为单个整数; 后续只需要通过与运算即可判断指定的哪些天。
聚合计算公式:
P = W1 | W2 | Wn
聚合判定公式:
( Wn & P ) > 0
星期(Week)
- MONDAY(1) 星期一;
- TUESDAY(2) 星期二;
- WEDNESDAY(4) 星期三;
- THURSDAY(8) 星期四;
- FRIDAY(16) 星期五;
- SATURDAY(32) 星期六;
- SUNDAY(64) 星期天;
月份(Month)
- JANUARY(1) 一月;
- FEBRUARY(2) 二月;
- MARCH(4) 三月;
- APRIL(8) 四月;
- MAY(16) 五月;
- JUNE(32) 六月;
- JULY(64) 七月;
- AUGUST(128) 八月;
- SEPTEMBER(256) 九月;
- OCTOBER(512) 十月;
- NOVEMBER(1024) 十一月;
- DECEMBER(2048) 十二月;;
日(Day)
- D1(1) 1日;
- D2(2) 2日;
- D3(4) 3日;
- D4(8) 4日;
- D5(16) 5日;
- D6(32) 6日;
- D7(64) 7日;
- D8(128) 8日;
- D9(256) 9日;
- D10(512) 10日;
- D11(1024) 11日;
- D12(2048) 12日;
- D13(4096) 13日;
- D14(8192) 14日;
- D15(16384) 15日;
- D16(32768) 16日;
- D17(65536) 17日;
- D18(131072) 18日;
- D19(262144) 19日;
- D20(524288) 20日;
- D21(1048576) 21日;
- D22(2097152) 22日;
- D23(4194304) 23日;
- D24(8388608) 24日;
- D25(16777216) 25日;
- D26(33554432) 26日;
- D27(67108864) 27日;
- D28(134217728) 28日;
- D29(268435456) 29日;
- D30(536870912) 30日;
- D31(1073741824) 31日;
- LAST(-2147483648) 月末日;
获取定时器数量(TimerAmount)
获取全部或指定区域的定时器数量,可见范围视用户所在区域而定。 缺省所有参数时,返回当前用户可见范围的所有定时器数量; 指定区域标识(ZoneId)参数时,仅返回指定区域(含子区域)的定时器数量。
请求示例
{
// 区域标识(可选)
"ZoneId": 821305322504207
}响应示例
{
"ZoneId": 821305322504207,
// 定时器数量
"Timers": 6,
// 启用数量
"Enables": 0,
// 过期数量
"Expires": 1
// 响应状态码
"Status": 2
}获取多个定时器(TimerSelect)
获取全部或指定区域的定时器,可见范围视用户所在区域而定。 缺省所有参数时,返回当前用户可见范围的所有定时器; 指定区域标识(ZoneId)参数时,仅返回指定区域(不含子区域)的定时器; 指定启用或禁用(Enable)参数时,仅返回指定状态的定时器。
请求示例
{
// 区域标识(可选)
"ZoneId": 821305322504207,
// 启用或禁用(可选)
"Enable": true,
}响应示例
{
"ZoneId": 821305322504207,
"Enable": true,
// 定时器集合
"Timers": [
{
// 定时器标识
"Id": 821276801237004,
// 区域标识
"ZoneId": 821305322504207,
// 定时器名称
"Name": "定时通电",
// 定时器类型
"Type": 2,
// 开始日期
"BeginDate": "2024-09-19",
// 开始时间
"BeginTime": "00:00:00",
// 结束日期
"EndDate": "2025-09-19",
// 结束时间
"EndTime": "00:00:00",
// 月(聚合)
"Month": 128,
// 周(聚合)
"Week": 128,
// 日(聚合)
"Day": 128,
// 间隔
"Interval": 1,
// 重复(秒)
"Repeat": 10,
// 创建时间
"Created" : "2024-9-12 8:04:10",
// 更新时间
"Updated" : "2024-9-12 8:04:10",
// 最后执行时间戳
"Timestamp": 1723537898764
}
...
],
// 响应状态码
"Status": 2
}获取定时器状态(TimerState)
获取指定定时器的最新状态。 此接口仅返回定时器状态,不会返回定时器的其它字段。
请求示例
{
// 定时器标识(必要)
"Id": 821276801237004
}响应示例
{
"Id": 821276801237004,
// 最后执行时间戳
"Timestamp": 1723537898764
// 响应状态码
"Status": 2
}新建定时器(TimerCreate)
创建新的定时器用于定时执行触发器, 定时器必须指定其所属的区域标识(ZoneId)参数; 新创建的定时器处于禁用状态, 后续还须为定时器添加触发器。
请求示例
{
// 区域标识(必要)
"ZoneId": 821305322504207,
// 定时器名称(必要)
"Name": "定时通电",
// 类型(必要)
"Type": 2,
// 开始日期(必要)
"BeginDate": "2024-09-19",
// 开始时间(必要)
"BeginTime": "00:00:00",
// 结束日期(可选)
"EndDate": "2025-09-19",
// 结束时间(可选)
"EndTime": "00:00:00",
// 月(聚合)(可选)
"Month": 128,
// 周(聚合)(可选)
"Week": 128,
// 日(聚合)(可选)
"Day": 128,
// 间隔(可选)
"Interval": 1,
// 重复(秒)(可选)
"Repeat": 10
}响应示例
{
"ZoneId": 821305322504207,
"Name": "定时通电",
"Type": 2,
"BeginDate": "2024-09-19",
"BeginTime": "00:00:00",
"EndDate": "2025-09-19",
"EndTime": "00:00:00",
"Month": 128,
"Week": 128,
"Day": 128,
"Interval": 1,
"Repeat": 10,
// 定时器标识
"Id": 821276801237004,
// 创建时间
"Created": "2024-09-12 14:36:34",
// 响应状态码
"Status": 2
}修改定时器(TimerUpdate)
通过定时器标识(Id)修改定时器的常规字段值。 定时器的区域调整须通过 移动定时器(TimerMove) 接口实现; 定时器的启用或禁用须通过 启用或禁用定时器(TimerEnable) 接口实现。
请求示例
{
// 定时器标识(必要)
"Id": 821218080980998,
// 定时器名称(必要)
"Name": "定时通电",
// 类型(必要)
"Type": 2,
// 开始日期(必要)
"BeginDate": "2024-09-19",
// 开始时间(必要)
"BeginTime": "00:00:00",
// 结束日期(可选)
"EndDate": "2025-09-19",
// 结束时间(可选)
"EndTime": "00:00:00",
// 月(聚合)(可选)
"Month": 128,
// 周(聚合)(可选)
"Week": 128,
// 日(聚合)(可选)
"Day": 128,
// 间隔(可选)
"Interval": 1,
// 重复(秒)(可选)
"Repeat": 10
}响应示例
{
"Id": 821218080980998,
"Name": "定时通电",
"Type": 2,
"BeginDate": "2024-09-19",
"BeginTime": "00:00:00",
"EndDate": "2025-09-19",
"EndTime": "00:00:00",
"Month": 128,
"Week": 128,
"Day": 128,
"Interval": 1,
"Repeat": 10,
// 更新时间
"Updated": "2024-09-12 16:20:15",
// 响应状态码
"Status": 2
}启用或禁用定时器(TimerEnable)
启用或禁用指定定时器。 被禁用的定时器将不再执行。
请求示例
{
// 定时器标识(必要)
"Id": 821218080980998,
// 启用或禁用(必要)
"Enable": true
}响应示例
{
"Id": 821218080980998,
// 更新时间
"Updated": "2024-09-12 14:36:34",
// 响应状态码
"Status": 2
}移动定时器(TimerMove)
移动定时器到另一个区域,使其成为另一个区域的定时器。 移动定时器并不会影响已关联的触发器执行, 即便这些触发器所属的设备不在相同区域; 通常为了便于维护应尽量确保定时器仅执行所在区域的触发器。
请求示例
{
// 定时器标识(必要)
"Id": 821218080980998,
// 区域标识(必要)
"ZoneId": 821305322504207
}响应示例
{
"Id": 821218080980998,
"ZoneId": 821305322504207,
// 更新时间
"Updated": "2024-09-12 14:36:34",
// 响应状态码
"Status": 2
}删除定时器(TimerDelete)
删除定时器时,其中的触发器也将被删除,已触发的报警将被丢弃。
请求示例
{
// 定时器标识(必要)
"Id": 821218080980998
}响应示例
{
"Id": 821218080980998,
// 响应状态码
"Status": 2
}边缘端
每个边缘端对象对应着一个边缘端主机,用以识别边缘端以便对边缘端主机进行远程配置。 没有登记的边缘端尝试连接服务端(JOYZL SCADA Server)时将被拒绝。
提示: 在旧版本的软件和文档中,称之为“伺服器”,由于此名称极易混淆且不准确, 因此从 9.0.0 版本之后更名为“边缘端”。
获取边缘端数量(ServoAmount)
获取全部或指定区域的边缘端数量,可见范围视用户所在区域而定。 缺省所有参数时,返回当前用户可见范围的所有边缘端数量; 指定区域标识(ZoneId)参数时,仅返回指定区域(含子区域)的边缘端数量。
请求示例
{
// 区域标识(可选)
"ZoneId": 821305322504207
}响应示例
{
"ZoneId": 821305322504207,
// 边缘端数量
"Servos": 8,
// 启用数量
"Enables": 8,
// 正常数量
"Normals": 6
}获取多个边缘端(ServoSelect)
获取全部或指定区域的边缘端,可见范围视用户所在区域而定。 缺省所有参数时,返回当前用户可见范围的所有边缘端; 指定区域标识(ZoneId)参数时,仅返回指定区域(不含子区域)的边缘端; 指定启用或禁用(Enable)参数时,仅返回指定状态的边缘端。
请求示例
{
// 区域标识(可选)
"ZoneId": 821305322504207,
// 启用或禁用(可选)
"Enable": true
}响应示例
{
"ZoneId": 821305322504207,
"Enable": true,
"Servos": [
{
// 边缘标识
"Id": 821236535918600,
// 区域标识
"ZoneId": 821305322504207,
// 名称
"Name": "伺服器1",
// 型号
"Model": "J001",
// 备注
"Remark": "示例伺服器",
// 启用或禁用
"Enable": true,
// 创建时间
"Created" : "2024-9-12 8:04:10",
// 更新时间
"Updated" : "2024-9-12 8:04:10",
// 当前状态
"Fault":{
"name":"NORMAL",
"value":0,
"text":"正常"
},
// 状态更新时间戳
"Timestamp": 175234567835
}
...
],
// 响应状态码
"Status": 2
}获取边缘端状态(ServoState)
获取指定边缘端的最新状态。 此接口仅返回边缘端状态,不会返回边缘端的其它字段。
请求示例
{
// 边缘标识
"Id": 821236535918600
}响应示例
{
"Id": 821236535918600,
// 当前状态
"Fault":{
"name":"NORMAL",
"value":0,
"text":"正常"
},
// 状态更新时间戳
"Timestamp": 175234567835
// 响应状态码
"Status": 2
}新建边缘端(ServoCreate)
创建新的边缘端用于通信, 边缘端必须指定其所属的区域标识(ZoneId)参数; 新创建的边缘端处于禁用状态,后续还需为边缘端添加设备。
请求示例
{
// 区域标识(必要)
"ZoneId": 821305322504207,
// 名称(必要)
"Name": "伺服器1",
// 型号(可选)
"Model": "J001",
// 备注(可选)
"Remark": "示例伺服器",
// 启用或禁用(可选)
"Enable": true
}响应示例
{
"ZoneId": 821305322504207,
"Name": "伺服器1",
"Model": "J001",
"Remark": "示例伺服器",
"Enable": true,
// 边缘标识
"Id": 821236535918600,
// 创建时间
"Created": "2024-09-12 14:36:34",
// 响应状态码
"Status": 2
}修改边缘端(ServoUpdate)
通过边缘端标识(Id)修改边缘端的常规字段值。 边缘端所属区域调整须通过 移动边缘端(ServoMove) 接口实现; 边缘端的启用或禁用须通过 启用或禁用边缘端(ServoEnable) 接口实现。
请求示例
{
// 边缘标识(必要)
"Id": 821236535918600,
// 名称(必要)
"Name": "伺服器1",
// 型号(可选)
"Model": "J001",
// 备注(可选)
"Remark": "示例伺服器"
}响应示例
{
"Id": 821236535918600,
"Name": "伺服器1",
"Model": "J001",
"Remark": "示例伺服器",
// 更新时间
"Updated": "2024-09-12 16:20:15",
// 响应状态码
"Status": 2
}启用或禁用边缘端(ServoEnable)
启用或禁用指定边缘端。 被禁用的边缘端将不能连接服务端(JOYZL SCADA Server), 服务端(JOYZL SCADA Server)也不在接收此边缘端推送的数据, 但是边缘端与本地设备的连接和通信并不要求中断。
请求示例
{
// 边缘标识(必要)
"Id": 821236535918600,
// 启用或禁用(必要)
"Enable": true
}响应示例
{
"Id": 821236535918600,
"Enable": true,
// 更新时间
"Updated": "2024-09-12 14:36:34",
// 响应状态码
"Status": 2
}重载边缘端(ServoReload)
要求边缘端程序重新加载所有相关配置(设备、属性、等)。 边缘端程序收到重载指令后,会断开与所有设备的连接, 然后从服务端(JOYZL SCADA Server)获取最新的数据, 之后重新与本地设备建立连接。
请求示例
{
// 边缘标识(必要)
"Id": 821236535918600
}响应示例
{
// 响应状态码
"Status": 2
}重启边缘端(ServoRestart)
远程重启边缘端主机。 边缘端程序收到重启指令后会首先断开所有连接然后重启操作系统。 如果边缘端未连接到服务端(JOYZL SCADA Server),无法执行远程重启。
请求示例
{
// 边缘标识(必要)
"Id": 821236535918600
}响应示例
{
// 响应状态码
"Status": 2
}移动边缘端(ServoMove)
移动边缘端到另一个区域,使其成为另一个区域的边缘端。 移动边缘端并不会影响其中的设备通信。
请求示例
{
// 边缘标识(必要)
"Id": 821196270600196,
// 区域标识(必要)
"ZoneId": 821305322504207
}响应示例
{
"Id": 821196270600196,
"ZoneId": 821305322504207,
// 更新时间
"Updated": "2024-09-12 14:36:34",
// 响应状态码
"Status": 2
}删除边缘端(ServoDelete)
删除边缘端时,边缘端中的设备以及设备中的属性和属性关联的触发器都将被删除。
请求示例
{
// 边缘标识(必要)
"Id": 821236535918600
}响应示例
{
"Id": 821236535918600,
// 响应状态码
"Status": 2
}边缘端登录(ServoLogin)
此接口是边缘端专用的,用户和第三方系统不应使用此接口。
请求示例
{
// 边缘标识(必要)
"Id": 821236535918600
}响应示例
{
"Id": 821236535918600,
"Servo": {
"Id": 821236535918600,
"ZoneId": 821305322504207,
"Name": "伺服器1",
"Model": "J001",
"Remark": "示例伺服器",
"Enable": true,
"Created" : "2024-9-12 8:04:10",
"Updated" : "2024-9-12 8:04:10"
},
// 响应状态码
"Status": 2
}通知属性值(AttributeNotice)
此接口是边缘端专用的,用户和第三方系统不应使用此接口。
请求示例
{
// 属性值集合
"Values":[
{
"AttributeId": 6892182778556009,
"Value":{
"Type": 1,
"Value": true,
"Timestamp": 1735698893423
}
}
...
]
}响应示例
{
"Values":[],
// 响应状态码
"Status": 2
}