用于开发微型板自动化和控制应用程序的现代python框架
Rackio的Python项目详细描述
Rackio框架
用于开发微型板自动化和控制应用程序的现代python框架。 Github-Rackio Framework
要求
- Python3.6+
- 猎鹰
- pybigparser
安装
pip install Rackio
示例
基本设置
fromrackioimportRackio,TagEngineapp=Rackio()tag_engine=TagEngine()# Tags definitionstag_engine.set_tag("RAND1","float")tag_engine.set_tag("RAND2","float")tag_engine.set_tag("T1","float")tag_engine.set_tag("T2","float")tag_engine.set_tag("T3","float")if__name__=="__main__":app.run()
Rackio提供了一些内置功能,让您可以开始创建快速的编码原型。
添加控件
控件是与标记交互的对象,根据条件更改其值
价值行为
这些操作仅使用定义的常量值更改标记值。
fromrackio.controlsimportCondition,ValueAction,Control# Conditions definitionscond1=Condition("T1",">=","T2")cond2=Condition("T1","<","T2")# Actions definitionsact1=ValueAction("T3",40)act2=ValueAction("T3",80)# Controls Definitionscontrol1=Control("C1",cond1,act1)control2=Control("C2",cond2,act2)app.append_control(control1)app.append_control(control2)
数学动作
这些操作使用定义的数学表达式更改标记值,并且可以在这些表达式中使用定义的标记。
fromrackio.controlsimportMathAction# Conditions definitionscond1=Condition("T1",">=","T2")cond2=Condition("T1","<","T2")# Actions definitionsact1=MathAction("T3","T1 + T2")act2=MathAction("T3","T2 - T1")# Controls Definitionscontrol1=Control("C1",cond1,act1)control2=Control("C2",cond2,act2)app.append_control(control1)app.append_control(control2)
一旦rackio启动并运行,如果满足相关条件,将通过连续观察所有标记值进行更改来触发一些操作。
表达式中支持的函数
您可以按照python可以处理的算术规则定义数学表达式,但只支持一组数学函数和常量。
cos
sin
abs
log10
log
exp
tan
pi
e
添加连续任务
Rackio可以扩展以添加自定义的连续任务和操作
@app.rackit(1)defwriter1():tag_engine.write_tag("T1",15)tag_engine.write_tag("T2",40)direction=1whileTrue:time.sleep(0.5)value=24+2*random()tag_engine.write_tag("RAND1",value)T1=tag_engine.read_tag("T1")T1+=directiontag_engine.write_tag("T1",T1)ifT1>=60:direction*=-1ifT1<=5:direction*=-1
可以将定义的函数注册为要由rackio执行的连续任务。您还可以提供任务列表功能
@app.rackit_on(period=1)defreader():rand1=tag_engine.read_tag("RAND1")rand2=tag_engine.read_tag("RAND2")T1=tag_engine.read_tag("T1")T2=tag_engine.read_tag("T2")T3=tag_engine.read_tag("T3")print("")print("RAND1: {}".format(rand1))print("RAND2: {}".format(rand2))print("T1 : {}".format(T1))print("T2 : {}".format(T2))print("T3 : {}".format(T3))
通过指定它的period
,您可以控制这些任务的时间执行。
测试restful api
一旦应用程序启动并运行,它将部署一个带有falcon
的restful api,并且json
格式是该api支持的标准格式。
使用httpie读取标签
一旦应用程序启动并运行,您就可以通过api进行访问,如果您想尝试使用httpie
,可以使用以下命令安装它:
pip install httpie
现在在终端中执行下一个命令
http localhost:8000/api/tags
您将得到以下信息
HTTP/1.0200OKDate:Tue, 11 Jun 2019 23:54:55 GMTServer:WSGIServer/0.2 CPython/3.7.1content-length:177content-type:application/json
[{"tag":"RAND1","value":25.597755601381692},{"tag":"RAND2","value":49.12890172456638},{"tag":"T1","value":57},{"tag":"T2","value":40},{"tag":"T3","value":97}]
如果要访问特定的标记,例如tagT2
http localhost:8000/api/tags/T2
您将得到以下信息
HTTP/1.0200OKDate:Tue, 11 Jun 2019 23:58:40 GMTServer:WSGIServer/0.2 CPython/3.7.1content-length:26content-type:application/json
{"tag":"T2","value":40}
使用httpie编写标记
您可以通过执行
http POST localhost:8000/api/tags/T2 value=50
您将得到以下信息
HTTP/1.0200OKDate:Wed, 12 Jun 2019 00:01:21 GMTServer:WSGIServer/0.2 CPython/3.7.1content-length:16content-type:application/json
{"result":true}
读取标记历史记录
您还可以使用api读取标记历史记录
http localhost:8000/api/tags/history/RAND1
您将得到以下信息
HTTP/1.0200OKDate:Tue, 18 Jun 2019 02:52:43 GMTServer:WSGIServer/0.2 CPython/3.7.1content-length:4917content-type:application/json
{"tag":"RAND1","value":[0.0,24.628376069489793,25.757258388362462,25.55412553374292,24.555658954786043,25.06933481716872,25.40130983961439,25.689521224514724,25.81125032707667,25.639558206736673,25.349485473327377,24.799801913324295,25.227466610598572,25.27254049615728,25.105421823573916,24.82832764778826,24.65831512999663,25.26014559203846,25.216187451359872,25.151243977491735]}
这样就可以创建自定义的hmtl和javascript视图,以便在rackio上执行AJAX
请求。
要做的事情
Rackio是一个正在开发中的框架,一些功能仍在开发中,很快就会发布,以获得更好的应用程序,这些功能如下所示:
- 完成restful api
- 用户为HMI添加自定义HTML文件的功能
- 用于API访问的基于令牌的身份验证
- 基于网络的监控和管理
- 报警定义
- modbus和mqtt协议
- 自动数据记录
- 趋势和历史数据