RS485设备通过DTU上传数据到阿里云物联网平台

在开始之前,首先需要搞明白以下几个概念,RS485, Modbus协议和DTU。

RS485,基础概念自行度娘,这里如果简单理解的话就是一种串行通信标准。非硬件工程师其实记住RS485有4条线,A,B,VIM和GND。 可简单理解为A,B作为数据传输,VIM和GND作为电源的正负。在设备接入上一般是A口对A口, B口对B口。

Modbus协议, 一种通信协议,而且是现在很多工业的电气设备上都会用到的。稍后我们会在例子中讲到。

DTU, 数据传输单元,通过DTU,可以将RS485设备的数据传输到MQTT或者其他地方。

简单理解上面的概念后,我们开始进行数据的接入。

1. 首先进行硬件之间的对接,将RS485的A口接入DTU的A口, B口接入B口。在这里要值得注意得是,因为RS485设备是属于被动设备,需要由上位机发起询问后才会返回传感器上的数据。具体的数据格式需要根据自己手上的设备来确定。

以老司机手里的这款温湿度传感器为例,在产品说明书的章节里面,描述了这款传感器的问询参数:

地址码功能码起始地址数据长度校验码低位校验码高位
0x010x030x00,0x000x00,0x020xC40x0B

这说明了,如果我们需要让传感器返回传感器的数据,我们需要对传感器下发如下的命令:

010300000002C40B 

为了便于大家理解, 我们这样来看这串命令

01【我们要查询地址为01的设备,默认的地址为01】

03【使用功能03】

0000【从这里开始查询】

0002【数据长度】

C40B【验证码】

如果指令下发正常,将会返回下面的数据:

地址码功能码字节数数据值(湿度、温度)校验码低位校验码高位
0x010x030x040x02 0x3F 0x01 0x060x4A0x15

我们还是把数据拆分起来看一下,如果返回正常,我们将会得到下面的数据。

010304023F01064A15

其中023F0106就是我们期望得到的数据,因为返回的值是16进制的,我们根据产品手册的描述,得知023F和0106分别表示在十六进制下的温度和湿度,我们再进行转换后就可以得到实际10进制下的温度和湿度了。

2. 在我们理解了如何下发数据到设备,以及读取设备返回的值后。我们开始在阿里云物联网平台进行操作。

2.1 首先创建产品,这里要注意的是,因为我们的设备是一个4G的DTU,所以联网方式选择蜂窝,数据格式选择透传(因为我们从DTU拿到的数据并不是JSON格式的)

当我们产品创建好了后,我们可以看到我们的物模型的透传伤上行和下行的TOPIC。

2.2  【重点来了】因为我们透传过来的数据并不是能直接被云平台可以解析的,所以阿里云物联网平台提供了【消息解析】这么一个功能。

为了方便理解,我们可以看一下一次设备上报将会经过哪些步骤。

通过图,我们可以看到,设备通过DTU把设备上传后,首先云平台通过MQTT的TOPIC接手到消息后,会调用RawDataToProtocol讲数据从 原始数据解析道协议数据,接着云端进行一个响应up_raw.

我们从DTU上行收到的数据如下:

最终通过转换之后得到的数据如下:

{"Params":"01030402e40080ba1c","ResultData":{"method":"thing.event.property.post","fHead":1,"id":"50594532","addr":"1","params":{"Humidity":74,"temperature":12.8},"version":"1.0","fun":"3"},"RequestId":"null","Content":"null","Reason":"success","clientId":"null"}

 在这里我们可以看到我们已经拿到了设备上行的数据,即{"Humidity":74,"temperature":12.8}

这里之所以能进行转换,就是我们刚提到的消息解析所进行的。消息解析只是JS,PYTHON,PHP进行编写。

老司机使用的是PYHON,我们来看一下代码


ALINK_PROP_REPORT_METHOD = 'thing.event.property.post'  # 物联网平台Topic,设备上传属性数据到云端。

def raw_data_to_protocol(bytes):
     

    uint8Array = []
    for byteValue in bytes:
        uint8Array.append(byteValue & 0xff)

    fHead = uint8Array[0]
    jsonMap = {}
    jsonMap['fHead'] = fHead
    jsonMap['method'] = ALINK_PROP_REPORT_METHOD
    jsonMap['version'] = '1.0'
    jsonMap['id'] = str(bytes_to_int(uint8Array[1:5]))
    jsonMap['addr'] = str(bytes_to_int(uint8Array[0:1]))
    jsonMap['fun'] = str(bytes_to_int(uint8Array[1:2]))
    params = {}
    params['Humidity'] = float(bytes_to_int(uint8Array[3:5]))/10
    params['temperature'] = float(bytes_to_int(uint8Array[5:7]))/10

    jsonMap['params'] = params

    return jsonMap



# byte转成int。
def bytes_to_int(bytes):
    data = ['%02X' % i for i in bytes]
    return int(''.join(data), 16)

 在上面的代码上,我们可以看到消息解析 讲收到的消息进行了几次转换,得到了相对应的数据。

我们这里着重描述一下如何获取到温度和湿度

params['Humidity'] = float(bytes_to_int(uint8Array[3:5]))/10
params['temperature'] = float(bytes_to_int(uint8Array[5:7]))/10

我们回顾一下,上述代码其实是对010304023F01064A15进行了解析。而根据传感器的约定,数据的第四,第五位表示的是湿度,第六,第七表示的是温度。

01 03 04 02 3F 01 06 4A 15

所以uint8Array[3:5] 我们拿到的是 02 3F,并将bytes转换成int后,再除以10,则得到了我们的湿度。

uint8Array[5:7] => 01 06 进行转换,再除以10,得到温度。

以上就是通过消息解析,将透传的数据在阿里云平台上进行转换的方式了。

值得注意的是,由于RS485设备属于被动设备,有的DTU可以自动轮讯,有的DTU是需要上位机下发指令后才能对RS485设备发送指令。

  • 2
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
DTU(Data Terminal Unit)是一种数据终端单元,用于实现远程设备与云端之间的数据传输和通信。阿里云是阿里巴巴集团提供的云计算服务平台,提供了丰富的云端资源和功能。 要实现DTU自动连接阿里云设备,可以按照以下步骤进行: 1. 准备DTU设备:首先,需要有一个支持数据传输的DTU设备,该设备需要具备与云端进行通信的能力。可以选择阿里云支持的DTU设备或其他兼容性较好的设备。 2. 设备注册:在阿里云平台上注册和配置DTU设备。这需要在阿里云控制台中创建一个物联网平台实例,并在实例中添加DTU设备的信息。 3. DTU设置:在DTU设备中配置连接阿里云平台所需的参数,如设备标识、连接协议、通信凭证等。可以使用DTU提供的设置工具或者通过串口等方式进行配置。 4. 云平台通信:DTU设备根据配置参数,通过网络与阿里云平台进行连接。在连接建立后,DTU会自动将设备数据上传到云平台,并接收云端下发的指令。 5. 数据传输与处理:在阿里云平台上,可以通过物联网平台的控制台对DTU设备进行实时监控和数据处理。可以设置数据规则,将上传数据进行过滤、存储和分析等操作。 通过以上步骤,就可以实现DTU设备的自动连接阿里云设备。这样,用户可以随时随地监控和管理DTU设备,实现对远程设备的集中控制和数据管理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

炒陈饭老司机

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值