• [技术知识] 1分钟快速了解轴流泵
    轴流泵是叶片泵的一种,它的叶片单元为一系列翼型,围绕轮毂构成圆柱叶栅。由于流过叶轮的流体微团的迹线理论上位于与转轴同心的圆柱面上,经过导叶消旋之后认为出流沿着轴向,所以这种泵称为轴流泵,也称为卡普兰(Kaplan)泵。轴流泵的流量较大,可达60m3/s;单级扬程较低,通常为1~25m。因此,轴流泵的比转速较高,其常用范围在500~1600 之间。轴流泵的优点是:①结构简单,在给定工作参数条件下,横截面积(垂直于转轴的平面)和重量较其他类型的叶片泵小;②不管是在停机状态还是运行状态,都可以通过改变叶片安放角而很容易地改变流量;③轴流泵通常都是立式结构,因此其占地面积小,另外还可以露天安装。轴流泵的缺点是:①自吸能力有限;②单级扬程低;③效率曲线陡,高效区比较窄,如果没有叶轮叶片安放角的调节装置,当偏离设计工况运行时经济性差。轴流泵广泛应用于灌溉、给排水、内河航道疏浚、动力工程以及其他需要输送大量的液体而扬程要求不高的领域,在核电工程、船舶推进领域也有应用。与离心泵设计理论不同,现在轴流泵的设计理论多种多样,各有特点。轴流泵几乎都是单级的。大部分是立式安装以减小占地面积,此外也有卧式安装和斜轴安装的形式,以用于流量特别大、扬程非常低的场合。无论何种安装形式,轴流泵的过流部件基本都是由吸入口、叶轮、导叶和导叶后的弯管等组成,如图 1 所示。图1 轴流泵基本过流部件
  • [技术干货] 采用华为云IOT平台设计的高速公路多节点温度采集系统(STM32+NBIOT)
    一、前言当前的场景是,在高速公路上部署温度采集设备,在高速路地表安装温度检测传感器,检测当前路段的路面实际温度。一段高速路上有多个地点需要采集温度数据。 采集温度数据需要上传到云平台进行数据存储,并且通过可视化界面展示温度变化曲线,支持查询最近几天的温度信息。二、设计思路(1)云平台选型:使用华为云物联网云平台。(2)云数据存储: 使用OBS存储,存放设备上传的历史数据。(3)设备选项:NBIOT模块+温度采集模块,实现温度采集上报。(4)数据可视化:采用华为云IoT应用侧接口,获取传感器设备上传到云端的数据,在本地设计界面进行可视化显示温度数据。下面是温度数据可视化展示效果:本篇文章主要介绍设备上云的详细流程,介绍华为云物联网云端产品、设备创建流程,数据转存方式,应用侧开发接口等等。硬件选型:(1)STM32开发板: STM32F103C8T6(2)NBIOT模块--BC26BC26模块是一款高性能、低功耗、多频段LTE Cat NB1无线通信模块。(3)温度采集模块pt100是铂热电阻,它的阻值会随着温度的变化而改变。PT后的100即表示它在0℃时阻值为100欧姆,在100℃时它的阻值约为138.5欧姆。其工作原理:当PT100在0℃时,其电阻为100欧姆。它的电阻会随着温度的升高而上升,并且它的电阻会匀速增加。热电阻是一种常用于中低温的温度传感器。它的工作原理是基于电阻的热效应,即电阻的阻值随温度的变化而变化。铂金热敏电阻的热阻精度最高,具有抗振动、稳定性好、耐高压等特点。因此,它被制成各种标准温度计进行测量和校准。三、华为云IOT平台3.1 创建产品官网地址: cid:link_12(1)设备接入IOTDA在产品页面找到iot物联网,选择设备接入IOTDA设备接入服务(IoT Device Access)是华为云的物联网平台,提供海量设备连接上云、设备和云端双向消息通信、批量设备管理、远程控制和监控、OTA升级、设备联动规则等能力,并可将设备数据灵活流转到华为云其他服务,帮助物联网行业用户快速完成设备联网及行业应用集成,基础版每月一百万条消息免费。在页面上选择免费试用。点击后,会进入到设备接入控制台页面。(2)设备接入地址在基础版详情页面,点击右边的按需计费详情,可以查看物联网服务器接入的IP地址,端口号、接入方式。如果是设备接入,可以选择MQTT或者MQTTS协议,在单片机上只有MQTT协议验证比较方便,通过MQTT三元组即可完成设备连接,当前我这里的设备选择是MQTT协议连接华为云平台。 域名:a161a58a78.iot-mqtts.cn-north-4.myhuaweicloud.com  IP地址: 121.36.42.100  端口号: 1883(3)创建产品在左边选项卡里点击产品,进入产品页面,点击右上角创建产品。根据自己的产品信息,填写表单:(4)完成产品创建点击查看详情,可以进入到创建成功的产品页面。(4)定义产品模型产品创建之后,接着需要在平台上构建一款设备的抽象模型,使平台理解该款设备支持的功能。比如:温度采集设备肯定会向云平台上传采集的温度信息;在产品模型里就可以定义一个温度的属性字段。选择下面的自定义模型。添加服务ID。添加属性。新增属性字段。当前在多节点温度采集的设备里,主要是采集温度上传,这里就新增一个温度的属性。产品模型创建完成。3.2 创建设备(1)创建单个设备设备注册的方式有很多:【1】创建支持单个设备手动创建。【2】如果设备特别多可以选择批量注册。【3】通过API接口进行动态注册。当前为了演示流程,这里选择第一种方式,手动创建单个设备。在设备页面,选择所有设备选项,点击右边的注册设备按钮。(2)单设备注册填写信息点击注册设备之后,会弹出一个表单填写信息。其中产品就选择刚才创建的产品,设备标识码这一项一般是填设备的ID(设备的唯一标识符,方便绑定设备)。目前还没有对接硬件,我这里就填dev1,方便接下来的测试。 下面的设备ID这一项如果不填,会自动生成,可以不管;最后输入密匙(这个密匙的作用:通过对每个设备进行身份验证,可以安全地将每个设备连接到平台,并且安全地管理这些设备),填好之后点击确定。(3)设备创建完成创建好之后,保存生成的设备ID和密匙。得到的密匙和ID的格式文本如下: {      "device_id": "6353a8163ec34a6d03c8dfe5_dev1",      "secret": "12345678"  }这个设备密匙和ID,后面生成MQTT登录参数时需要用到。(4)创建多个温度设备节点由于本项目是实现多节点温度上传到云平台,每个节点都是一个独立的温度采集设备,为了方便演示效果,还需要多创建几个设备。接下来的创建流程,和刚才第一个设备一样,这里就不再截图演示了。点击创建设备按钮,继续注册。目前一共创建了4个设备,其中main_dev设备是用来作为显示终端,在本地用显示屏显示其他温度采集节点采集的温度信息。 剩下3个设备dev1,dev2,dev3是表示3个独立的温度采集节点。这4个设备的密匙和ID信息如下: {      "device_id": "6353a8163ec34a6d03c8dfe5_dev1",      "secret": "12345678"  }  ​  ​  {      "device_id": "6353a8163ec34a6d03c8dfe5_dev2",      "secret": "12345678"  }  ​  ​  {      "device_id": "6353a8163ec34a6d03c8dfe5_dev3",      "secret": "12345678"  }  ​  ​  {      "device_id": "6353a8163ec34a6d03c8dfe5_main_dev",      "secret": "12345678"  }3.3 模拟设备上云测试目前设备创建之后,这些设备都还没有激活。接下来会使用MQTT客户端来模拟真实设备上云,上传温度数据。这里的上云,包括数据交互都采用MQTT客户端来模拟实现,不涉及到实际的硬件,只要模拟能测试成功,并且能得到自己想要的结果,那硬件就没有问题了。(1)生成MQTT鉴权三元组设备要连接华为云平台的方式,在第一节创建产品的时候就已经介绍了,本次项目里的设备是采用MQTT协议接入云平台。 在完成设备模拟上云之前,需要先生成设备的MQTT协议鉴权三元组。华为云提供了一个在线工具,用来生成MQTT鉴权三元组: cid:link_8工具打开的界面如下效果:前面两行就是填设备创建后生成的设备ID和设备密匙,填好之后,生成下面3行信息,生成的3行就是MQTT协议登录需要用的参数。按照格式分别生成4个设备的鉴权信息:得到的三元组如下: ClientId  6353a8163ec34a6d03c8dfe5_dev1_0_0_2022102209  Username  6353a8163ec34a6d03c8dfe5_dev1  Password  c58c45d514832b119b4302eafb3e74854849ca94079e9aed75efedf176e9c388  ​  ClientId  6353a8163ec34a6d03c8dfe5_dev2_0_0_2022102209  Username  6353a8163ec34a6d03c8dfe5_dev2  Password  c58c45d514832b119b4302eafb3e74854849ca94079e9aed75efedf176e9c388  ​  ClientId  6353a8163ec34a6d03c8dfe5_dev3_0_0_2022102209  Username  6353a8163ec34a6d03c8dfe5_dev3  Password  c58c45d514832b119b4302eafb3e74854849ca94079e9aed75efedf176e9c388  ​  ClientId  6353a8163ec34a6d03c8dfe5_main_dev_0_0_2022102209  Username  6353a8163ec34a6d03c8dfe5_main_dev  Password  c58c45d514832b119b4302eafb3e74854849ca94079e9aed75efedf176e9c388(2)MQTT客户端模拟设备登录得到MQTT三元组之后,接下来用MQTT客户端模拟设备登录云平台。按照软件的输入框提示,输入对应的信息,点击登录。 其中的IP地址和端口号在第一小节的产品创建里就介绍过了。 后面输入的这3行就是上一步生成的MQTT鉴权三元组。登录成功。然后打开云平台的控制台,查看设备在线情况:可以看到dev1已经在线了, 刚才模拟的设备就是dev1。(3)主题订阅与发布目前设备已经成功登录,接下来要解决的问题就是数据传输问题了。MQTT协议里要理解的两个概念就是主题订阅,主题发布。 设备上传数据到平台,属于 主题发布。 设备想要知道其他设备的数据或者云平台下发的指令,需要进行主题订阅。帮助文档的地址: cid:link_6MQTT消息由固定报头(Fixed header)、可变报头(Variable header)和有效载荷(Payload)三部分组成。其中固定报头(Fixed header)和可变报头(Variable header)格式的填写请参考MQTT标准规范,有效载荷(Payload)的格式由应用定义,即设备和物联网平台之间自己定义。常见MQTT消息类型主要有CONNECT、SUBSCRIBE、PUBLISH。 CONNECT:指客户端请求和服务端连接。有效载荷(Payload)的主要参数,参考设备连接鉴权填写。  SUBSCRIBE:指客户端订阅请求。有效载荷(Payload)中的主要参数“Topic name”,参考Topic定义中订阅者为设备的Topic。  PUBLISH:平台发布消息。  可变报头(Variable header)中的主要参数“Topic name”,指设备上报到物联网平台时发布者为设备的Topic。详细请参考Topic定义。  有效载荷(Payload)中的主要参数为完整的数据上报和命令下发的消息内容,目前是一个JSON对象。  ​  上行Topic是指设备向平台发送请求,或上报数据,或回复响应。  下行Topic是指平台向设备下发指令,或回复响应。  设备与平台建立连接后,需要订阅下行Topic,否则无法收到平台下发的指令或回复的响应。应用侧接口的调用,需要设备侧的配合,例如应用侧下发命令,设备侧需要先订阅“平台命令下发”的下行Topic,否则设备无法收到平台命令,应用下发命令的接口也会报超时。在产品页面,可以看到主题的格式,以及对于主题的用途:**【1】订阅主题对于设备而言,一般会订阅平台下发消息给设备 这个主题。设备想接收平台下发的消息,就需要订阅平台下发消息给设备 的主题,订阅后,平台下发消息给设备,设备就会收到消息。主题的格式如下: $oc/devices/{device_id}/sys/messages/down        以dev1设备1为例,最终的格式:  $oc/devices/6353a8163ec34a6d03c8dfe5_dev1/sys/messages/down【2】发布主题对于设备,发布主题,也就显示向云平台上传数据。发布的主题格式如下: $oc/devices/{device_id}/sys/properties/report  ​  以dev1设备1为例最终的格式:  $oc/devices/6353a8163ec34a6d03c8dfe5_dev1/sys/properties/report发布主题时,需要上传数据,这个数据格式是JSON格式。上传的JSON数据格式如下: {    "services": [     {        "service_id": <填服务ID>,        "properties": {          "<填属性名称1>": <填属性值>,          "<填属性名称2>": <填属性值>,          ..........       }     }   ]  }根据JSON格式,一次可以上传多个属性字段。 这个JSON格式里的,服务ID,属性字段名称,属性值类型,在前面创建产品的时候就已经介绍了,不记得可以翻到前面去查看。根据这个格式,组合温度节点一次上传的数据: {"services": [{"service_id": "temp","properties":{"temp":24.6}}]}(4)MQTT客户端模拟设备上报数据打开MQTT客户端填入订阅主题,发布主题,和需要发布的数据,然后分别点击订阅主题按钮,发布主题按钮。 右边提示成功之后,就可以打开云平台看上传的效果了。 (这里是以dev1,设备1为例)打开云平台看到dev1已经在线。点击dev1,进去查看设备上传的数据。 可以看到,刚才上传的数据已经收到了。到此,设备上传数据到云平台已经完成。四、设备数据转存如果设备上传的数据需要进行保存,后续进行分析做其他用途,可以利用数据转发服务,让平台将设备上报数据推送给自己的应用服务器,由应用服务器进行保存;也可以选择让平台将设备上报数据转发给OBS对象存储服务,由OBS进行存储,进行永久保存,非常方便。如果存储在OBS里,自己设计应用侧界面时,也可以直接拉取OBS里的数据下来进行显示,处理,分析。4.1 创建OSB存储桶地址: cid:link_11对象存储服务(Object Storage Service,OBS)是一个基于对象的存储服务,提供了海量、安全、高可靠、低成本的数据存储能力。(1)选择管理控制台(2)创建桶填充桶信息: 我这里选择的是 华北-北京一我这里因为要长期使用,这里选择1年的购买权。(3)创建成功4.2 配置数据转发规则(1)创建规则选择左侧导航栏的规则>数据转发,单击右上角的创建规则。填充规则转发的信息:参数名参数说明规则名称自定义,如: led_obs。规则描述自定义,如数据转发至OBS服务。数据来源选择“设备属性”。触发事件自动匹配“设备属性上报”。资源空间和上一步创建的产品所在的资源空间保持一致。(2)设置转发目标单击添加,设置转发目标。这里的区域选择--华北-北京一。 因为前面的OBS桶创建的时候,设置区域设置的是北京一,然后点击授权。授权之后,选择刚才创建的OBS桶,设置存储数据的目录和文件名字。存储的数据可以直接转存JSON数据到OBS存储桶,也可以存放成CSV文件到存储桶。如果选择存储JSON,就是直接将设备上传的数据存放到OBS存储里,如果选择存储CSV文件,可以自己选择需要存储的字段。 下面我演示一下存储成CSV文件时如何进行设置。 (选择JSON文件不需要进行任何设置,直接将设备上传的数据JSON存储进去了)。下面设置转发的字段: (如果提示没有授权,点击授权即可)这个转发字段就是表示需要存放的数据是那些,对于路灯而言,肯定是需要存储上报的温度、湿度、电量、光照强度的属性的。 这些属性在创建产品的时候设置,设备上报的也是这些属性。这是设备上传一次云平台的完整JSON数据格式: {    "resource": "device.property",    "event": "report",    "event_time": "20221018T131627Z",    "request_id": "5ee95a0c-262d-43c3-8d31-af453f9952ef",    "notify_data": {      "header": {        "app_id": "7211833377cf435c8c0580de390eedbe",        "device_id": "634e3e423ec34a6d03c84bfb_1126626497",        "node_id": "1126626497",        "product_id": "634e3e423ec34a6d03c84bfb",        "gateway_id": "634e3e423ec34a6d03c84bfb_1126626497"     },      "body": {        "services": [         {            "service_id": "temp",            "properties": {              "temp": 28,           },            "event_time": "20221018T131627Z"         }       ]     }   }  }当前设备上传到云端服务器有一个温度属性字段temp,如果想转发设备上传的这个温度字段,就可以这样写: notify_data.body.services[0].properties.temp后面的存储目标字段,为了好区分,直接填temp即可。如果设备还上传了其他属性字段也想转发,按照上面格式设置即可。如果存储数据时,想知道这个数据是那个产品,那个设备上传的,也可以将设备ID和产品ID转发存储起来:格式如下。 notify_data.header.app_id    notify_data.header.device_id下面是我设置好,转发存储的字段:确定后,点击设置完成。(3)测试规则设置好之后,在设置转发目标的页面点击测试。输入数据模板,然后点击连通性测试。如果测试结果显示成功,说明整体流程没有问题了。(4)启用规则设置完成后,点击启用规则。(6)数据上报测试为了验证转发规则是否生效,接下来使用MQTT客户端多上报几次数据到云平台。上传之后,打开OBS存储桶的控制台页面。打开转发规则存储的OBS桶。找到存储数据的文件,点击下载。下载下来,打开可以看到存储的数据:到此,数据转发,存储已经成功了。五、应用侧-可视化大屏开发对于数据的可视化显示,华为云提供了(Data Lake Visualization)一站式数据可视化平台,数据可视化服务(DLV)可以从OBS文件读取数据呈现为可视化报表,实现数据的可视化显示。下面是华为云的DLV大屏从OBS读取数据显示的流程:当前我这里的需求是需要在本地自己设计界面显示数据,没有采用华为云的DLV大屏,如果自己本地软件需要显示设备上传的数据,就需要使用华为云物联网的平台的应用侧API接口,读取设备上传的数据进行,本地进行显示;如果需要历史数据,可以读取OBS存储桶里存储的数据进行显示。5.1 应用侧接口帮助文档地址: cid:link_45.2 查询设备影子数据接口应用侧接口可以查询发送指令给设备查询属性,也可以读取设备的影子数据。【1】查询设备查询: 这个是实时查询,相当于应用侧接口发送指令给在线设备,设备收到指令,将当前最新的数据再上传。这个需要保证设备在线,离线是无法调用的。【2】影子数据:影子数据相当于保存设备上传的最新一次数据。 读取读取影子设备数据,是不需要设备在线。(1)接口URI地址请求方法GETURI/v5/iot/{project_id}/devices/{device_id}/shadow传输协议HTTPS(2)请求参数说明名称必选/可选类型位置说明X-Auth-Token必选StringHeader参数说明:用户Token。通过调用IAM服务 获取IAM用户Token接口获取,接口返回的响应消息头中“X-Subject-Token”就是需要获取的用户Token。Instance-Id可选StringHeader参数说明:实例ID。物理多租下各实例的唯一标识,一般华为云租户无需携带该参数,仅在物理多租场景下从管理面访问API时需要携带该参数。project_id必选StringPath参数说明:项目ID。获取方法请参见 获取项目ID。device_id必选StringPath参数说明:设备ID,用于唯一标识一个设备。在注册设备时直接指定,或者由物联网平台分配获得。由物联网平台分配时,生成规则为"product_id" + " " + "node_id"拼接而成。取值范围:长度不超过128,只允许字母、数字、下划线( )、连接符(-)的组合。(3)响应参数名称类型说明device_idString设备ID,用于唯一标识一个设备。在注册设备时直接指定,或者由物联网平台分配获得。由物联网平台分配时,生成规则为"product_id" + "_" + "node_id"拼接而成。shadowList[DeviceShadowData]()设备影子数据结构体。  名称类型说明service_idString设备的服务ID,在设备关联的产品模型中定义。desiredDeviceShadowProperties Object用户最近一次对设备下发的预期数据,Json格式,里面是一个个键值对,每个键都是产品模型中属性的参数名(property_name)。reportedDeviceShadowProperties Object设备最近一次上报的属性数据,Json格式,里面是一个个键值对,每个键都是产品模型中属性的参数名(property_name)。versionLong设备影子的版本,携带该参数时平台会校验值必须等于当前影子版本,初始从0开始。  名称类型说明propertiesObject设备影子的属性数据,Json格式,里面是一个个键值对,每个键都是产品模型中属性的参数名(property_name),目前如样例所示只支持一层结构。注意:JSON结构的key当前不支持特殊字符:点(.)、dollar符号($)、空char(十六进制的ASCII码为00),key为以上特殊字符无法正常刷新设备影子event_timeString事件操作时间,格式:yyyyMMdd'T'HHmmss'Z',如20151212T121212Z。(4)请求示例 GET https://{Endpoint}/v5/iot/{project_id}/devices/{device_id}/shadow  Content-Type: application/json  X-Auth-Token: ********  Instance-Id: ********(5)响应示例Status Code: 200 OK Content-Type: application/json  ​  {   "device_id" : "40fe3542-f4cc-4b6a-98c3-61a49ba1acd4",   "shadow" : [ {     "service_id" : "WaterMeter",     "desired" : {       "properties" : {         "temperature" : "60"       },       "event_time" : "20151212T121212Z"     },     "reported" : {       "properties" : {         "temperature" : "60"       },       "event_time" : "20151212T121212Z"     },     "version" : 1   } ]  }(6)错误码HTTP状态码错误码错误码英文描述错误码中文描述处理建议403IOTDA.000021Operation not allowed. User not found by IAM token or the authorized user has not subscribed IOTDA service.没有找到IAM Token所对应的用户信息或该用户没有订阅设备接入服务(IOTDA)请排查IAM Token所在用户是否订阅了设备接入服务(IOTDA)。404IOTDA.014000The device does not exist.设备不存在请排查请求参数是否有误并确认是否有在平台注册该设备。500IOTDA.000020Decrypt IAM token failed.5.3 接口调试在线调试地址:https://apiexplorer.developer.huaweicloud.com/apiexplorer/debug?product=IoTDA&api=ShowDeviceShadow下面是调试影子 数据查询接口,查询设备影子数据: 右边返回的是设备上传的最新数据。5.5 接口总结 请求地址:  https://iotda.cn-north-4.myhuaweicloud.com/v5/iot/{project_id}/devices/{device_id}/shadow  ​  请求方式: GET  ​  请求头:  {   "X-Auth-Token": "这个需要自己获取",     "Content-Type": "application/json"  }5.5 如何获取X-Subject-Token使用API访问华为云的所有服务接口,都需要填X-Subject-Token参数,下面介绍步骤:(1)创建一个新的IAM帐户鼠标悬停在右上角的用户名称上,弹出下拉框,选择统一身份认证。(2)选择创建用户(3)使用调试接口测试获取oken调试接口地址: https://apiexplorer.developer.huaweicloud.com/apiexplorer/debug?product=IAM&api=KeystoneCreateUserTokenByPassword右边响应头里的X-Subject-Token就是获取的token。(4)上面的这些账户名称从哪里获取?(5)请求地址和数据格式获取X-Subject-Token请求的地址: cid:link_10请求头数据:  {   "User-Agent": "API Explorer",   "X-Auth-Token": "******",   "Content-Type": "application/json;charset=UTF-8"   }请求体数据:  {     "auth": {       "identity": {         "methods": [           "password"         ],         "password": {           "user": {             "domain": {                 "name": "xxxxx"  //这里填当前主账户名称             },             "name": "xxxx",  //这个新建的子账户名称             "password": "xxxxx"    //这个是新建的子账户密码           }         }       },       "scope": {         "project": {           "name": "cn-north-4"         }       }     }   }(6)代码实现  /*   功能: 获取token   */   void Widget::GetToken()   {       //表示获取token       function_select=3;         QString requestUrl;       QNetworkRequest request;         //设置请求地址       QUrl url;         //获取token请求地址       requestUrl = QString("https://iam.%1.myhuaweicloud.com/v3/auth/tokens")                   .arg(SERVER_ID);         //自己创建的TCP服务器,测试用       //requestUrl="http://10.0.0.6:8080";         //设置数据提交格式       request.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("application/json;charset=UTF-8"));         //构造请求       url.setUrl(requestUrl);         request.setUrl(url);         QString text =QString("{"auth":{"identity":{"methods":["password"],"password":"       "{"user":{"domain": {"       ""name":"%1"},"name": "%2","password": "%3"}}},"       ""scope":{"project":{"name":"%4"}}}}")               .arg(MAIN_USER)               .arg(IAM_USER)               .arg(IAM_PASSWORD)               .arg(SERVER_ID);         //发送请求       manager->post(request, text.toUtf8());   }5.6 查询设备影子数据代码(1)这是请求代码 //查询设备属性  void Widget::Get_device_properties()  {      //表示获取token      function_select=0;  ​      QString requestUrl;      QNetworkRequest request;  ​      //设置请求地址      QUrl url;  ​      //获取token请求地址      requestUrl = QString("https://iotda.%1.myhuaweicloud.com/v5/iot/%2/devices/%3/shadow")                   .arg(SERVER_ID)             .arg(PROJECT_ID)             .arg(device_id);  ​      //设置数据提交格式      request.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("application/json"));  ​      //设置token      request.setRawHeader("X-Auth-Token",Token);  ​      //构造请求      url.setUrl(requestUrl);  ​      request.setUrl(url);  ​      //发送请求      manager->get(request);  }  ​  //更新设备属性  void Widget::on_pushButton_update_device_clicked()  {      Get_device_properties();  }(2)这是请求一次返回的JSON数据 {    "device_id": "6353a8163ec34a6d03c8dfe5_dev1",    "shadow": [     {        "service_id": "temp",        "desired": {          "properties": null,          "event_time": null       },        "reported": {          "properties": {            "temp": 45.6         },          "event_time": "20221024T013607Z"       },        "version": 49     }   ]  }5.7 界面设计最终效果六、硬件部分6.1 MQTT版本注意:华为云、OneNet、腾讯IOT 等平台规定接入的MQTT协议版本必须是3.1.1 。在BC26里,需要执行这行代码配置MQTT协议版本为3.1.1 AT+QMTCFG="version",0,46.2 BC26上云配置代码 #include "BC26.h"  ​  //BC26复位  //引脚是PC0  //高电平有效  void BC26_Reset(void)  {      //开时钟      RCC->APB2ENR|=1<<4;  ​      //配置GPIO口      GPIOC->CRL&=0xFFFFFFF0;      GPIOC->CRL|=0x00000003;            //开始复位      GPIOC->ODR|=1<<0;      DelayMs(2000);      GPIOC->ODR&=~(1<<0);  }  ​  ​  /*  函数功能:向BC26模块发送指令  函数参数:   char *cmd 发送的命令    char *check_data 检测返回的数据  返回值: 0表示成功 1表示失败  */  u8 BC26_SendCmd(char *cmd,char *check_data)  {     u16 i,j;     for(i=0;i<5;i++) //测试的总次数     {        USART2_RX_FLAG=0;        USART2_RX_CNT=0;    memset(USART2_RX_BUFFER,0,sizeof(USART2_RX_BUFFER));    USARTx_StringSend(USART2,cmd); //发送指令        for(j=0;j<500;j++) //等待的时间(ms单位)       {            if(USART2_RX_FLAG)           {                USART2_RX_BUFFER[USART2_RX_CNT]='\0';                if(strstr((char*)USART2_RX_BUFFER,check_data))               {                    return 0;               }                else break;           }            delay_ms(30); //一次的时间       }     }     return 1;  }  ​  ​  ​  ​  //初始化BC26模块  int BC26_Init(void)  {      if(BC26_SendCmd("AT\r\n","OK"))     {          USART1_Printf("BC26模块不存在.\r\n");          return 1;     }      else     {          USART1_Printf("BC26模块正常!\r\n");     }  ​      if(BC26_SendCmd("AT+CIMI\r\n","OK"))     {          USART1_Printf("模块未插卡.\r\n");          return 3;     }      else     {          USART1_Printf("卡已经插好.\r\n");     }  ​        if(BC26_SendCmd("AT+CGATT=1\r\n","OK"))     {          USART1_Printf("配置:网络激活失败.\r\n");          return 3;     }      else     {          USART1_Printf("配置:网络激活成功.\r\n");     }            if(BC26_SendCmd("AT+CGATT?\r\n","OK"))     {          USART1_Printf("状态:网络激活失败.\r\n");          return 4;     }      else     {          USART1_Printf("状态:网络激活成功.\r\n");     }            if(BC26_SendCmd("AT+CSQ\r\n","OK"))     {          USART1_Printf("查询信号质量失败.\r\n");          return 5;     }      else     {          USART1_Printf("信号质量:%s\r\n",USART2_RX_BUFFER);     }              //   if(BC26_SendCmd("AT+QGNSSC=1\r\n","OK"))  //   {  //       USART1_Printf("激活GPS定位失败.\r\n");  //       return 6;  //   }  //   else  //   {  //       USART1_Printf("激活GPS定位成功.\r\n");  //   }  //      //   if(BC26_SendCmd("AT+QGNSSAGPS=1\r\n","OK"))  //   {  //       USART1_Printf("开启AGPS定位失败.\r\n");  //       return 6;  //   }  //   else  //   {  //       USART1_Printf("开启AGPS定位成功.\r\n");  //   }  //      //   if(BC26_SendCmd("AT+CGPADDR=1\r\n","OK"))  //   {  //       USART1_Printf("激活GPRS场景失败.\r\n");  //       return 7;  //   }  //   else  //   {  //       USART1_Printf("激活GPRS场景成功.\r\n");  //   }  //      //   DelayMs(1000);  //   DelayMs(1000);            if(BC26_SendCmd("AT+CEREG?\r\n","+CEREG: 0,1"))     {          USART1_Printf("网络注册状态:失败.\r\n");          return 9;     }      else     {          USART1_Printf("网络注册状态:成功.\r\n");     }            return 0;  }  ​  ​  //发送使用的缓冲区  char BC26_SEND_BUFF[500];  ​  //MQTT协议登录服务器  int BC26_MQTT_Connect(void)  {      //1. 先关闭之前的连接       USART1_Printf("正在关闭之前的连接...\r\n");      BC26_SendCmd("AT+QMTCLOSE=0\r\n","OK");      DelayMs(4000);            //关闭服务      BC26_SendCmd("AT+QMTCONN?\r\n","OK");      DelayMs(4000);            //2. 连接MQTT服务器      USART1_Printf("正在连接MQTT服务器..\r\n");      sprintf(BC26_SEND_BUFF,"AT+QMTOPEN=0,"%s",%s\r\n",MQTT_SERVER_ADDR,MQTT_SERVER_PORT);      if(BC26_SendCmd(BC26_SEND_BUFF,"OK"))     {          USART1_Printf("MQTT服务器连接失败:%s\r\n",BC26_SEND_BUFF);          return 1;     }      else     {          USART1_Printf("MQTT服务器连接成功.\r\n");     }      DelayMs(3000);                  //3. 登录MQTT服务器      USART1_Printf("正在登录MQTT服务器...\r\n");      sprintf(BC26_SEND_BUFF,"AT+QMTCONN=0,"%s","%s","%s"\r\n",MQTT_CLIENT_ID,MQTT_USERNAME,MQTT_PASSWORD);      if(BC26_SendCmd(BC26_SEND_BUFF,"OK"))     {          USART1_Printf("MQTT服务器登录失败:%s\r\n",BC26_SEND_BUFF);          return 2;     }      else     {          USART1_Printf("MQTT服务器登录成功.\r\n");     }      DelayMs(3000);            //4. 订阅主题      USART1_Printf("正在订阅主题...\r\n");      sprintf(BC26_SEND_BUFF,"AT+QMTSUB=0,1,"%s",2\r\n",MQTT_TOPIC_SUB_GET);      if(BC26_SendCmd(BC26_SEND_BUFF,"OK"))     {          USART1_Printf("MQTT主题订阅失败:%s\r\n",BC26_SEND_BUFF);     }      else     {          USART1_Printf("MQTT主题订阅成功.\r\n");     }      return 0;  }  ​  ​  //MQTT发布主题  int MQTT_PublishTheme(char *text)  {      char send_buf[3];      sprintf(BC26_SEND_BUFF,"AT+QMTPUB=0,0,0,0,"%s"\r\n",MQTT_TOPIC_SUB_SET);      if(BC26_SendCmd(BC26_SEND_BUFF,">"))     {          USART1_Printf("发布主题等待输入失败:%s\r\n",BC26_SEND_BUFF);          return 1;     }      USARTx_StringSend(USART2,text);     //发送主题内容            //发送结束符      send_buf[0] = 0x1a;      send_buf[1] = '\0';      if(BC26_SendCmd(send_buf,"OK"))     {          USART1_Printf("发布主题内容失败:%s\r\n",BC26_SEND_BUFF);          return 2; //发送结束符号     }      else     {          USART1_Printf("发布主题内容成功.\r\n");     }             USART1_Printf("发布主题内容:%s\r\n",text);      return 0;  }  ​  //MQTT响应应用层的属性请求  int MQTT_SendAttribute(char *text,char *request_id)  {      char send_buf[3];      sprintf(BC26_SEND_BUFF,"AT+QMTPUB=0,0,0,0,"%s%s"\r\n",MQTT_TOPIC_SUB_SET_RUN,request_id);      if(BC26_SendCmd(BC26_SEND_BUFF,">"))     {          USART1_Printf("(响应)发布主题等待输入失败:%s\r\n",BC26_SEND_BUFF);          return 1;     }      USARTx_StringSend(USART2,text);     //发送主题内容            //发送结束符      send_buf[0] = 0x1a;      send_buf[1] = '\0';      if(BC26_SendCmd(send_buf,"OK"))     {          USART1_Printf("(响应)发布主题内容失败:%s\r\n",BC26_SEND_BUFF);          return 2; //发送结束符号     }      else     {          USART1_Printf("(响应)发布主题内容成功.\r\n");     }             USART1_Printf("(响应)发布主题内容:%s\r\n",text);      return 0;  }  ​  ​  ​  /*  函数功能: 获取一次GPS经纬度数据  函数参数:          double *Longitude :经度          double *latitude   :纬度  返回值: 0表示定位成功,1表示数据接收失败,2表示定位失败  */  u8 BC26_GetGPS_Data(double *Longitude,double *latitude)  {      /*1. 发送获取GPS数据的指令*/      if(BC26_SendCmd("AT+QGNSSRD="NMEA/RMC"\r\n", "OK\r\n"))return 1;            /*2. 对GPS数据进行解码*/      if(GPS_GNRMC_Decoding((char *)USART2_RX_BUFFER,Longitude,latitude))return 2;            //解码成功      return 0;  }  ​  ​  /*  函数功能: 开启GPS功能  返 回 值:0表示成功 1表示失败  */  u8 BC26_StartGPS(void)  {      //先判断GPS功能是否启动      if(BC26_SendCmd("AT+QGNSSC?\r\n","+QGNSSC: 1"))     {          //没有启动就启动GPS功能          if(BC26_SendCmd("AT+QGNSSC=1\r\n","OK\r\n"))         {              USART1_Printf("开启GPS功能失败.\r\n");              return 1;  //GPS功能启动失败         }          else         {              USART1_Printf("开启GPS功能成功.\r\n");         }     }      return 0;  }6.3 MQTT 3.1协议介绍地址: cid:link_5 规范共分七章:  第一章 - 介绍  第二章 - MQTT控制包格式  第三章 - MQTT控制包  第四章 - 操作行为  第五章 - 安全  第六章 - 使用WebSocket进行网络传输  第七章 - 一致性目标
  • [技术知识] 离心泵选泵的步骤与方法,已总结好
    (1)根据工艺条件,所输送液体介质的物理性质(密度、黏度、饱和蒸气压、腐蚀性等)、装置系统管路布置条件、操作条件(操作温度、泵进出口两侧设备内的压力、处理量等)以及泵预安装位置等情况,计算出泵的流量、扬程、有效汽蚀余量等参数。(2)根据装置的布置、地形条件、水位条件、运转条件,确定选择卧式、立式或是其他型式的泵。(3)根据被输送液体介质的性质,确定选用泵的类型,是清水泵、热水泵还是油泵、耐腐蚀泵或其他泵。如当被输送介质腐蚀性较强时,应从耐腐蚀泵的系列产品中选取;当被输送介质为石油产品时,则应选择油泵。(4)根据流量大小,确定选单吸泵还是双吸泵;根据扬程大小,确定选单级泵还是多级泵。因为多级泵比单级泵的效率低,如果单级泵和多级泵都能满足工艺要求,尽量选择单级泵。(5)确定选用泵的系列后,就可按最大流量、扬程在型谱图或特性曲线上确定具体型号。方法如下:将流量和扬程值标绘在该类型泵的系列性能曲线型谱图上,两线交点若正好落在曲线上,即可读出该四边形上注明的离心泵型号,该泵就是要选的泵。但是这种理想情况少,通常会碰到下列两种情况:第一种,交点在扇形四边形上方,这说明流量满足要求,但是扬程不满足要求。此时,若扬程相差不超过5%,仍可选用;若扬程相差很多,则选扬程较大的泵,或是设法减小管路损失。第二种,交点在曲线下方,在泵特性曲线扇形四边形范围内,就初步确定此型号,然后根据扬程相差值,决定是否切割叶轮直径。若相差小,就不切割;若相差大,就按所需的流量、扬程,根据它的比转数来确定切割量。若交点不在扇形四边形范围内,应选扬程较小的泵。选泵时,有时还需要考虑工艺要求,可选用不同 H-Q特性曲线。(6)泵型号确定后,对水泵或输送介质的物理化学性质与水接近的泵,应根据该型号泵的性能曲线进行核对,看正常工作点是否落在最优工况区。另外,在实际生产过程中,为了保证泵的正常工作,防止发生汽蚀,应根据流程图的布置,计算出最差条件下泵吸入口的实际吸入真空高度或装置的汽蚀余量与该泵的允许值进行比较,或根据泵的允许吸上真空度或泵的允许汽蚀余量计算出该泵的允许安装高度,与工艺流程图中拟确定的安装高度进行比较。若不能满足,必须重新选泵或更换泵的位置,也或采取其他措施。(7)对于输送黏度大于20mm2/s或密度与水差别较大的液体,应把以水为实验介质测定的泵的特性曲线换算成该黏度(或密度)下的性能曲线。(8)确定泵的台数。对正常运转的泵,一般只用1台,在某些特殊情况下,也可采用2台泵同时操作。但在任何情况下,装置内物料输送不宜采用3台以上的泵。因为台数过多,不仅管线复杂,使用不便,成本费用也会升高。但遇有下列情况时,可考虑2台或以上的泵:①流量很大,一台泵达不到此流量;或扬程很高,一台泵满足不了要求的。可采用多台泵串联或并联工作。② 对需要 24h连续运转的泵,为保证正常生产,应选 3 台泵,1台运转,1 台备用,1 台维修。应该注意的是,在选用多台离心泵时,应尽可能采用型号相同的泵,以便于操作和维修。(9)计算泵的轴功率和驱动机功率。根据泵所输送介质的工作点参数(流量、扬程、效率),可计算出泵的轴功率,选择驱动机功率时应考虑10%~15%的储备功率。目前很多类型的泵已做到与电动机配套,只需进行校核即可。选择驱动机时,应考虑现场可供利用的动力来源,在条件许可的情况下,尽可能采用电动机。
  • [公告] 邀请报名数据&获奖公示-华为云HCSD开发者认证冬令营
    “邀友学习”环节获奖名单如下,请各位获奖用户在3月15日前 点击此处填写收件信息,活动奖品将在3月31日前发放。逾期未填写视为放弃奖励。如有疑问,请联系活动小助手发送“华为云账号+手机号”,小助手将逐一核实。点击此处查看活动详情邀请数据详情:邀请人华为云账号邀请人数邀请完成体验人数邀请新注册用户e****1999601350h****2019341321h****12034211110h****4dpt_b5a01po-5717j****ian0392736h****t9_y3tlqrgeagn3606l****n17272590841295w****-h755s****va625h****m77vea9l0kx5am514h****_w9dg_leuhuf8o17143w****an1129303h****21374332h****78706532h****znq_b1rdh-v1t3312L****01231212h****d0k-kee64ipyw8202w****534769eh202h****xzxsjckpkiuss0202c****xinke202j****sss10241091x****141121331a****lf0992221C****leng_yong221h****7fr8l1zphdjk83421h****28376111h****59638111h****657r3r4qdn25m4111N****LKR111h****8618302272080_01111h****41zw0b8m672h2v111h****93396101l****0104101h****01330101s****ngovo101k****funny101h****ac00j_8e6wb0-5101h****yiy383eg43sv2-101e****85c534300795365101y****090910101h****7iygzswfnhh6h3101k****156264101h****911630101h****375610101h****lht6ikh4upel2e101h****255023101h****k4199et2pxm**i201g****an440t****engyong330h****52761330h****25446220z****wenxin003220h****23059210c****999110h****j4jyoerfnvcb08110C****m0_63722685110h****qrk3799g9348wo100h****07049100h****z5s2yyfjtquboj100
  • [公告] 【获奖公示】华为云HCSD开发者认证冬令营-第一阶段(更新邀请奖励公示,至3月15日)
    更新“邀友学习”环节获奖名单如下,请各位获奖用户在3月15日前 点击此处填写收件信息,活动奖品将在3月31日前发放。 如有疑问,请联系活动小助手发送“华为云账号+手机号”,小助手将逐一核实。点击此处查看活动详情以下为华为云HCSD开发者认证冬令营-第一阶段获奖名单,请大家确认以下事项:(由于论坛字数有限,本帖名单以图片展示,如需查看完整名单,请下载本帖附件查看)1. 第一阶段活动时间截止1月31日,获奖人员均为在1月31日前按要求完成指定任务的学员,部分不符合条件的用户已在备注列标注原因;2. 部分奖励因礼品数量有限,已做调整,实际奖品请以最终寄出的为准;3. 以下获奖用户均已在活动过程中填写收件信息,若信息无变更,所获奖品将在公示期结束后10个工作日内寄出;4. 若此前填写的获奖信息需变更,请在2月15日前,使用公示名单中对应的华为云账号,点击此处重新填写收件信息,逾期未填写将按原信息寄出;5. “邀友学习”环节持续进行中,邀请报名数据&获奖公示 点击此处可查看公示。​​​​​​​​
  • [分享交流] 华为iot
    我参加了活动,很快就学到了知识,完成很快。
  • [技术知识] 工况改变对压缩机主要参数的影响
    在流程工业中使用的多级压缩机,常因工艺参数的变化改变了压缩机的工作条件,从而影响到压缩机的某些性能参数。经常用到的工艺参数变化有:压缩机吸气压力变化、排气压力变化以及各级吸气温度变化,这些参数的变化直接影响到压缩机的各级压力、排气终了压力、排气温度、排气量和功率消耗。下面分析这几个工艺参数变化对压缩机性能的影响。1. 排气压力变化进入压缩机的气体压力变高或变低,引起压缩机各级排气压力、排气温度、排气量和功率的变化。(1)对各级排气压力影响。在活塞行程容积不变情况下,各级排气压力与第一级吸气压力成正比例增减。(2)对各级排气温度影响。单级压缩机排气温度是随吸气压力的上升而降低。多级压缩机吸气压力变化产生压比变化,同时也引起排气温度变化,但影响最大的是末级。因此如果吸气压力下降,末级压比增大最明显,末级排气温度最容易超出允许范围。(3)对排气量影响。当排气压力不变时,吸气压力下降,则压比上升。对于单级压缩机,由于容积系数下降,排气量下降;对于多级压缩机,主要导致末级压比上升,依次影响到第一级,使第一级吸气量下降,最终排气量也下降。但级数愈多,影响愈小。(4)对功率影响。压比较低(压比<1.2)的压缩机,吸气压力下降,指示功上升,功耗也上升;压比较大(压比>1.2)的压缩机,吸气压力下降,指示功下降,功耗下降。反之指示功上升,功耗也上升。2. 排气压力变化由于工艺条件变化,使压缩机终了压力变高或变低,影响到压缩机的排气量、排气温度、各级级间压力和功率消耗。(1)对排气量影响。单级压缩机的排气压力上升,压比增大,容积系数下降,排气量下降;多级压缩机的排气压力上升,首先是末级压比上升,直至影响到第一级,使第一级排气量减少。级数较多时对排气量的影响较小。(2)对排气温度影响。排气压力上升,主要引起末级排气温度上升,对其余各级的影响依次减小。反之,排气压力下降,也只使末级排气温度下降。(3)对级间压力影响。排气压力上升,压比增大,容积系数下降,从末级起吸入压力上升,使所有级的级间压力上升;排气压力下降,使所有级的级间压力下降。但是在多级压缩机中只有末级的压比变化较为明显,随着级数前移,压比变化迅速减弱。(4)对功率影响。多级压缩机的排气压力上升,仅末级和末前级的功率消耗增大,其他级的功耗基本不变。3. 吸气温度变化中间冷却器工作情况的好坏,会影响到各级吸气温度的高低,从而影响到压缩机的排气量、排气压力、排气温度和功率消耗。(1)对排气量影响。吸气温度的变化改变了气体的比体积,使吸入气体的体积有变化。吸气温度愈高,吸入气体愈少。另外,吸气温度变化以后,吸入气体与气缸壁的热交换情况也发生了变化,影响到压缩机的温度系数和排气量。吸气温度变化对排气量的影响主要在第一级,第一级的吸气温度升高,则第一级的容积系数下降,吸气量减少, 排气量也减少。往后各级的变化是愈到高压级影响愈小。(2)对排气压力影响。单级压缩机的吸气温度变化不影响排气压力;多级压缩机的终了压力不受吸气温度影响,但是级间压力将随吸气温度的变化而变化。级间温度变化将影响到前一级的排气压力和后一级的吸气压力,使前一级的排气压力和压比降低,但后一级压比上升。(3)对排气温度影响。压缩机各级排气温度在压比一定时,完全取决于各级的吸气温度,吸气温度上升,排气温度也上升。(4)对功率影响。单级压缩机所消耗功率与吸气温度无关,但多级压缩机的吸气温度上升,使压缩过程偏离等温压缩线,因而功耗增加。
  • [问题求助] 使用Mqtt协议发布订阅消息,在控制台能跟踪到数据,但是订阅代码或者MQTT.fx上没有数据打印
    测试实例:华为云IoTDA实例(标准版免费单元)根据官网自定义了Topic,并使用Mqtt.fx工具发送/订阅数据,在华为云控制太可以监控到数据,但是在Mqtt.fx工具不能正常订阅数据以下是测试相关图片:1. 使用mqtt.fx发送数据到指定topic2. 在华为云控制台可以监控到数据3. 在mqtt.fx工具中不能显示订阅的消息4. 使用官网给出的python-demo,也出现相同的情况,可以publish数据,在控制台可以看到数据,但是,subscribe不能正常打印数据,但是,代码中已经定义了on_message,貌似不生效
  • [技术干货] 基于STM32+华为云IoT设计的智慧路灯(从0开始上云搭建系统框架)
    一、前言近年来,物联网引领了继计算机、互联网之后世界信息产业的第三次发展浪潮,且逐步在各行各业得到更广泛的应用。物联网的定义是万物互联,表示任何设备都可以连在一起,进行数据交互。那么物联网到底是什么?设备如何上云?云平台又是什么?很多不是物联网专业的,不是搞嵌入式的或者是刚学习物联网的都不太清楚,虽然概念性的东西百度一大堆,书上也是各种专业词汇,如果无法将这些概念性的东西实体化,最终还是理解不了整个流程,云里雾里。那么接下来以华为云IOT平台为例,从最基础开始一步一步的完成一个智慧路灯的项目开发,让大家对物联网有个详细的理解。本次讲解的智慧路灯是一个真实产品模型,去年我在老家的庭院就安装了一个太阳能智慧路灯,使用了一年多了感觉非常不错。先介绍下这个款太阳能智能路灯支持的功能:(1)支持太阳能充电,也支持接市电。(2)路灯本身支持独立联网,也支持连接WIFI(如果是家里庭院使用,一般可以接自己家里的WIFI,如果有的话)。(3)路灯上有球形监控摄像头,能监控四周。(4)在厂家提供的手机APP上可以远程查看路灯的电量,充电状态,充电强度,环境光强度,环境温度湿度,查看摄像头画面,远程开关灯、拍照等等。 通过湿度的检测,检测到下雨时手机上还会进行弹窗提示。那么本篇文章的目的就很明确了:利用华为云IOT作为云平台,自己购买硬件实现这款路灯的所有功能(不能说完全一样,但是基本功能都要实现出来)。需要使用的到华为云的产品如下:(1)OBS数据存储(存储上传的数据)(2) IoTDA设备接(设备上云)(3)ECS云服务器(搭建流媒体服务器,接收摄像头的RTMP流)(4)数字化大屏--数据可视化DLV二、整体设计思路在进行正式设计开发之前,先把整体的思路捋一捋。2.1 开发流程下面列出本次开发流程:(1). 注册华为云账号,在物联网模块里,创建产品,创建物模型,创建设备。(2). 采用MQTT客户端,以软件来模拟设备的方式登录华为云物联网平台,实现路灯数据的模拟上传。(3). 开发底层硬件代码,完成设备上云的对接。(4). 购买ECS云服务器,搭建NGINX服务器,作为流媒体服务器接收摄像头上传的数据流。(5). 创建OBS数据存储桶,完成数据存储。(6). 创建数据可视化DLV大屏,显示设备上报的数据。2.2 硬件介绍首先说明: 因为本项目并不是商业项目,目的是以智慧路灯产品的功能开发过程来演示一款物联网产品的开发流程。 所以在硬件选型上不考虑成本,能用模块就采用模块实现。本次设计的智慧路灯硬件上分为3个部分:(1)路灯的太阳能充电部分 : 直接采用现成的充电模块 + 锂电池 + 太阳能板。(2)路灯的传感器数据采集部分 : 单片机采用STM32(小熊派) + NBIOT-BC20 + 温湿度传感器DHT11 + 光敏传感器BH1750(3)摄像头监控部分: 采用树莓派4B + 一个USB摄像头来实现(联网就是直接将网线口插家里的路由器),功能上:利用ffmpeg采集声卡声音、摄像头数据编码RTMP格式后上传到华为云ECS服务器,NGINX接收到数据再转成为HLS格式(HTTP协议),再通过数据可视化DLV大屏的HLS播放器控件进行显示播放。2.3 物理网知识点科普在完成实际操作之前,先提前了解一些知识。本次完成的智慧路灯就是一个典型的物联网产品。 物联网主要体现就是万物互联。 这里面的万物一般说的就是设备,比如:家里的冰箱,电风扇,窗帘,或者是外面马路上的行驶的汽车,商店前台的共享充电宝,工厂里运行的机器这些都是设备。互联表示设备之间可以互相连接,进行数据交换。 设备互联之后,数据就能得到共享,不再是单机设备,可以进行联动操作,能发掘出设备的更多价值。物联网里的设备是如何实现互联的?在物联网里要完成设备连接的方式有很多种,比如:GSM(2-3-4-5G,)、NB-IoT,LORA、WIFI,Zigbee、蓝牙、有线方式(485,CAN,RS232,USB)都可以完成设备连接通信。说到这个设备互联,就有人发言了,怎么没看到MQTT,COAP,HTTP这些协议呀? 从事物联网的人员一定有听过NB-IoT,wifi,蓝牙,zigbee,MQTT,COAP这些词。 那么这些协议直接的关系一定是要搞清楚。上面提到的连接方式:WIFI,Zigbee、蓝牙 这些都是物理层的协议,这些都需要硬件芯片模组支持。 而刚才说的MQTT,COAP,HTTP都是应用层协议,也就是纯软件协议,一般是用来对接服务器,对接云平台的。 所以(MQTT,COAP,HTTP)是居于(NB-IoT,LORA,WIFI,蓝牙,zigbee,4G)的上层应用协议。问题: 设备如何上云?设备要上云就需要遵循云平台,云服务器的协议才能进行通信,比如:MQTT协议、HTTP协议等等。 如何才能支持MQTT协议,HTTP协议?可以采用WIFI,GSM、NBIOT模块进行协议转换,通过MQTT协议连接云平台。问题:设备上云后有什么直观的体验?这个可以从生活中的几个实际场景进行体验:(1)智能摄像头:摄像头上云之后,可以在任何地方打开手机查看家里的监控,实时防盗监控,出远门也安心了。(2)空调、窗户、窗帘设备上云:上云之后,在手机里远程控制家里的设备开关。 在炎热的夏天,下班时可以在手机上控制打开空调制冷、关闭窗户,拉上窗帘。 增强体验感。(3)智能鱼缸上云: 可以远程给鱼儿投喂食物,了解鱼缸里水质情况,含氧量,换水等操作,还能通过摄像头查看鱼缸里的情况,出差都能了解家里的情况。(4)智能花盆上云: 手机上随时了解土壤含水量、周围光照度,空间湿度情况,还能通过手机控制水泵进行浇水。(5)智能井盖上云:城市的井盖下都是污水管道,在井盖上可以安装各种检测传感器,上云之后,城市环境管理局可以详细了解到城市每个井盖的详细数据,在地图上可以看到每个井盖的位置。 通过井盖传感器检测可以了解井盖下的有害气体,易燃气体浓度。下暴雨之后,还可以了解那里管道拥堵,可以第一时间排险。还有很多很多的案例..............三、云平台产品、设备、物模型创建3.1 华为云IOT平台介绍华为云物联网平台(IoT设备接入云服务)提供海量设备的接入和管理能力,可以将IoT设备联接到华为云,支撑设备数据采集上云和云端下发命令给设备进行远程控制,配合华为云其他产品。使用物联网平台建造一个完整的物联网解决方案主要包括3部分:物联网平台,业务应用和设备。1,物联网平台作为连接业务应用和设备的中间层,屏蔽了各种复杂的设备接口,实现设备的快速接入;同时提供强大的开放能力,支撑行业用户快速构建各种物联网业务应用。2,设备可以通过固网,2G / 3G / 4G / 5G,NB-IoT,Wifi等多种网络接入物联网平台,并使用LWM2M / CoAP或MQTT协议将业务数据上报到平台,平台也可以将控制命令下发给设备。3,业务应用通过调用物联网平台提供的API,实现设备数据采集,命令下发,设备管理等业务场景。物联网平台支持终端设备直接连接,也可以通过工业网关或家庭网关连接;支持多网络接入,多协议接入,系列化代理连接,解决设备接入复杂的微小和碎片化难题;也提供了更丰富完备的设备管理能力,简化了海量设备管理复杂性,减少了人工操作,提升了管理效率。设备+物联网平台+应用事是最为通用的场景,设备将数据上报到IoT平台,IoT平台对设备进行管理,同时针对不同的事件类型,转换数据推送到用户应用,同时应用可以将命令下发到IoT平台,平台可以缓存/实时下发命令给设备。3.2 创建产品从这里就开始手把手操作了,完成云平台产品创建,设备创建,物模型构建,设备上云测试等等。(1) 登录华为云官网没注册账号就先注册(注册了就忽略,直接登录官网地址: https://www.huaweicloud.com/在产品目录下,找到物联网,再找到IOTDA(2)ioTDA页面链接: http://https://www.huaweicloud.com/product/iothub.html(3)查看平台服务器接入地址这个信息对接下来连接华为云物联网平台很重要: 端口: 1883  域名: a161a58a78.iot-mqtts.cn-north-4.myhuaweicloud.com  IP地址: 121.36.42.100(4)创建产品先云平台先创建一个自己的产品模型。根据自己的产品名字,类型填充: 协议选择MQTT协议,数据格式选择JSON格式。下面的设备类型选择自定义类型。点击确认创建成功。(5)创建自定义模型-添加服务ID产品创建之后,在产品选项页面,点击自己的产品,进入产品详情页面。产品模型用于描述设备具备的能力和特性,平台提供多种方式定义产品模型; 如果没有定义产品模型,设备上报数据时平台仅直接转发,不做解析。点击下面的自定义模型按钮,开始创建模型。设置服务ID:(6)添加属性每个设备都有自己的属性。通俗来讲: 属性字段存放设备上传的数据类型。 比如:根据 温度传感器、湿度传感器、光敏传感器采集的数据类型,在设备模型里就需要创建对应的属性字段来存放这些数据类型。接下来就创建属性:【1】温度字段【2】湿度字段【3】光照强度字段【4】路灯的电量【5】路灯的手动开关按钮路灯除了自动模式下可以自动开关灯外,还能能支持云端手动开关控制。 这个按钮字段的访问权限也给成可读可写。(后续的应用侧开发,可能需要修改这个字段)属性字段添加完毕:(7)总结到这里属性字段已经添加成功。 这创建自定义模型这一步里面设置的服务ID和属性字段的名字比较重要。接下来的设备向服务器上传数据时,规定的JSON格式中就需要填服务ID和对应的属性名称。这样服务器收到数据之后,才知道这个数据是给设备的哪一个字段赋值。下面做个总结,方便后续直接拿来使用。 服务ID:         LED        属性名称  数据类型   访问方式    描述  Button     int(整型)   可读,可写 路灯的手动开关按钮  humidity int(整型)   可读 环境湿度  temperature int(整型)   可读 环境温度  light int(整型)    可读 环境光强度  Power int(整型)   可读 路灯剩余电量    3.3 创建设备前面一步创建的产品模型是一个抽象的框架,在产品下面的设备才对应具体的硬件。 所以,一个产品下可以创建关联很多的设备。(1)注册设备在对应的产品模型下添加设备。创建完成后,保存设备的ID和设备密匙。我的设备密匙如下: {      "device_id": "634e3e423ec34a6d03c84bfb_1126626497",      "secret": "1126626497"  }这个密匙信息就是设备的身份信息,接下来的MQTT协议交互里,就需要通过这个设备身份信息生成MQTT登录参数,也就是MQTT三元组。(2)设备创建成功根据前面的操作,一个新设备就创建好了。目前还没有登录,这里就还是处于未激活状态。(3)生成MQTT登录三元组拿到设备的密匙信息,利用华为云提供的MQTT连接鉴权信息生成工具,生成MQTT鉴权三元组。在线工具的地址:https://iot-tool.obs-website.cn-north-4.myhuaweicloud.com/根据界面提示,填入设备密匙,点击Generate,生成信息。得到的信息如下: ClientId    634e3e423ec34a6d03c84bfb_1126626497_0_0_2022101806  Username    634e3e423ec34a6d03c84bfb_1126626497  Password    67ffb4d7ddc66e6292276aefe5bcc3df0448a3883b0438aaa073113185d7ec20接下来就可以利用这3个参数连接设备设备了。(4)利用MQTT客户端模拟设备登录(激活设备)下面使用的这个MQTT客户端是我自己开发的,主要是方便大家使用连接华为云进行测试。在文章最后会附上工具的下载地址。打开MQTT客户端之后,根据界面提示,填入对应的参数: 这些参数都在前面介绍了的。填好之后,点击登录。登录成功,软件会收到云平台的回应:接下来打开云平台的设备页面,查看状态: 目前设备已经在线了 。目前设备已经激活,还没有上传数据。(5)MQTT主题格式说明设备登录激活之后,接下来的步骤就是上传数据到云平台。MQTT里要了解2个操作操作:订阅主题、发布主题。在产品页面,可以看到主题的格式,以及对于主题的用途:【1】订阅主题对于设备而言,一般会订阅平台下发消息给设备 这个主题。设备想接收平台下发的消息,就需要订阅平台下发消息给设备 的主题,订阅后,平台下发消息给设备,设备就会收到消息。主题的格式如下: $oc/devices/{device_id}/sys/messages/down        根据当前的路灯设备,最终的格式:  $oc/devices/634e3e423ec34a6d03c84bfb_1126626497/sys/messages/down【2】发布主题对于设备,发布主题,也就显示向云平台上传数据。发布的主题格式如下: $oc/devices/{device_id}/sys/properties/report  ​  根据当前的路灯设备,最终的格式:  $oc/devices/634e3e423ec34a6d03c84bfb_1126626497/sys/properties/report发布主题时,需要上传数据,这个数据格式是JSON格式。上传的JSON数据格式如下: {    "services": [     {        "service_id": <填服务ID>,        "properties": {          "<填属性名称1>": <填属性值>,          "<填属性名称2>": <填属性值>,          ..........       }     }   ]  }根据JSON格式,一次可以上传多个属性字段。 这个JSON格式里的,服务ID,属性字段名称,属性值类型,在前面创建产品的时候就已经介绍了,不记得可以翻到前面去查看。根据这个格式,组合一下智慧路灯一次上传的数据: {"services": [{"service_id": "LED","properties":{"temperature":24,"humidity":60,"light":1200,"Power":80}}]}(6)利用MQTT客户端上传数据到云平台根据得到的主题格式,和数据格式,填入到MQTT客户端软件里发送。发送成功后,打开云平台页面可以查看到上传的数据。到此,一个物联网产品的模型已经完成。四、构建数据可视化服务(DLV)为了方便显示数据可视化服务器,可以利用华为云的数据可视化服务(DLV)来进行展示数据。华为云物联网平台提供了数据转发服务,对于设备上报的数据,可以选择让平台将设备上报数据推送给应用服务器,由应用服务器进行保存;还可以选择让平台将设备上报数据转发给对象存储服务(OBS),由OBS进行存储,进行永久保存。 数据可视化服务(DLV)可以从OBS文件读取数据呈现为可视化报表,实现数据的可视化显示。接下来要完成的任务是: 将路灯上报的数据转发到OBS存储桶里,然后可视化服务DLV再读取数据进行显示。4.1 创建OSB存储桶地址: https://www.huaweicloud.com/product/obs.html对象存储服务(Object Storage Service,OBS)是一个基于对象的存储服务,提供了海量、安全、高可靠、低成本的数据存储能力。(1)选择管理控制台(2)创建桶填充桶信息: 我这里选择的是 华北-北京一我这里因为要长期使用,这里选择1年的购买权。(3)创建成功4.2 配置数据转发规则(1)创建规则选择左侧导航栏的规则>数据转发,单击右上角的创建规则。填充规则转发的信息:参数名参数说明规则名称自定义,如: led_obs。规则描述自定义,如数据转发至OBS服务。数据来源选择“设备属性”。触发事件自动匹配“设备属性上报”。资源空间和上一步创建的产品所在的资源空间保持一致。点击继续设置:(2)设置转发目标单击添加,设置转发目标。这里的区域选择--华北-北京一。 因为前面的OBS桶创建的时候,设置区域设置的是北京一,然后点击授权。授权之后,选择刚才创建的OBS桶,设置存储数据的目录和文件名字。 文件类型选择CSV。下面设置转发的字段: (如果提示没有授权,点击授权即可)这个转发字段就是表示需要存放的数据是那些,对于路灯而言,肯定是需要存储上报的温度、湿度、电量、光照强度的属性的。 这些属性在创建产品的时候设置,设备上报的也是这些属性。这是设备上传一次云平台的完整数据: {    "resource": "device.property",    "event": "report",    "event_time": "20221018T131627Z",    "request_id": "5ee95a0c-262d-43c3-8d31-af453f9952ef",    "notify_data": {      "header": {        "app_id": "7211833377cf435c8c0580de390eedbe",        "device_id": "634e3e423ec34a6d03c84bfb_1126626497",        "node_id": "1126626497",        "product_id": "634e3e423ec34a6d03c84bfb",        "gateway_id": "634e3e423ec34a6d03c84bfb_1126626497"     },      "body": {        "services": [         {            "service_id": "LED",            "properties": {              "temperature": 28,              "humidity": 62,              "light": 1300,              "Power": 90           },            "event_time": "20221018T131627Z"         }       ]     }   }  }如果我的路灯属性里有一个温度属性字段temperature,我想转发设备上传的这个温度字段,就可以这样写: notify_data.body.services[0].properties.temperature后面的存储目标字段,为了好区分,直接填temperature即可。如果要转发湿度字段humidity,就按下面这样写: notify_data.body.services[0].properties.humidity剩下的按照自己的需要转发的填写即可。如果存储数据时,想知道这个数据是那个产品,那个设备上传的,也可以将设备ID和产品ID转发存储起来:格式如下。 notify_data.header.app_id    notify_data.header.device_id我这里只是转发了路灯的4个属性字段:确定后,点击设置完成。(3)启用规则设置完成后,点击启用规则。(4)规则修改如果后续需要修改规则,可以点击设置转发目标页面,点击右下角的修改。可以进行规则修改:(5)数据上报测试为了验证转发规则是否生效,接下来使用MQTT客户端多上报几次数据到云平台。上传之后,打开OBS存储桶的控制台页面。打开转发规则存储的OBS桶。找到存储数据的文件,点击下载。下载下来,打开可以看到存储的数据:到此,数据转发,存储已经成功了。4.3 配置数据可视化服务数据可视化服务(Data Lake Visualization)是一站式数据可视化平台,适配云上云下多种数据源,提供丰富多样的2D、3D可视化组件,采用拖拽式自由布局,可以快速定制和应用属于自己的数据大屏。地址:https://console.huaweicloud.com/dlv/?locale=zh-cn&region=cn-north-1#/dlv/screen/list(1)购买服务套餐新用户使用,有一个月基础版的使用权限。 可以点击体验试用获取。 已购买的,直接点击进入控制台。如果体验期已过,就需要自己购买,我这里选择购买1年的基础版60块钱。注意: 这个区域要选择与OBS存储桶一个区域。 否则到时候用不了。购买成功:(2)新建数据连接使用OBS数据源,可以将大屏与OBS服务建立数据连接,在大屏上展示存储在OBS中的CSV文件的数据。选择CSV文件:这里需要填:访问密钥(AK和SK)。获取步骤如下: 1. 登录管理控制台(或者点击右上角自己的用户名)。  2. 将鼠标移到右上角的用户名上,在下拉列表中单击“我的凭证”。  3. 进入“我的凭证”后,在单击“访问密钥”。  4. 在“访问密钥”页面中,可以查看已有的访问密钥ID(即AK),如果要同时获取AK和SK,可以单击“新增访问密钥”创建并下载访问密钥,下载的密钥文件中包含AK和SK。点击新增访问密匙:创建后下载下来:得到密匙之后,填充数据连接的配置:数据连接创建成功:(3)新建大屏选择空白大屏,填好名字,创建大屏。大屏创建成功:(4)新建数据转换器每个控件的数据源如果需要实时读取,需要新建数据转换器。在上方按钮里选择数据转换器。新建一个名称为led_data的数据转换器。关于数据转换器的使用说明,看这里:https://support.huaweicloud.com/usermanual-dlv/dlv_01_0718.html本次新建转换器,不用改代码,直接默认即可。【1】点击 + 号。【2】输入led_data 按下回车。【3】创建完成(5)编辑大屏界面的话,可以根据控件自行设计。我这里采用文本控件来显示路灯设备上传的数据。选中文本控件之后,右边的数据源选择--CSV文件,选择创建的数据连接,再选择数据转换器,然后下面选择文本里需要显示的字段。【1】 拖一个标题控件,用于显示大屏的名称修改属性后:【2】拖一个表格轮播控件,用来显示设备的数据。然后将控件的尺寸合理的设置一下,点击控件,选择控件数据的来源为CSV文件,然后设置数据连接器,设置映射显示的字段。然后将字段展开,设置每个数据对应的名称。如果觉得字体小了,可以改变字号:如果想改变轮播图的样式,也可以在这里设置:下面是创建好的界面:如果想显示设备上传的数据时间,可以在 规则转发里 ,将设备上报的时间也转发存放到CSV文件里,DLV大屏就可以显示时间了。(6)预览界面(7)发布界面分享链接:https://console.huaweicloud.com/dlv/vision/share/?id=a4b0adf1d0d94b29aafd53fda4a3d0cc&locale=zh-cn&region=cn-north-1在界面可以看状态已经是发布状态了:然后将链接分享给其他人,都可以通过浏览器打开访问查看效果。这是手机上查看效果:到此,DLV大屏已经配置完毕。五、ECS云服务器部署流媒体服务器智慧路灯上有一个监控摄像头,为了方便查看摄像头推送的视频流,这里购买华为云的ECS服务器,部署NGINX服务器,接收流媒体数据。5.1 购买ECS服务器官网地址: https://www.huaweicloud.com/【1】选择弹性云服务器 ECS。【2】区域选择华北北京一。【3】系统选择CentOS 7.4 。【4】配置网络【5】立即购买5.2 登录ECRS服务器在控制台选择云服务器,直接网页上登录终端即可。5.3 部署NGINX服务器(1) 先安装一些工具yum install -y pcre pcre-devel openssl openssl-devel zlib zlib-devel gcc gcc-c++ yum install -y vim wget lsof git zip unzip(2)获取Nginx二进制源码rtmp模块暂时只支持Nginx13-15版本,当前就在官网下载Nginx14wget http://nginx.org/download/nginx-1.14.2.tar.gz tar xvf nginx-1.14.2.tar.gz (3)获取nginx-rtmp-modulewget https://github.com/arut/nginx-rtmp-module/archive/refs/tags/v1.2.1.tar.gz tar xvf v1.2.1.tar.gz(4)编译nginxcd nginx-1.14.2 ./configure --add-module=../nginx-rtmp-module-1.2.1/ --with-http_ssl_module make && make install #建立软链接 ln -s /usr/local/nginx/sbin/nginx /usr/bin特别说明:如果在配置时报错,一般就是缺东西了,安装了再配置。 比如:报错 ./configure: error: the HTTP rewrite module requires the PCRE library. You can either disable the mo ....        解决:  yum -y install pcre-devel  yum -y install openssl openssl-devel(5)修改Nginx的配置文件打开/usr/local/nginx/conf/nginx.conf文件,在文件最后面加入下面的配置。 rtmp {        server {            listen 8888;            application live {                live on;           }           }    }上面8888是rtmp推流和拉流的端口。修改nginx.conf之后,重启nginx服务: sudo service nginx restart重启服务之后,使用netstat -ltn命令查看TCP监听的端口,确认下Nginx的监听端口是否正常。正常情况,一个是我们自己设置的rtmp服务监听端口8888,还有一个80是Nginx默认的HTTP服务监听端口。接下来可以在浏览器里输入本机IP地址:http://127.0.0.1/,查看Nginx服务开启状态。(6)设置开机启动 wget http://raw.github.com/JasonGiedymin/nginx-init-ubuntu/master/nginx -O /etc/init.d/nginx  ​  chmod +x /etc/init.d/nginx  ​  update-rc.d nginx defaults(7)控制nginx服务的3个命令: 启动、停止、重启 service nginx start  service nginx stop  service nginx restart  或者 nginx -s reload  (运行中生效配置文件)(8)进行rtmp推流 服务器搭建好之后,推流和拉流的地址就是:  rtmp://<服务器IP地址>:8888/live/<推流存放的目录>  例如: rtmp://127.0.0.1:8888/live/xl(9)nginx保存推流视频文件如果需要让推流上来的文件保存下来后续进行查看历史文件,可以配置nginx进行保存。在原来的/usr/local/nginx/conf/nginx.conf配置文件里rtmp模块中增加新的配置: record all;  record_unique on;  record_path "./video";  #视频缓存的路径  record_suffix -%Y-%m-%d-%H_%M_%S.flv;完整/usr/local/nginx/conf/nginx.conf里的rtmp模块的配置如下: #RTMP服务  rtmp {        server {               listen 8888;                application live {                live on;  #开启实时   record all;     record_unique on;     record_path "./video";  #视频缓存的路径     record_suffix -%Y-%m-%d-%H_%M_%S.flv;         }           }  }配置之后执行命令nginx -s reload重启服务器即可。(10)rtmp直播流转为hls直播流什么是HLS直播流? HLS 全称是 HTTP Live Streaming,是一个由 Apple 公司提出的基于 HTTP 的媒体流传输协议,用于实时音视频流的传输。目前HLS协议被广泛的应用于视频点播和直播领域。  ​  原理介绍  HLS 跟 DASH 协议的原理非常类似。通过将整条流切割成一个小的可以通过 HTTP 下载的媒体文件,然后提供一个配套的媒体列表文件,提供给客户端,让客户端顺序地拉取这些媒体文件播放,来实现看上去是在播放一条流的效果。由于传输层协议只需要标准的 HTTP 协议,HLS 可以方便的透过防火墙或者代理服务器,而且可以很方便的利用 CDN 进行分发加速,并且客户端实现起来也很方便。  ​  HLS 把整个流分成一个个小的基于 HTTP 的文件来下载,每次只下载一些。HLS 协议由三部分组成:HTTP、M3U8、TS。这三部分中,HTTP 是传输协议,M3U8 是索引文件,TS 是音视频的媒体信息。HLS协议编码格式要求: 视频的编码格式:H264  音频的编码格式:AAC、MP3、AC-3  视频的封装格式:ts  保存 ts 索引的 m3u8 文件配置/usr/local/nginx/conf/nginx.conf将RTMP流转为HLS流。在http模块的server配置里增加新的配置: location /live_hls{    types {    #m3u8 type设置    application/vnd.apple.mpegurl m3u8;    #ts分片文件设置    video/mp2t ts;   }   #指向访问m3u8文件目录   alias ./m3u8File; #和rtmp模块里的hls_path设置路径一样   add_header Cache-Control no-cache; #禁止缓存  }在rtmp模块的server配置里增加新的配置: hls on;   #开启hls  hls_path ./m3u8File;  #hls的ts切片存放路径 (这是个目录,会自动创建的)  hls_fragment 2s;  #本地切片长度  hls_playlist_length 6s;#HLS播放列表长度/usr/local/nginx/conf/nginx.conf文件的完整的配置如下: worker_processes  1;   #Nginx进程数,建议设置为等于CPU总核数    events {      worker_connections  1024;  #工作模式与连接数上限  }    rtmp_auto_push on;    #RTMP服务  rtmp {        server {            listen 8888;            application live {                live on;  #开启实时   record all;     record_unique on;     record_path "./video";  #视频缓存的路径     record_suffix -%Y-%m-%d-%H_%M_%S.flv;                hls on;   #开启hls              hls_path ./m3u8File;  #hls的ts切片存放路径              hls_fragment 2s;  #本地切片长度              hls_playlist_length 6s;#HLS播放列表长度         }           }  }    #HTTP服务  http {      include       mime.types;      default_type  application/octet-stream;      sendfile        on;      keepalive_timeout  65;        server {          listen       8099;          server_name  localhost;            location / {              root   html;              index  index.html index.htm;         }            location /live_hls{      types{      #m3u8 type设置   application/vnd.apple.mpegurl m3u8;   #ts分片文件设置   video/mp2t ts;   }   #指向访问m3u8文件目录   alias ./m3u8File;   add_header Cache-Control no-cache; #禁止缓存   }            location /control{      rtmp_control all;   }     location /stat{      rtmp_stat all;   rtmp_stat_stylesheet stat.xsl;   }   location /stat.xsl{      root ./nginx-rtmp-module-master;   }          # redirect server error pages to the static page /50x.html          #          error_page   500 502 503 504  /50x.html;          location = /50x.html {              root   html;         }     }  }配置之后重启服务器即可。5.4 视频推流测试按照前面的配置,RTMP推流地址和HTTP访问地址如下: 接下来硬件上采集到摄像头数据,通过ffmpeg编码后,直接填写下面地址进行推流即可。 RTMP推流和拉流地址: rtmp://127.0.0.1:8888/live/video01  ​  ​  那么对应的HTTP的访问地址:http://127.0.0.1:8099/live_hls/video01.m3u8说明: 转为HLS流之后,如果浏览器支持HLS流就可以直接输入地址播放。一般手机浏览器都支持的。比如:苹果手机的自带浏览器,QQ浏览器等浏览器都支持直接播放HLS流。PC机的谷歌浏览器默认是不支持的。六、硬件设计硬件上分为两个部分: (1)摄像头部分 (2)太阳能充电+传感器部分5.1 摄像头监控实现(1)硬件组成摄像头远程监控部分采用:树莓派4B + USB摄像头实现。 视频压缩,编码,推流采用ffmpeg实现。(2)编译FFMPEG视频编码,推流需要用到ffmpeg的库,需要先下载ffmpeg源码进行编译,得到xxx.so。由于编译ffmpeg需要一些其他的库,再编译ffmpeg之前先编译其他的一些库。【1】编译安装NASM 下载NASM库: http://distfiles.macports.org/nasm/ pi@raspberrypi:/media/pi/DS小龙哥/work $ mv /home/pi/Downloads/nasm-2.14.02.tar.bz2 ./  pi@raspberrypi:/media/pi/DS小龙哥/work $ tar xvf nasm-2.14.02.tar.bz2  pi@raspberrypi:/media/pi/DS小龙哥/work $ cd nasm-2.14.02/  pi@raspberrypi:/media/pi/DS小龙哥/work/nasm-2.14.02 $ ./configure  pi@raspberrypi:/media/pi/DS小龙哥/work/nasm-2.14.02 $ make  pi@raspberrypi:/media/pi/DS小龙哥/work/nasm-2.14.02 $ sudo make install【2】编译X264下载地址: https://www.videolan.org/developers/x264.html pi@raspberrypi:/media/pi/DS小龙哥/work $ mv /home/pi/Downloads/x264-master.tar.bz2 ./  pi@raspberrypi:/media/pi/DS小龙哥/work $ tar xvf x264-master.tar.bz2  pi@raspberrypi:/media/pi/DS小龙哥/work $ cd x264-master/  pi@raspberrypi:/media/pi/DS小龙哥/work/x264-maste $ ./configure --prefix=$PWD/_install  --enable-shared  pi@raspberrypi:/media/pi/DS小龙哥/work/x264-master $ make && make install  pi@raspberrypi:/media/pi/DS小龙哥/work/x264-master $ sudo cp _install/include /usr/ -rf  pi@raspberrypi:/media/pi/DS小龙哥/work/x264-master $ sudo cp _install/lib /usr/ -rf【3】编译ffmpeg下载地址: http://www.ffmpeg.org/download.html pi@raspberrypi:/media/pi/DS小龙哥/work $ mv /home/pi/Downloads/ffmpeg-4.2.2.tar.bz2 ./  pi@raspberrypi:/media/pi/DS小龙哥/work $ tar xvf ffmpeg-4.2.2.tar.bz2  pi@raspberrypi:/media/pi/DS小龙哥/work $ cd ffmpeg-4.2.2/  pi@raspberrypi:/media/pi/DS小龙哥/work/ffmpeg-4.2.2 $ sudo apt-get install libomxil-bellagio-dev  pi@raspberrypi:/media/pi/DS小龙哥/work/ffmpeg-4.2.2 $ ./configure --enable-shared --prefix=$PWD/_install --enable-gpl --enable-libx264 --enable-omx-rpi --enable-mmal --enable-hwaccel=h264_mmal --enable-decoder=h264_mmal --enable-encoder=h264_omx --enable-omx  pi@raspberrypi:/media/pi/DS小龙哥/work/ffmpeg-4.2.2 $ make && make install  pi@raspberrypi:/media/pi/DS小龙哥/work/ffmpeg-4.2.2 $ sudo cp _install/include /usr/ -rf  pi@raspberrypi:/media/pi/DS小龙哥/work/ffmpeg-4.2.2 $ sudo cp _install/lib /usr/ -rf  pi@raspberrypi:/media/pi/DS小龙哥/work/ffmpeg-4.2.2 $ sudo cp _install/bin /usr/ -rf  pi@raspberrypi:/media/pi/DS小龙哥/work/ffmpeg-4.2.2 $ ffmpeg -v  ffmpeg version 4.2.2 Copyright (c) 2000-2019 the FFmpeg developers    built with gcc 8 (Raspbian 8.3.0-6+rpi1) .. .....................     ..........................(3)推流代码推流代码篇幅较长,这里就不贴出来了。不过这个功能也可以采用命令行实现: 推流本地实时音频视频到流媒体服务器  示例:  [xl@DS_小龙哥 linux_c]$ ffmpeg -f video4linux2  -r 12 -s 640x480 -i /dev/video0 -f alsa -i default -ar 44100 -ac 1 -f mp3 -qscale 10 -f flv "rtmp://127.0.0.1:8086/live/123"  ​  参数解析:  -f video4linux2 指定linux下的视频驱动框架  -s 640x480  指定视频尺寸  -i /dev/video0 摄像头节点  f alsa 声卡驱动框架  -i default  选择声卡,这里选择默认声卡  -ar 44100  声音采样频率  -ac 1   单声道  -f mp3  MP3音频  -qscale 10 设置画面质量,值越小画面质量越高  f flv   指定封装格式  "rtmp://127.0.0.1:8086/live/123"  流媒体服务器地址(4)DLV可视化大屏显示监控视频由于华为云的DLV可视化服务组件里的rtmp播放器在基础版里无法使用,这里的推流就不用DLV进行演示了。 如果买了高版本的DLV可视化服务,将RTMP或者FLV播放控件拖到界面上,在属性里设置ECS服务器里的推流地址即可播放监控视频了。5.2 智慧路灯部分智慧路灯硬件: 太阳能充电板 + 锂电池 + 充电模块 + STM32F103系统板 + BH1750光强传感器 + DHT11温湿度传感器 + BC20-NBIOT模块。(1)硬件组成【1】太阳能板【2】充电模块【3】BC20 -- NBIOT模块【4】温湿度 + 光敏传感器(2)BC20上云调试BC20是一款高性能、低功耗、多频段、支持 GNSS 定位功能的 NB-IoT 无线通信模块。BC20 在设计上 兼容移远通信 GSM/GPRS/GNSS 系列的 MC20 模块,方便客户快速、灵活的进行产品设计和升级。 BC20 提供丰富的外部接口和协议栈,同时支持中国移动 OneNET 物联网云平台,为客户的应用提供极 大的便利。【1】上电初始化操作 查询模块是否正常  AT  ​  OK  ​  ​  获取卡号,查询卡是否插好  AT+CIMI  ​  460041052911195  ​  OK  ​  ​  激活网络  AT+CGATT=1  ​  OK  ​  ​  获取网络激活状态  AT+CGATT?  ​  +CGATT: 1  ​  OK  ​  ​  查询网络质量  AT+CSQ  ​  +CSQ: 26,0  ​  OK        AT+CEREG=? //检查网络状态  +CEREG: 0,1 //找网成功  OK【2】连接MQTT服务器 连接MQTT服务器  AT+QMTOPEN=0,"a161a58a78.iot-mqtts.cn-north-4.myhuaweicloud.com",1883  ​  OK  ​  +QMTOPEN: 0,0  ​  ​  登录MQTT服务器  命令格式: AT+QMTCONN=<tcpconnectID>,<clientID>,<username>,<password>  AT+QMTCONN=0,"6210e8acde9933029be8facf_dev1_0_0_2022021913","6210e8acde9933029be8facf_dev1","6cea55404b463e666cd7a6060daba745bbaa17fe7078dfef45f8151cdf19673d"  ​  OK  ​  +QMTCONN: 0,0,0  ​  ​  订阅主题  命令格式: AT+QMTSUB=<tcpconnectID>,<msgID>,"<topic1>”,<qos1>[,"<topic2>”,<qos2>…]  ​  AT+QMTSUB=0,1,"$oc/devices/6210e8acde9933029be8facf_dev1/sys/messages/down",2  ​  OK  ​  +QMTSUB: 0,1,0,2  ​  ​  发布主题  命令格式:AT+QMTPUB=<tcpconnectID>,<msgID>,<qos>,<retain>,"<topic>","<msg>"  ​  先发送指令:  AT+QMTPUB=0,0,0,0,"$oc/devices/6210e8acde9933029be8facf_dev1/sys/properties/repor"  ​  等待返回 ">"  接着发送数据.不需要加回车。  "{"services": [{"service_id": "gps","properties":{"longitude":12.345,"latitude":33.345}}]}"  数据发送完毕,再发送结束符。 十六进制的值--0x1a  。某些串口调试助手可以适应ctrl+z 快捷键输入0xA  等待模块返回"OK",到此数据发送完成。      OK  ​  +QMTPUB: 0,0,0(3)STM32硬件代码这里的完整工程代码篇幅较多,这里就不贴出来了。对于华为云iot平台而言,这里硬件实现的代码最终功能与上面的MQTT软件模拟效果是一样的。 采集硬件上的数据上传到云平台。七、总结通过智慧路灯的项目,介绍了一个物联网设备如何上云,云平台如何配置,数据可视化大屏如何对接显示的整个流程。 如果手上没有智慧路灯的硬件,也可以通过文中介绍的MQTT客户端软件,模拟设备数据进行数据上传,一样可以完成云端的所有操作。 有了可视化大屏,就可以实时查看设备的状态,本次的例子里设计的界面比较简单,如果想设计酷炫,可以查看官方的模板,在新建大屏的时候可以选择模板进行创建。
  • [技术知识] 往复压缩机的内部结构详解(下)
    06 活塞组活塞组是活塞杆、活塞、活塞环和支承环等部件的总称。活塞组在连杆带动下,在气缸内作往复直线运动,从而与气缸等共同组成一个可变的工作容积,以实现吸气、压缩、排气等过程。活塞杆将活塞与十字头连接起来,传递作用在活塞上的力,带动活塞运动。活塞与活塞杆的连接通常采用圆柱凸肩和锥面连接两种方法。图11中为活塞杆、活塞和活塞螺母图。图11 活塞杆及活塞和活塞螺母图活塞环是密封气缸镜面和活塞间间隙用的零件,另外还起到布油和导热的作用。对活塞环的基本要求是密封可靠和耐磨损。支承环主要是支承活塞及活塞杆的重量并且导向活塞,但不起密封作用。活塞支承环形式如图12和图13所示。活塞环形式如图14和图15 所示。图12 活塞支承环图13 不同形式的支承环图14 不同形式的活塞环图15 活塞油环结构气缸注油润滑时,活塞环采用铸铁环或填充聚四氟乙烯塑料环;当压力较高时,采用铜合金活塞环;支撑环采用塑料环或直接在活塞体上浇铸轴承合金。气缸无油润滑时,活塞环支撑环均为填充聚四氟乙烯塑料环。07 气阀气阀是压缩机的一个重要部件,属于易损件。它的质量及工作的好坏直接影响压缩机的输气量、功率损耗和运转的可靠性。气阀包括吸气阀和排气阀,活塞每上下往复运动一次,吸、排气阀各启闭一次,从而控制压缩机并使其完成吸气、压缩、排气等四个工作过程。图16为一气阀实物图。图16 气阀常用的压缩机气阀按照阀片结构分为网状阀和环状阀。环状阀由阀座、阀片、弹簧、升程限制器、连接螺栓和螺母等组成。分解图见图17。环状阀制造简单,工作可靠,可改变环数来适应各种气量要求。环状阀缺点是:阀片各环彼此分开,在开闭运行中很难达到步调一致,因而降低了气体的流通能力,增加额外的能量损失。阀片等运动元件质量较大,阀片与导向块之间有摩擦力,环状阀经常采用柱形(或锥形)弹簧等因素,决定了阀片在开闭运动中不容易做到及时、迅速。由于阀片的缓冲作用较差,磨损严重。图17 环状阀内部结构网状阀阀片各环连在一起,呈网状,阀片与升程限制器之间设有一个或几个与阀片形状基本相同的缓冲片,如图18所示。网状阀适用于各种操作条件,在低、中压范围内应用较为普遍。但由于网状阀阀片结构复杂,气阀零件多,加工困难,成本高,阀片任何一处损坏都导致整个阀片报废。图18 网状阀内部结构
  • [技术知识] 离心泵选型的原则和依据有哪些?
    01 离心泵的选型原则离心泵的选择,是指按所需输送的液体流量、扬程及液体性质等,从现有的各种泵中选择经济适用的泵。选择泵时应遵循如下原则:(1)所选泵的型式、性能应满足装置流量、扬程、压力、温度、汽蚀余量等工艺参数及输送介质性质的要求。(2)机械方面可靠性高,噪声低,尺寸小,质量轻,结构简单,振动小,以便于操作与维修。(3)设备成本费用、运转费用、维修费用、管理费用等要低,以尽可能降低成本。(4)满足其他特殊要求,如防爆、耐腐蚀等。02 离心泵的选型依据离心泵选型应根据工艺流程、使用要求,从流量、扬程、液体性质、装置系统的管路布置条件、泵的操作条件等几个方面加以考虑:(1)流量:流量是选泵的重要参数之一,它直接关系到整个装置的生产能力和输送能力。在工艺设计中,如果已经计算出了泵的正常、最小、最大三种流量,选择泵时,以最大流量为依据,兼顾正常流量。若只知道装置的正常流量,则应采用适当的安全系数估算泵的流量。(2)扬程:装置系统所需的扬程是选泵的另一重要参数,当工艺设计中已给出所需扬程值时,可直接采用;若没有给出扬程值而需要估算时,先要绘出泵装置的立面流程图,标明离心泵在流程中的位置、标高、距离、管线长度及管件数等,计算流动损失,必要时再留出余量,最后确定泵需提供的扬程。一般要按放大5%~20%余量的扬程进行选型。(3)液体性质:包括液体介质的名称、物理性质、化学性质和其他性质(温度、介质中固体颗粒直径和气体含量等),这是系统扬程、有效汽蚀余量的计算依据,也是选用泵的材料和哪一种轴封形式的重要依据。(4)装置系统的管路布置条件:指的是输送液体的距离、高度以及输送方向等,包括吸液侧的最低液面、排出侧的最高液面、管路的规格以及长度、数量等,以便进行系统扬程和汽蚀余量等参数的计算。(5)操作条件:操作条件很多,如液体的输送压力、饱和蒸气压力、吸入压力、泵安装位置的海拔高度、环境温度、泵是间隙运行还是连续运行、泵的位置是固定的还是可移动的等。这是泵选型的依据,也是选择离心泵台数的依据。
  • [技术知识] 往复压缩机的内部结构详解(上)
    往复式压缩机主要由机体、曲轴、连杆、活塞组、气阀、轴封、油泵、能量调节装置、油循环系统等部件组成。结构示意简图如图1所示。图1 压缩机内部结构示意图下面简单介绍下压缩机主要零部件。01 机体往复式压缩机的机体包括气缸体和曲轴箱两部分,一般采用高强度灰铸铁(HT20-40)铸成一个整体。它是支承气缸套、曲轴连杆机构及其他所有零部件重量并保证各零部件之间具有正确的相对位置的本体。气缸采用气缸套结构,安装在气缸体上的缸套座孔中,便于当气缸套磨损时维修或更换。图2~图5为四种缸体模型图。图2 一进一出铸铁缸体图3 二进二出铸铜缸体图4 三进三出铸铁缸体图5 四进四出铸铁缸体02 曲轴曲轴是往复式压缩机的主要部件之一,传递着压缩机的全部功率。其主要作用是将电动机的旋转运动通过连杆改变为活塞的往复直线运动。曲轴在运动时,承受拉、压、剪切、弯曲和扭转的交变复合负载,工作条件恶劣,要求具有足够的强度和刚度以及主轴颈与曲轴销的耐磨性。故曲轴一般采用40、45或50井优质碳素钢锻造。图6为两个不同形式的曲轴。图6 曲轴03 连杆连杆是曲轴与活塞间的连接件,它将曲轴的回转运动转化为活塞的往复运动,并把动力传递给活塞对气体作功。连杆包括连杆体、连杆小头衬套、连杆大头轴瓦和连杆螺栓。连杆结构如图7所示。连杆体在工作时承受拉、压交变载荷,故一般用优质中碳钢锻造或用球墨铸铁(如QT40-10)铸造,杆身多采用工字形截面且中间钻一长孔作为油道。图7 连杆结构04 十字头十字头是连接活塞杆与连杆的部件。它在中体导轨里作往复运动,并将连杆的动力传给活塞部件。十字头主要由十字头体、十字头销、十字头滑履和紧固装置组成。十字头结构如图8所示。对十字头的基本要求是重量轻,耐磨并具有足够的强度。十字头体为双侧圆筒结构,通过榫槽与滑履定位,用螺钉连接成一体。十字头滑履为可更换结构,承压表面浇注轴承合金,设油槽和油路。十字头销分为圆柱形和锥形销,钻有轴和径向油孔。图8 十字头结构05 填料填料主要是密封气缸和活塞杆间隙的元件,它可以阻止气体自气缸向机身内泄漏。有的压缩机根据气体或用户对气质的要求又有前置填料组和后置填料组之分,一般用于有毒、易燃易爆、贵重气体、无油等压缩机,两组填料组之间有一隔腔。前置填料主要是密封压缩机气缸内的气体不至外泄,前置填料结构如图9所示。而后置填料起辅助密封作用,密封环一般采用双向密封,其内部布置有保护气接入口,也可与刮油环组合使用,不设润滑点,也没有冷却装置,后置或中间填料结构如图10所示。图9 前置填料组结构示意图图10 后置或中间填料组结构示意图
  • [案例分享] 某水泥厂提升机联轴器断裂、地脚螺栓松动故障诊断案例
    今天因大师给大家分享的干货是某大型水泥集团下属一水泥工厂的提升机联轴器断裂与地脚螺栓松动故障诊断案例。斗式提升机是一种固定装置的机械输送设备,用来垂直提升经过破碎机的石灰石、煤、石膏、熟料、干粘土等块粒状物料以及生料、水泥、煤粉等粉状物料,可广泛应用于各种规模的水泥厂、饲料厂、面粉厂、米厂、油厂、淀粉厂以及粮库、港口码头等的散装物料的提升。根据料斗运行速度的快慢不同,斗式提升机可分为离心式卸料、重力式卸料和混合式卸料等三种形式。PART.1 设备告警该水泥集团与因联科技于2020年6月开启合作,在其下属水泥工厂部署iPHM设备健康智能维护云平台,实时监测设备运行情况,保证安全生产。2022年4月19日,因联诊断工程师收到微信小程序告警,提示该水泥厂01提升机1线2#的联轴器运行数据出现异常,电机驱动端速度、加速度、包络附近都明显上升,速度有效值达到10mm/s,加速度最大值达到100m/s2,包络值最大值达到200m/s2,超过ISO10816振动标准报警值,触发了4级报警。图1 设备告警图PART.2 故障诊断发生故障的提升机基础信息:电机额定转速:980r/min电机驱动端轴承型号:6314联轴器类型:尼龙销输入轴轴承型号:32318从电机驱动端趋势图(图2)可以看出,该提升机自4月18日开机后,电机驱动端速度、加速度、包络附近数值都有明显上升,在4月19日触发了4级报警。图2 电机驱动端趋势图从电机驱动端速度频谱图(图3)可以看出,电机驱动端速度频谱中主要为转频及其谐频成分,谐频数量较多,且1x和2x转频成分幅值很高,与联轴器故障特征相符。图3 电机驱动端速度频谱图PART.3 拆机验证诊断师随即通知现场设备管理人员,建议他们尽快检查设备联轴器。设备管理人员立刻组织了现场检查,发现电机地脚螺栓松动、联轴器异响,与诊断师诊断结论一致。但由于暂时无法停机检查,工作人员决定先紧固地脚螺栓坚持运行至当日下午进行停机检修。螺栓紧固后,振动出现了短时间的下降,但随后便恢复至原有水平,并在下午3点联轴器断裂造成设备停机。停机后,管理人员进行现场维修,更换联轴器后设备振动数值恢复正常水平,见图5。图4 现场工作人员反馈图5 维修前后电机驱动端频谱图
  • [交流吐槽] 物联网和基于云的网络安全如何提高企业生产力
    互联网使用的兴起确实促进了通过数字方式进行的数据交换。物联网、人工智能/机器学习、自动化和数据运营等当前趋势,以及数字印度等政府倡议所进一步倡导的趋势,正在说服领导者采用一种有助于他们在数字经济中蓬勃发展的方法。此外,Covid-19大流行也大大扩大了印度采用数字技术的规模。虽然大流行肯定会破坏商业生态系统,但也为企业提供了加强数字基础设施、为未来做好准备的机会。不过,一个不可避免的争论是网络安全。网络安全已经成为每个组织关注的一个领域,无论其可能拥有多少资源来对抗网络攻击。随着时间的推移,攻击者已经开发出更新的策略,部署最新的技术来窃取数据和密码等关键信息,并破坏运营,从而影响整体业务。随着我们迈向数字化的未来,印度正成为网络攻击者关注的焦点。根据印度计算机应急响应小组(CERT-In)的一份报告,今年(截至2022年6月)报告了超过67.4万起网络安全事件。印度企业面临的挑战是什么?虽然印度企业在过去十年中已经开始了数字化之旅,但其生态系统仍然缺乏对网络威胁、及其影响和预防的知识和理解。勒索软件、网络钓鱼和数据盗窃等网络攻击可能会带来许多业务挑战,如客户和数据丢失、声誉损害、财务损失和知识产权盗窃。因此,企业了解网络安全及其对组织的影响至关重要。企业需要意识到,网络威胁和攻击等破坏会影响企业的整体效率和生产力。物联网(IoT)在提高企业生产力方面的作用随着企业不断创新,以构建更智能、更互联的工作空间,组织正在为团队和工作场所配备物联网应用程序,以维持运营。他们正在使用连接设备与团队协作,并跟踪、监控和管理整个组织的操作。以下是企业可以通过物联网应用寻求的一些好处。改善协作——通过远程或混合工作,物联网使设备和人员能够跨地理位置连接,无论规模大小。其允许团队使用便携式设备和云托管应用程序进行实时协作和网络共享。简化操作——物联网应用程序还能够简化和简化流程,同时与相关团队共享实时更新。例如,在库存管理中,可以跟踪和监控资产,同时为管理人员提供资产移动、位置和交付方面的实时状态。通过智能物联网传感器,可以跟踪物品在仓库或商店中的确切位置。增强客户体验(CX)-通过物联网应用,特别是企业。面向消费者的企业有一个令人兴奋的机会与其客户沟通和参与。物联网应用程序可以提供交互式、经济实惠且易于访问的平台,以收集反馈并利用数据获得洞察力以改进CX。例如,酒店可以为客房配备智能物联网设备,将客户24小时全天候直接连接到前台,并收集有关服务的反馈。采用基于云的网络安全解决方案组织现在存在于一个复杂的基础设施环境中,这比以往任何时候都更加加剧了互联网的基本问题。他们曾经依赖于解决这些问题的本地盒子从未被设计用于这样的环境。其结果是,网络层的重大架构转变正在进行中,为了确保跨组织最重要资产的速度、可靠性和安全性,基于云的网络安全解决方案是必要的。零信任密封零信任是一种安全框架,需要对试图访问网络边界内外的专用网络上信息的设备或人员进行严格和持续的验证。由于互联网是所有业务运营的主要平台,因此实施像零信任t这样的安全模型是极其关键的,其要求用户、设备和系统通过强制执行基于身份的数据访问规则来证明其可信度。这通过减少对周边生态系统保护的依赖来增强安全性。随着数字化、技术创新和不断变化的工作环境,企业必须确保其人员和流程得到保护。虽然实施网络安全解决方案似乎是一项艰巨的任务,但这是一项值得投资的投资,可以使企业安全并为未来做好准备。
  • [技术知识] 油气储运和化工生产中常用的特殊离心泵
    01 离心式油泵离心式油泵综合考虑了石油化工、储运生产中输送介质的易燃、易爆、温度较高、具有腐蚀性等因素后而设计的,对输送油品适应性好,是目前应用最广的一种离心泵。目前生产中采用的是Y型离心式油泵,它可分为悬臂式、两端支撑式和多级节段式3种类型。根据输送介质的不同,与介质接触的主要零件如泵体、泵盖、叶轮等采用3种不同材料:第Ⅰ类:铸铁,不耐腐蚀,使用温度为-20~200℃;第Ⅱ类:铸钢,不耐腐蚀,使用温度为-45~400℃;第Ⅲ类:合金钢,耐中等腐蚀,使用温度为-45~400℃。Y型离心泵体积小,重量轻,结构简单,便于检修,它的流量为6.25~500m3/h,扬程在60~603m 范围内。图1为Y型离心油泵。图1 Y型离心油泵1一泵体;2—叶轮;3一泵盖;4—油封环;5—软填料;6—压盖;7—轴套;8—轴;9—托架;10—联轴器;11—密封环;12—叶轮螺母02 屏蔽泵随着化学工业的发展以及人们对环境、安全意识的提高,对化工用泵的要求也越来越高,在一些场合对某些泵提出了绝对无泄漏要求。这种需求促进了屏蔽泵技术的发展。屏蔽泵由于没有转轴密封,可以做到绝对无泄漏,因而在化工装置中的使用已越来越普遍。普通离心泵的驱动是通过联轴器将泵的叶轮轴与原动机的轴相连接,使叶轮与原动机一起旋转而工作,而屏蔽泵是把泵和电动机连在一起,电动机的转子和泵的叶轮固定在同一根轴上,利用屏蔽套将电动机的转子和定子隔开,转子在被输送的介质中运转,其动力通过定子磁场传给转子。因此,屏蔽泵是一种无密封泵,泵和驱动电动机都被密封在一个被泵送介质充满的压力容器内,此压力容器只有静密封,并由一个电线组来提供旋转磁场并驱动转子。这种结构取消了传统离心泵具有的旋转轴密封装置,故能做到完全无泄漏。此外,屏蔽泵的制造并不复杂,其液力端可以按照离心泵通常采用的结构型式和有关标准规范来设计、制造。我国屏蔽泵的系列是P型,有立式和卧式两种,一般大容量机组采用立式,小容量机组采用卧式;工作温度为-35~100℃(常温型)和 100~350℃(高温型);流量为 0.9~200m3/h,扬程为16~98m。图2为普通型屏蔽泵。图2 普通型屏蔽泵1—转子;2—后轴承;3—循环管路;4—定子;5—过滤器;6—叶轮;7—泵体;8—前轴承03 低温泵低温泵是在石油、化工装置中用来输送液态烃、液化天然气以及冷冻装置中的液态氧、液态氮等液化气的特殊泵,又称为深冷泵。因为此类介质在输送过程中一旦从泵周围吸收热量,则泵内的液体会气化,会影响泵的正常工作,所以对低温泵的结构、材料、安装和运行等方面都有特殊要求。DLB型系列立式多级离心泵,适用于输送液化气或高真空度的冷凝水,输送温度达-40℃,有些可达-100℃,最高扬程为506m,流量为100m3/h,最大配用功率为132kW。如图3所示,泵体为双壳体,内壳体由导流体组成。第一级叶轮位于泵转子的最下端,这样可以提高泵的吸入能力。泵的过流部分采用不锈钢制造,输送冷凝水可采用铸铁制造。叶轮由钩头键轴向固定于泵轴上。轴封为单端面、旋转式、平衡型机械密封。当输送低温介质时,静环的大气侧在停泵时易结冰,所以在停机后必须从密封压盖处通入氮气进行干燥。泵轴与电动机采用加长联轴器连接。图3 DBL型泵的结构示意图1—加长联轴器;2—机械密封;3—钩头键;4—密封环;5—首级叶轮;6—泵盖;7—衬套;8—筒体;9—导流器;10—下轴承04 耐腐蚀泵石油化工生产中经常遇到酸碱以及其他具有腐蚀性的液体物料,用来输送这类物料的离心泵称为耐腐蚀离心泵,这种泵的型号均以F表示。其工作原理与离心泵类似,结构上表现出来的特点往往由制造材料决定。表1列出了制造耐腐蚀离心泵的常用材料。我国F型耐腐蚀泵主要有不锈钢泵和高硅铸铁泵等。图4为不锈钢耐腐蚀泵。表1 耐腐蚀离心泵的常用材料图4 不锈钢耐腐蚀泵结构示意图1—泵体;2—叶轮;3—泵盖;4—泵轴;5—轴套;6—叶轮螺母;7—密封环;8,16—键填料;9—丝堵;10—托架;11—密封圈;12—轴承;13—视油孔;14—托酸盘;15—联轴器;17—填料压盖;18—封液管;19—压盖
总条数:564 到第
上滑加载中