4G路由器作为物联网通用服务器


ICR-3200系列的路由器旨在替代经典的捆绑产品:单板计算机+调制解调器+路由器。 现在,您可以直接在路由器上运行所有必要的逻辑。 得益于强大的ARM处理器,512 MB的RAM和〜2 GB的内部闪存,您甚至可以在路由器上启动nodejs服务器!

路由器还内置了串行RS-232 / 485接口,并且在具有完全根访问权限的操作系统中可以立即使用。 还提供了一个用于构建本机程序的开放环境以及一个用于处理低级硬件API的C / C ++库。
深度睡眠功能在使用电池供电时将节省能量:只有在确实需要通信时才可以激活路由器。

在本文中,我们将分析设备的有趣功能,并在实践中尝试使用Shell脚本的I / O接口。

技术指标


ICR-3200系列路由器是在单个硬件平台上制造的,并由LTE,Wi-Fi和地理定位(GNSS)的频率范围不同的五个型号表示。 设备的定位是替代一台单板计算机和一个路由器。 强大的处理器和大量的RAM使您可以直接在路由器上运行资源密集型用户应用程序。

  • Cortex-A8处理器 -1 GHz,32位架构
  • 512 MB内存
  • 1.5至4 GB的闪存 -用于存储用户数据
  • I / O端口 -用户程序可以使用RS-232 / 485接口和数字I / O端口。

另外,还有一个ICR-3211B模型可根据LTE Cat标准工作。 M1( NB-IoT )。 LTE Cat协议。 M1是专为M2M解决方案而设计的,具有低数据传输速率(375 kb / s),并且在困难的室内通信条件下具有更长的传输距离和更高的稳定性。 路由器具有内置的电离器(超级电容器) ,该电离器可在完全断电后使设备在短时间内工作。

深度睡眠模式


深度睡眠模式可让您进入路由器的状态,其中所有进程均被冻结,并且硬件已关闭以节省能源,而设备的所有功能均已关闭,从侧面看,它将完全关闭。 该模式下的能耗不超过10 mW


在睡眠模式下,路由器几乎不消耗能量,并在3秒内唤醒

当您需要唤醒路由器进行数据传输时,它会在约3秒内唤醒 。 当然,在蜂窝网络上注册调制解调器将需要额外的时间,但这比从头下载路由器要快得多。 对于大多数情况下处于空闲状态并偶尔激活的自供电系统,该选项非常有用,可以执行主动操作,例如警报或备用单元。

觉醒并入睡


睡眠和唤醒的管理通过“ 睡眠模式”模块进行。

有两种方法可以控制睡眠模式:

  • 通过数字输入 -在此模式下,路由器由外部设备(例如微控制器)控制。 通过LOW信号,路由器将在数字输入上进入睡眠状态,当路由器接收到HIGH信号时,它将唤醒,反之亦然。 您还可以配置响应超时,以防止意外切换。
  • 路由器通过内部计时器计时并在适当的时间唤醒/入睡。 进行一段时间的一次性操作或下载数据非常方便。


深度睡眠配置界面

最后呼吸功能


远程站点的电源故障尤其令人不快,因为尚不清楚为什么无法与该站点进行通信。 最后一声功能使路由器在完全断电后可以工作一段时间,并发送一条消息,说明发生了事故并且备用电源尚未打开。 由于内置的​​电离电阻器,其资源比可充电电池多得多,因此不需要维护和更换。 这对于可能发生故障的备用电源系统很有用,并且重要的是要跟踪何时完全失去电压。


即使完全断电,路由器也会发送有关电源故障的信号

为了正确响应断电事件,您需要以某种方式对其进行查找。
可以使用status sys shell命令获得当前电源电压:

 $ status sys Firmware Version : 6.1.10 (2019-07-02) Serial Number : ACZ1100000623519 Profile : Standard RTC Battery : Ok Supply Voltage : 12.3 V # ←   Temperature : 37 C # ←    Time : 2019-08-16 16:21:18 Uptime : 0 days, 11 hours, 43 minutes 

或使用硬件Unix I / O控件(ioctl)和C / C ++或其他语言的程序。
该表显示了所需的硬件寄存器的地址。 电流供应电压以毫伏为单位返回整数。 在这种情况下,使用低级API比使用Shell脚本更可取,以加快响应速度。 开发人员指南中提供了有关使用硬件的详细信息


一个ioctl请求,该请求返回当前电源电压。

串行接口


路由器内置了两个串行接口:RS-232和RS-485。 它们使您可以将外围设备直接连接到路由器,而无需使用其他捆扎带。 同时,可以在路由器上启动成熟的Node-RED或Nodejs服务器,从而可以部署一个设备来部署简单的自动化系统,而无需额外的计算机和控制器。



默认情况下,两个接口都可以在Linux中用作标准串行设备:

 ls -la /dev/ttyS* crw------- 1 root root 251, 0 Jan 1 1970 /dev/ttyS0 # ←  rs-232 crw------- 1 root root 251, 1 Jan 1 1970 /dev/ttyS1 # ←  rs-485 crw------- 1 root root 251, 5 Jan 1 1970 /dev/ttyS5 # ←   

所有标准库都将在没有其他设置的情况下支持这些设备,包括Modbus-RTU2TCP模块和其他模块

定制模块


可以使用自定义模块来扩展设备的功能:这是软件包的简化版本,仅在没有软件包管理器的情况下。 可用模块的完整列表可在https://advantech-bb.cz/products/software/user-modules上获得

通过通过Web界面下载软件包文件来手动安装模块:



当前有73个模块可用。 以下是一些有趣的内容:

  • Node-RED是将各种工业协议组合到单个系统中的流行工具。
  • Nodejs是一个完整的nodejs服务器。 大量的RAM和强大的处理器使您可以直接在路由器上运行要求苛刻的应用程序!
  • Python2 / 3
  • Web Shell-允许您通过浏览器在控制台中工作。
  • Azure IoT SDK Python-一组用于为M​​icrosoft Azure IoT中心开发程序的工具。

由于路由器的固件是开放的,因此开发人员可以编写自己的模块,包括带有Web界面的模块。 参考资料可在模块编写指南 公司网站的开发人员部分中找到。 为了方便构建软件包,可以使用现成的交叉编译环境

通过Shell脚本的硬件资源


对于简单的自动化任务,使用外壳脚本很方便,您可以从中控制灯光指示并接收/设置数字引脚的状态。

指示灯指示便于显示命令执行的当前状态。 例如,数据传输指示-频繁闪烁,连接尝试-罕见闪烁,简单-持续亮起。 考虑一下led命令。 在输入处,只需一个参数-LED闪烁的类型。

 # led led on|off|fast|slow 

这是现实生活中的样子:


通过Shell命令演示用户指示器的操作模式

要使用数字引脚,请使用io命令。

 $ io Usage: io [get <pin>] | [set <pin> <value>] io set out0 1 #    OUT0   1 (LOW) io get bin0 #     BIN0 

重要的是要记住,这种情况下的逻辑是相反的。 因此,1 = LOW,0 = HIGH。 使用io命令,我们可以轻松地使用bash脚本中的数字引脚,并为自动化和控制构建简单的逻辑。

为了说明使用数字输入和指示器的简单性,我们将编写一个无用的脚本,该脚本使用LED显示数字输入的状态。

 #!/bin/bash while true do [ $(io get bin0) -eq 0 ] && led fast || led on done 

该脚本的原理很简单:如果BIN0处于状态0,则二极管会经常燃烧,否则会连续燃烧。 这是直播的样子:


bash脚本的演示,该脚本使用指示器显示数字输入的状态。

尽管该脚本很原始,但它清楚地显示了如何在一行中无需附加软件,库和设置,即可从数字输入接收输入数据并对它们做出响应。

参考文献



欢迎来到研华合作伙伴论坛



研华论坛将是讨论物联网本地和全球趋势的独特平台。 在这里,您可以交流使用新技术解决方案和产品的经验,找到新的客户和合作伙伴。 您将不仅有机会看到我们在文章中介绍的产品。 我们将邀请行业领导者和关键合作伙伴的代表-NVidia,Intel和其他将在未来几年积极参与工业物联网发展的公司。 我们很高兴见到工业自动化和物联网领域的所有专家。 参加活动是免费的! 名额有限。 赶快注册

Source: https://habr.com/ru/post/zh-CN464003/


All Articles