亿佰特E810-DTU-UDP接入ThingsKit
1、准备工作
1-1、硬件设备准备
本次测试本次测试所需硬件为亿佰特E810-DTU(RS485),普锐森社温湿度变送器(扁卡轨壳485型)以及各类线材:
普锐森社温湿度变送器(扁卡轨壳485型),型号:PR-3008-WS-N01
购买地址:
亿佰特E810网关,型号:E810-DTU(RS485)
购买地址:
准备好设备后按照相关说明书接线,该网关以及传感器主要接入一组12VDC电源以及AB数据线,本次测试组网方式为以太网。
2、ThingsKit配置
2-1、新增转换脚本
根据设备实际情况需要新增网关子设备解析脚本、网关鉴权脚本和网关上行脚本:
2-1-1、网关子设备解析脚本
var teleData = {};
teleData.source = params;
tempVal = params;
teleData.wendu = (parseInt('0x'+tempVal.substr(10, 4))*0.1).toFixed(2);
teleData.shidu = (parseInt('0x'+tempVal.substr(6, 4))*0.1).toFixed(2);
out.datas = teleData;
out.telemetry = true;
💡 提示
每次创建脚本,脚本状态默认关闭,将脚本状态改为开启才能被调用。
本次测试传感器相关说明:
2-1-2、网关鉴权脚本
由于UDP方式上传至平台,设备只支持数据携带注册包上传,所以需要设置特殊鉴权脚本:
function arraryUD(arr) {
var newArr = [];
for (var i = arr.length-1;
i >= 0;
i--) {
newArr.push(arr[i]);
}
return newArr;
}//数组反向排序
function hex2ascll(hexCharCodeStr) {
var trimedStr = hexCharCodeStr.trim();
//去掉字符串两端的空格
var trimedStr = (trimedStr).toString();
//转换成字符串,如果是整数会出错
var rawStr = trimedStr.substr(0, 2).toLowerCase() === "0x" ? trimedStr.substr(2): trimedStr;
var len = rawStr.length;
if (len % 2 !== 0) {
alert("存在非法字符!");
return "";
}
var curCharCode;
var resultStr = [];
for (var i = 0;
i < len;
i = i + 2) {
curCharCode = parseInt(rawStr.substr(i, 2), 16);
resultStr.push(String.fromCharCode(curCharCode));
}
return resultStr.join("");
}//hex转ascii码
var temp = {};
temp.value = params;
temp.arr = arraryUD(temp.value).slice(18);
temp.result = arraryUD(temp.arr).join("");
temp.hex = temp.result.toString(16);
/*必填:设备的访问令牌*/
out.password = hex2ascll(temp.hex);
/*选填:设备鉴权成功后响应给设备的信息*/
out.success = params;
2-1-3、网关上行脚本
由于UDP方式上传至平台,设备只支持数据携带注册包上传,需要将原数据去掉注册包留下响应帧,所以添加了特殊网关上行脚本:
function arraryUD(arr) {
var newArr = [];
for (var i = arr.length-1;
i >= 0;
i--) {
newArr.push(arr[i]);
}
return newArr;
}//数组反向排序
var temp = {};
var teleData = {};
temp.value = params.split('');
temp.arr = arraryUD(temp.value).slice(18); //获取反向后注册包数组
temp.length = temp.arr.length;
temp.RX = temp.value.slice(temp.length); //从原数据中删除注册包得到响应帧
temp.result = temp.RX.join("");
temp.hex = temp.result.toString(16);
teleData.source = temp.hex;
slaveDevice = teleData.source.substr(0, 2); //从响应帧中获取传感器地址
teleData[slaveDevice] = teleData.source;
out.datas = teleData;
out.telemetry = true;
💡 提示
本脚本只是针对测试使用的传感器,若传感器返回寄存器数不为2,则需修改脚本对应参数。
2-2、创建产品配置》》网关设备【UDP】方式
💡 提示
上传数据为标准modbus响应帧时使用平台提供的默认脚本即可,但若注册包和响应帧为其他格式报文则需要新建对应脚本处理。
💡 注意
由于本设备只支持注册包与返回响应帧一起上传,所以需要选择2-1-2创建的鉴权脚本和2-1-3创建的网关上行脚本。
💡 提示
如果需要查看网关上传至平台的原数据,请在网关产品添加标识符为source,类型为text的物模型。
2-3、创建产品》网关子设备
💡 提示
本处创建物模型中标识符需要与网关子设备解析处一致,物模型是返回数据展示界面。
2-4、创建设备》网关设备
创建设备:
💡 提示
若无组织可直接新增。
💡 注意
如果网关设备不需要对照设备地址码,可根据图中将标识符类型改为“自定义”。
修改凭证:
💡 提示
访问令牌需要与网关处一致,凭据类型必须为Access Token。
2-5、创建设备》网关子设备
💡 提示
网关子设备组织需与网关设备一致。
💡 注意
TCP协议的网关子设备必须填写地址码,可以选择Modbus类型填写对应地址码,也可以选择自定义类型填写。
3、E810网关配置
3-1、通过配置软件访问设备
本测试网关需要在亿佰特官网下载对应型号配置软件进行操作。
打开官方配置软件:
💡 提示
本配置软件支持跨网段查询,所以不需要提前修改网卡网段,但需要在搜索设备前选中对应的网卡。
💡 注意
设备与PC必须处于同一局域网中。
3-2、使用配置软件修改设备参数
在能够查询到设备后,使用配置软件对设备进行修改:
3-2-1、修改设备网络参数
为了使设备能够正常访问外网,我们需要将设备网络模式修改为DHCP:
💡 提示
设备修改为DHCP并保存后,需要重启设备才能生效,重启后的设备可以通过配置软件访问。
💡 注意
在确定设备ip后也可以使用浏览器访问ip登录设备管理后台,账号和密码都是admin,本次测试不讨论这里的操作。
3-2-2、修改设备串口参数
本次测试传感器相关说明:
💡 提示
已将传感器波特率修改为9600bps。
3-2-3、修改设备上传参数
💡 提示
服务器的地址以及端口要根据实际情况填写平台的ip以及UDP端口。
4、数据测试
4-1、下发传感器请求帧
在前面的步骤中,我们已经将平台的配置和网关设备的配置完成了,但没有实现网关下发请求帧获取传感器数据的过程和注册包的发送,下面展示注册包的设置以及请求帧下发的两种方式:
4-1-1、修改心跳包和注册包
💡 注意
测试场景注册包内容必须与网关设备Access Token一致,且使用ASCII码。
本次测试传感器相关说明:
4-1-2、使用任务中心
💡 提示
任务中心功能支持自定义下发字符串,也可以根据Modbus协议生成请求帧并下发。
💡 注意
任务中心任务必须在开启改任务才会自动执行。
4-2、验证数据
使用串口心跳包或任务中心任意一种下发请求帧方式后就可以来验证数据上传效果:
💡 注意
验证数据前必须保证网关设备以及网关子设备都已上线,若没有上线或出现物模型无读数的情况,请检查之前的步骤以及接线、网络是否出错,特别是网关注册包上传方式最好重新写入。