用于开发微型板自动化和控制应用程序的现代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协议
  • 自动数据记录
  • 趋势和历史数据

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java为扫描器的输入生成字符序列   hibernate中的java实体合并   如何使变量在Java文件中成为全局变量   java JVM崩溃“异常访问冲突”   向MediaMetadataRetriever中的setDataSource()发送Uri时发生java IllegalArgumentException   java没有节约协议?   用户界面java gui帮助actionlistener   java索引越界异常,即使大小小于索引?   在C++中使用java的困惑   在普通java编码中插入图像   JDBC上的java缓存数据   在Java中,在字符串的特定位置替换子字符串   java在运行elasticsearch集群时遇到Perm Gen空间问题   java Soap故障跟踪   java拆分器。固定长度(int)。拆分(字符串)   java获取jar内部包的路径