建立一个低成本的工业控制器和树莓Pi 3
很少有小型的工业操作需要复杂的操作环境、高的I/O容量和复杂的功能需求,而这些要求是可编程逻辑控制器(PLCs)的初衷。虽然缩小版的PLCs是可用的,但设计师现在也可以选择从一系列低成本的开源硬件和软件解决方案中选择有效的工业监控和控制。
这种解决方案的一个例子是树莓Pi基金会的小覆盆子Pi 3及其相关的插件板。本文将描述树莓Pi 3的主要特性,然后讨论如何使用它来监视和控制应用程序。
为什么要为小商店的工业控制树莓派?
对于许多较小的操作,Raspberry Pi 3平台提供了一种低成本的解决方案,具有强大的性能。完全有能力处理专用工业自动化任务,覆盆子π3板结合了Broadcom手臂®皮层®-A53-based处理器,1 gb的RAM,数字接口,wi - fi,蓝牙连接。处理器本身是一个高性能的系统芯片(SoC)设备,它集成了一个四核ARM Cortex-A53 CPU和512 Kbytes的L2缓存,以及54个GPIOs在三家银行中安排。
每个GPIO都支持至少两个和最多六个可选功能,包括脉冲宽度调制器、时钟和串行接口。开发人员可以使用任何未分配的GPIOs作为中断行、输入或输出,可以提供最多16毫安(mA)(最高为50 mA / GPIO银行)。
与树莓Pi家族的其他成员一样,Raspberry Pi 3的设计是为了使嵌入式开发简单到适合初学者,但是足够强大,可以满足有经验的开发人员的需求,他们需要更复杂和更强大的处理需求。
首先,开发人员只需将电路板的视频端口连接到显示器和USB接口,就可以连接到键盘和鼠标。对于软件设计,开发者可以建立一个广泛的生态系统,由树莓派基金会(Raspberry Pi Foundation)的基于linux的免费linux操作系统支持,该系统是通过董事会的micro SD接口从存储卡上加载的。
添加工业能力
除了性能和易于开发之外,树莓Pi简化了功能,使其更适合于工业自动化应用程序的各种需求。为了增加硬件功能,开发人员只需要在树莓Pi 3板上插入一个名为HAT(硬件附加在上面的硬件)的插件板即可。与更复杂的工业系统一样,HAT提供了一种标准方法来识别帽子,并根据需要自动配置GPIOs和驱动程序。因此,开发人员只需插入Pimoroni PIM213自动化帽(图1)即可立即升级他们的树莓Pi系统。
Pimoroni自动化帽插件板的图像。
图1:开发人员可以通过附加专门的插件板(如Pimoroni自动化帽)来升级基础树莓Pi 3的工业自动化。(图片来源:Pimoroni)
专门设计用于监视和控制自动化系统,Pimoroni自动化帽结合了多个I/O通道,包括模拟和数字输入、动力输出和继电器控制。与它们的24伏(V)能力一起,I/O通道提供了大量的输入和输出缓冲。例如,继电器输出支持多达2安培(A),足以驱动低功率24伏特部件,如Crouzet 81 546001电磁阀。
对于带有自动化帽的软件开发,Pimoroni提供了一个相关的Python模块,只需要几行代码就可以使用Hat的硬件特性。当导入到Python程序中时,Pimoroni模块为模拟输入、数字输入、数字输出、中继输出和LED光控制创建软件对象,其中包括适当的底层读/写函数(清单1)。
类AnalogInput(对象):
类型=“模拟输入”
def __init__(self, channel, max_voltage, led):
自我。_en_auto_lights = True
自我。通道=通道
自我。值= 0
自我。max_voltage =浮动(max_voltage)
自我。光= SNLight(led)
def auto_light(自我价值):
自我。_en_auto_lights =值
还真
def读(自我):
"返回模拟输入的读电压"""
返回圆(自我。*自我价值。max_voltage,2)
def _update(自我):
自我。值= ads1015.read(self.channel)
def _auto_lights(自我):
如果self._en_auto_lights:
adc = self.value
self.light.write(max(0.0分钟(1.0,adc)))
清单1:Pimoroni关于自动化帽的Python模块通过处理详细的事务来简化开发,比如从内置的模数转换器(ADC)读取数据。(图片来源:Pimoroni)
每个对象标识对应的通道和其他相关数据。例如,在创建时,模拟输入对象包括关联pin的最大电压(见清单1中的init函数)。如清单1所示,ADC模块依次执行设置ADC所需的低级别I2C事务,并执行转换,然后以有用的形式返回值(清单2)。
类ads1015:
def __init__(自我,i2c_bus = None,addr = addr):
自我。_over_voltage = [False] * 4。
自我。i2c_bus = i2c_bus
如果没有hasattr(i2c_bus,“write_i2c_block_data”)或没有hasattr(i2c_bus,“read_i2c_block_data”):
提高类型错误(“为i2c_bus提供的对象必须实现write_i2c_block_data和read_i2c_block_data”)
自我。addr = addr
def read(self, channel=0,可编程_gain=PGA _4_ 096V, samples_per_second=1600):
#理智的违约
配置= 0x0003 | 0x0100。
配置| = SAMPLES_PER_SECOND_MAP[samples_per_second]
配置| = CHANNEL_MAP(频道)
配置| = PROGRAMMABLE_GAIN_MAP[programmable_gain]
设置“单镜头”模式。
配置| = 0 x8000
#写入单个转换标志。
self.i2c_bus.write_i2c_block_data(自我。addr, REG_CFG, [(config >> 8) & 0xFF, config & 0xFF])
延迟= (1.0 / samples_per_second) + 0.0001。
time . sleep(延迟)
data = self.i2c_bus.read_i2c_block_data(自我。addr,REG_CONV)
值=(数据[0]<< 4)|(数据[1]>> 4)
如果值& 0 x800:
值-= 1 << 12。
值/= 2047.0 #除以FS的百分比。
值* =浮动(programmable_gain)
值/= 3300.0 #除以VCC。
返回值
…
清单2:ADC会话的高级函数调用调用一个read例程,该例程执行I2C总线写入启动转换,睡眠时间足够长以完成转换,并执行I2C总线读取来收集结果。(图片来源:Pimoroni)
然而,对于开发人员来说,读取模拟值只需要在指定的模拟输入(. 1)上执行模拟对象的高级读取函数(.read()):
值= automationhat.analog.one.read()
图书馆支持这个简单的模型,以其他帽子的特点,因此,开启或关闭继电器是一个简单的呼叫:
automationhat.relay.write(1)# 1 = 0 =
灵活的选项
Pimoroni自动化帽提供了小型工业自动化应用程序所需的基本IO功能,但是开发人员可以从一套丰富的可用HATs中进行选择,以满足特定应用程序(如工业自动化)所需的各种特性。例如,Adafruit 3013 RTC帽提供实时时钟(RTC)功能,这并不是板本身的标准特性。树莓派设计师期望开发人员能把板固定在互联网上,在那里它可以使用标准的网络时间协议(NTP)来保持时钟时间。因此,设计时需要一个外部的RTC,例如Adafruit RTC帽,它可能会因为设计或意外而失去与Internet的连接。
在添加诸如RTC这样的功能时,开发人员不需要在工业自动化设计中限制自己的一顶帽子。开发人员可以在树莓Pi板上叠加多个帽子。虽然大多数的帽子都是为堆放而设计的,但开发人员可能需要添加堆垛头,比如Adafruit的2223来完成组装,或者M2.5 standoffs来消除HATS可能互相碰触或底座的机会。
使用堆叠标头和standoffs,开发人员可以很容易地堆叠一顶帽子,例如Adafruit 2348运动帽,以增加许多工业自动化应用中需要的电机驱动。每个2348马达帽可以驱动两个步进电机或四个直流电机。事实上,开发人员可以堆叠多达32个插件板来支持64个步进电机或128个直流电机(图2)。
多重Adafruit 2348运动帽图像。
图2:开发者可以在设计中叠加多个Adafruit 2348运动帽来支持64个步进电机或128个直流电机。(图片来源:Adafruit)
与Pimoroni自动化帽一样,Adafruit 2348运动帽可以使用一些简单的Python命令来编程。Adafruit的运动帽示例软件甚至演示了使用Python线程模块并行运行多个电机的基本设计模式(清单3)。
从Adafruit_MotorHAT进口Adafruit_MotorHAT, Adafruit_DCMotor, Adafruit_StepperMotor。
进口线程
#创建一个默认对象,不改变I2C地址或频率。
mh = Adafruit_MotorHAT()
#创建空线程(这些线程将持有步进1和2线程)
相约= threading.Thread()
st2 = threading.Thread()
。
myStepper1 = mh.getStepper(200, 1) # 200 steps/rev, motor port #1。
myStepper2 = mh.getStepper(200, 2) # 200步/rev, motor port #1。
myStepper1.setSpeed(60)# 30 RPM
myStepper2.setSpeed(60)# 30 RPM
(Adafruit_MotorHAT stepstyles =。单身,Adafruit_MotorHAT。翻倍,Adafruit_MotorHAT。交错,Adafruit_MotorHAT.MICROSTEP]
def stepper_worker(stepper, numsteps, direction, style):
#打印(“Steppin !”)
步进。步骤(numsteps、方向、风格)
#打印(“做”)
而(真正的):
如果不是st1.isAlive():
randomdir =随机的。randint(0,1)
如果(randomdir = = 0):
dir = Adafruit_MotorHAT.FORWARD
其他:
dir = Adafruit_MotorHAT.BACKWARD
randomsteps = random.randint(50)
相约=线程。线程(target=stepper_worker, args=(myStepper1, randomsteps, dir, stepstyles[random.randint(0,3)])
st1.start()
如果不是st2.isAlive():
randomdir =随机的。randint(0,1)
如果(randomdir = = 0):
dir = Adafruit_MotorHAT.FORWARD
其他:
dir = Adafruit_MotorHAT.BACKWARD
randomsteps = random.randint(50)
打印(“% d步骤”% randomsteps)
st2 =线程。线程(target=stepper_worker, args=(myStepper2, randomsteps, dir, stepstyles[random.randint(0,3)])
st2.start()
清单3:Adafruit的motor HAT Python模块包括示例软件,例如这段代码演示了使用简单的控制命令和使用Python线程模块来控制一对步进电机。(图片来源:Adafruit)
对于没有提供的功能,开发人员不需要限制自己的帽子格式。DFRobot DFR0327 Arduino护盾,Seeed技术GrovePi+ starter kit,以及MikroElektronika MIKROE-2756点击盾牌,让开发者可以获得广泛的Arduino盾牌,格罗夫设备,和MikroBUS点击面板。
使用这些板子,开发者可以快速添加对标准接口的支持,通过添加MikroElektronika MIKROE-988可以点击棋盘,4-20 mA当前循环与MikroElektronika MIKROE-1296 4-20 mA电流环点击板。
小店铺的设计。
即使在快速配置了带有所需附加功能的树莓基于pi的设计之后,开发人员也常常在构建适当的用户界面时失去时间。使用Raspberry Pi 3,开发人员可以将设计与Adafruit的IO云服务连接起来,为用户提供图形反馈和自动化过程的控制。云服务允许开发人员创建简单的数据和流程信息提要(清单4),并构建指示板,允许用户从桌面、智能手机或其他移动设备上的任何web浏览器监视和控制项目(图3)。
#导入库并创建REST客户端实例。
从Adafruit_IO进口端
客户端(“你的ADAFRUIT IO KEY”)
#将值100发送给一个名为“Foo”的提要。
aio。发送(“Foo”,100年)
清单4:开发人员可以轻松地将数据从他们的工业自动化应用程序流到Adafruit IO云,以显示和控制。(图片来源:Adafruit)
Adafruit IO仪表板的图像。
图3:开发人员可以从树莓Pi 3的工业自动化应用程序中显示信息,并使用Adafruit IO仪表板提供控制。(图片来源:Adafruit)
简单的软件开发、多样化的插件板和高性能的树莓Pi的组合为小型工业自动化应用提供了一个合适的解决方案。然而,在某些应用程序中,开发人员可能需要更严格的时间控制,而不是使用RTC提供的配置,例如Adafruit 3013 RTC帽。
3013 RTC帽基于集成DS3231 RTC集成电路,它提供两个可编程报警和一个方波输出信号。开发人员可以使用警报在指定的天数、小时、分钟和秒内生成一个中断,或者使用方波以其1赫兹(Hz)速率生成中断。对于需要周期性中断超过1hz的应用程序,开发人员需要使用处理器的系统定时器来开发定制的软件功能,或者构建定制的硬件计数器,以按期望的速度生成中断。
在需要更快时间分辨率的应用程序中,同样重要的需求是确定性响应延迟。在高速率时,标准的Raspbian操作系统中响应延迟的变化可能会影响精度。尽管标准系统很可能会以毫秒级的分辨率提供足够的确定性响应,但是开发人员可能需要转向使用Linux PREEMPT_RT补丁来满足更严格和更确定的解决方案需求的方法。
结论
传统的PLCs提供的能力通常超出了小型制造、机加工和原型制造车间的需求和预算。对于这些应用程序,操作人员通常需要在树莓Pi 3的能力范围内较低的需求。
使用Raspberry Pi 3和适当的插件板,开发人员可以快速实现专门的工业自动化系统,能够满足各种小型商店操作的需求。
建立一个低成本的工业控制器和树莓Pi 3相关推荐
- 学界 | UC伯克利发布一个低成本家居机器人,会叠衣服、会泡咖啡
BLUE 机器人叠毛巾,实际花费时间约 50 秒 来源:AI科技评论 加州大学伯克利分校 Pieter Abbeel 教授今天在推特公开宣布了伯克利机器人学习实验室最新开发的机器人 BLUE.这款机器 ...
- 陆奇:建立一个繁荣的创业者社区
2020年11月21日,奇绩创坛首届路演日在中关村举行,这是从"YC中国"更名为"奇绩创坛"后的首届路演日.在奇绩创坛创始人兼CEO陆奇发表主题阐述后,参与路演 ...
- 独家|OpenCV1.11 使用OpenCV制作一个低成本立体摄像机
作者:Kaustubh Sadekar 翻译:顾伟嵩 校对:张玲本文约3000字,建议阅读6分钟 本文我们将学习如何创建一个定制的低成本立体摄像机. 标签:3D计算机视觉,摄像机标定,经典计算机视觉, ...
- html链接增加参数,插入当前URL到@ Html.RouteLink参数来建立一个链接
我可能会这样做错误的方式,因为我是一个.NET MVC的noob,但有没有一种方法来插入当前URL作为参数一个@ Html.Routelink?插入当前URL到@ Html.RouteLink参数来建 ...
- ONF执行主席Dan Pitt:下一个战争可能是控制器
ONF执行主席Dan Pitt指出,下一个战争可能是控制器的战争,所以很多活动围绕控制器进行."在整个控制器方面,因为我们可以做到的事情,我们有很多底层的.非常好的建立起来.所以整个控制器必 ...
- 手把手教(超详细):个人如何快速建立一个网站
很多不是程序员的朋友总是理解不了网站到底是什么,它到底是怎么存在和运行的,也总是以为建一个网站很复杂.其实建网站并不难,也不需要花费太大资金,只需要以下6个步骤即可做出一个网站. 第一步:注册域名并实 ...
- Python之 - 使用Scrapy建立一个网站抓取器,网站爬取Scrapy爬虫教程
Scrapy是一个用于爬行网站以及在数据挖掘.信息处理和历史档案等大量应用范围内抽取结构化数据的应用程序框架,广泛用于工业. 在本文中我们将建立一个从Hacker News爬取数据的爬虫,并将数据按我 ...
- 利用树莓派3和RTL-SDR V3搭建一个低成本的QRP小功率监测点
TUTORIAL: SETTING UP A LOW COST QRP (FT8, JT9, WSPR ETC) MONITORING STATION WITH AN RTL-SDR V3 AND R ...
- matlab 学自动驾驶(3) 建立一个驾驶场景并生成综合检测——driving scenario Designer
matlab 学自动驾驶(3) 建立一个驾驶场景并生成综合检测--driving scenario Designer 文章目录 matlab 学自动驾驶(3) 建立一个驾驶场景并生成综合检测--dri ...
- 手势识别:使用标准2D摄像机建立一个强大的的手势识别系统
手势和语言一样,是人类交流的一种自然形式.事实上,它们可能是最自然的表达方式.进化研究表明,人类语言是从手势开始的,而不是声音.另一个证明就是婴儿在学会说话之前,使用手势来传达情感和欲望. 许多科技公 ...
最新文章
- JBoss 系列八十: jBPM 6 中使用 jbpm-console 创建执行 BPM 流程 - I
- 我的第二故乡 – 广州
- python鼠标键盘操作 PyUserInput
- 21天实战人工智能系列:人工智能产品经理最佳实践(3)
- dk 7 linux x64.rpm,linux x64 Java/JDK 11下载 jdk-11.0.7_linux-x64_bin.rpm官方镜像版
- 美国密歇根州立大学计算机专业,密歇根州立大学计算机科学与工程系开设的研究领域有哪些?...
- 高质量解读《互联网企业安全高级指南》——目录
- 2021云计算技能竞赛真题卷(附标准答案)
- 【1.2】基本逻辑运算
- [人脸算法]技术方向综述
- unreal engine4效果很不错
- 网站反爬指南:政府网站篇
- 深度学习(十)人脸识别与神经风格迁移
- 新员工犯错续:解决问题
- 【更新】全新的数据填报,更强的BI分析,Wyn Enterprise V3.0 Update 2 发布
- 高并发、高性能下的 会员系统[同程艺龙] — 高可用架构设计实践
- 高温预警c语言,高温预警信号分为几个等级
- Intel开发者手册[2021最新版]和AMD开发者手册[2021年最新版]
- 套接字技术java_java网络编程之套接字TCP
- django admin 账户 输入汉字会报错 'ascii' codec can't encode character u'\u4eba' in position 0: ordinal not i
热门文章
- selenium+python爬取京东评论最多的计算机配置信息
- iOS16新特性及开发适配
- 玩转华为ENSP模拟器系列 | 接入用户采用Windows7客户端通过IKEv2方式接入总部VdPdNd(采用证书认证方式)
- Word 悬挂缩进文本如何对齐
- PMP知识点:工作绩效数据、信息和报告的区别
- Could not initialize proxy - the owning Session was closed ---Hibernate与延迟加载:
- 深度学习在训练时对图片随机剪裁(random crop)
- 49个excel常用技巧(五)
- 转载关于后端开发需要学习的内容
- 手机后端开发用php,【后端开发】php如何获取手机型号