跳转到主要内容

*fuefit*根据物理参数调整引擎图

项目描述

Development Status Integration-build status Documentation status Latest Version in PyPI Downloads Issues count

版本::

x.x.x

文档::

https://fuefit.readthedocs.org/

源代码::

https://github.com/ankostis/fuefit

PyPI仓库::

https://pypi.python.org/pypi/fuefit

关键词::

汽车工业, 汽车, 汽车, 消耗, 发动机, 发动机图, 调整, 汽油, 车辆, 车辆

版权::

2014 欧洲委员会 (JRC-IET)

许可证::

EUPL 1.1+

Fuefit 是一个python包,它根据具有物理意义的系数从测量的发动机数据点计算出调整后的燃料图。

简介

概述

Fuefit计算器是为了对测量的发动机燃油消耗数据(发动机图谱)进行统计分析而开发的。这可以将描述发动机燃油图谱所需的信息量从几百个点减少到七个统计计算参数,而信息损失有限。

更具体地说,这个软件的工作原理如下

  1. 接受发动机数据作为输入,由转速、功率和燃油消耗或等效数量(例如平均活塞速度(CM)、制动平均有效压力(BMEP)或扭矩、燃油平均有效压力(PMF))的三元组组成。

  2. 将提供的输入拟合到以下公式 [1] [2] [3]

\begin{equation*} \mathbf{BMEP} = (a + b\times{\mathbf{CM}} + c\times{\mathbf{CM^2}})\times{\mathbf{PMF}} + (a2 + b2\times{\mathbf{CM}})\times{\mathbf{PMF^2}} + loss0 + loss2\times{\mathbf{CM^2}} \end{equation*}
  1. 根据描述拟合的系数重新计算并(可选)绘制发动机图谱

    \begin{equation*} a, b, c, a2, b2, loss0, loss2 \end{equation*}

以下图示展示了计算的执行过程以及最重要的数据

              .----------------------------.                    .-----------------------------.
             /        Input-Model         /                    /    Output(Fitted)-Model     /
            /----------------------------/                    /-----------------------------/
           / +--engine                  /                    / +--engine                   /
          /  |  +--...                 /                    /  |  +--fc_map_coeffs        /
         /   +--params                /  ____________      /   +--measured_eng_points    /
        /    |  +--...               /  |            |    /    |    n   p  fc  bmep ... /
       /     +--measured_eng_points /==>| Calculator |==>/     |  ... ... ...  ...     /
      /          n    p    fc      /    |____________|  /      +--fitted_eng_points   /
     /          --  ----  ---     /                    /       |    n    p   fc      /
    /            0   0.0    0    /                    /        |  ...  ...  ...     /
   /           600  42.5   25   /                    /         +--mesh_eng_points  /
  /           ...    ...  ...  /                    /               n    p   fc   /
 /                            /                    /              ...  ...  ...  /
'----------------------------'                    '-----------------------------'

除了在/engine下各种发动机特性以及如capacityp_rated这样的表列之外,在/measured_eng_points下的表必须包含以下类别中至少一个的列(列标题不区分大小写)

  1. 发动机转速

    N        [1/min]
    N_norm   [-]        : where N_norm = (N – N_idle) / (N_rated-N_idle)
    CM       [m/sec]
  2. 负载-功率-能力

    P        [kW]
    P_norm   [-]        : where P_norm = P/P_MAX
    T        [Nm]
    BMEP     [bar]
  3. 燃油消耗

    FC       [g/h]
    FC_norm  [g/KWh]    : where FC_norm = FC[g/h] / P_MAX [kW]
    PMF      [bar]

上述的输入 & 拟合数据模型是由字符串和数字组成的树,通过

  • 序列、

  • 字典、

  • 类(pandas.DataFrame)、

  • 类(pandas.Series)组成的。

快速入门

该程序在Python-3.3+上运行,并要求安装numpy/scipy、pandas和win32库及其本机后端。

在Windows/OS X上,建议使用以下“科学”Python发行版,因为它们已经包含了本机库,并且可以在不需要管理员权限的情况下安装

假设您有一个有效的Python环境,打开一个命令提示符(在Windows中使用程序cmd.exe,但确保程序python.exe在其环境变量PATH中)并尝试以下控制台命令

安装::
$ pip install fuefit
$ fuefit --winmenus                         ## Adds StartMenu-items, Windows only.

参见:doc(安装)

命令行::
$ fuefit --version
0.0.6

$ fuefit --help
...

## Change-directory into the `fuefit/test/` folder in the  *sources*.
$ fuefit -I FuelFit_real.csv header+=0 \
    -I ./FuelFit.xlsx sheetname+=0 header@=None names:='["p","n","fc"]' \
    -I ./engine.csv file_frmt=SERIES model_path=/engine header@=None \
    -m /engine/fuel=petrol \
    -m /params/plot_maps@=True \
    -O full_results_model.json \
    -O fit_coeffs.csv model_path=/engine/fc_map_coeffs   index?=false \
    -O t1.csv model_path=/measured_eng_points   index?=false \
    -O t2.csv model_path=/mesh_eng_points       index?=false \

参见:命令行使用

Excel::
$ fuefit --excelrun                                             ## Windows & OS X only

参见:Excel使用

Python代码::

代码块

>>> import pandas as pd
>>> from fuefit import datamodel, processor, test

>>> inp_model = datamodel.base_model()
>>> inp_model.update({...})                                     ## See "Python Usage" below.        # doctest: +SKIP
>>> inp_model['engine_points'] = pd.read_csv('measured.csv')    ## Pandas can read Excel, matlab, ... # doctest: +SKIP
>>> datamodel.set_jsonpointer(inp_model, '/params/plot_maps', True)

>>> datamodel.validade_model(inp_model, additional_properties=False)            # doctest: +SKIP

>>> out_model = processor.run(inp_model)                                        # doctest: +SKIP

>>> print(datamodel.resolve_jsonpointer(out_model, '/engine/fc_map_coeffs'))    # doctest: +SKIP
a            164.110667
b           7051.867419
c          63015.519469
a2             0.121139
b2          -493.301306
loss0      -1637.894603
loss2   -1047463.140758
dtype: float64

参见:Python使用

安装

Fuefit-x.x.x在Python-3.3+上运行,并以Wheel的形式分发。

在安装之前,请确保没有遗留任何旧版本。因此,运行以下控制台命令(在Windows中使用程序(cmd.exe))直到找不到任何已安装的项目

$ pip uninstall fuefit                                      ## Use `pip3` if both python-2 & 3 are in PATH.

您可以直接从PyPi仓库以“标准”方式安装该项目,通过在控制台中键入命令(pip)。

$ pip install fuefit
  • 如果您想安装预发布版本(版本字符串不是纯数字,而是以alpha、beta.2或其他结尾),请使用附加选项(--pre)。

  • 如果您想升级现有安装以及所有依赖项,请添加选项(--upgrade)(或等价的选项(-U)),但此时构建可能需要相当长的时间才能完成。此外,升级后的库可能会破坏现有的程序(!)因此请谨慎使用,或从virtualenv(隔离的Python环境)中运行。

  • 要安装旧版本,请发出控制台命令

    $ pip install fuefit=1.1.1                    ## Use `--pre` if version-string has a build-suffix.
  • 要为不同的Python环境安装它,请使用每个环境适当的程序(python.exe)解释器重复此过程。

安装成功后,您需要检查在您的环境变量(PATH)中可见的版本,所以请输入以下控制台命令

$ fuefit --version
0.0.6

从源代码安装(适用于熟悉git的高级用户)

如果您下载了源代码,您有更多的安装选项。有各种方法获取它们

  • github下载并解压一个发布快照。

  • PyPi 仓库下载并解压一个sdist 分发。

  • github上克隆git-repository。假设您已经安装了一个git的工作安装,您可以使用以下一系列命令获取并安装项目的最新版本

    $ git clone "https://github.com/ankostis/fuefit.git" fuefit.git
    $ cd fuefit.git
    $ python setup.py install                                 ## Use `python3` if both python-2 & 3 installed.

在使用源代码时,您需要安装所有项目依赖的库。特别是对于最新的WinPython环境(Windows / OS X),您可以使用以下命令安装必要的依赖项

$ pip install -r requirements/execution.txt .

前面的命令安装了项目的一个“快照”,它是从源代码中找到的。如果您希望将项目的源代码链接到您的Python环境中,请以开发模式安装项目

$ python setup.py develop

Anaconda安装

Anaconda(即OS X)的安装与前面描述的pip过程没有区别。

要将其安装在miniconda环境中,您需要首先安装项目的本地依赖项(numpy/scipy),因此您需要下载源代码(见上文)。然后在其中打开一个bash-shell并输入以下命令

$ coda install `cat requirements/miniconda.txt`
$ pip install lmfit             ## Workaround lmfit-py#149
$ python setup.py install
$ fuefit --version
0.0.6

用法

Excel用法

WindowsOS X中,您可以使用xlwings库使用Excel文件为程序提供输入和输出。

要创建当前目录中的必要模板文件,请输入以下控制台命令

$ fuefit --excel

如果您想指定不同的目标路径,请输入fuefit --excel {file_path}

windows/OS X中,您可以输入fuefit --excelrun,文件将在您的home目录中创建,并且Excel将立即打开它们。

上述命令所做的操作是创建两个文件

文件(FuefitExcelRunner{#}.xlsm)

一个Python启用型的Excel文件,其中写入输入和输出数据,如截图所示

第一次打开它后,启用工作簿上的宏,选择左侧的Python代码并单击Run Selection as Pyhon按钮;应该为每辆车创建一个工作表。

该Excel文件包含适当的VBA模块,允许您通过单击按钮调用Python代码,这些代码在选定的单元格中,以及使用在下面的Python脚本中声明的Python函数,使用命名空间。

要添加更多输入列,您需要将所需模型项的json-pointers路径设置为列标题(见下面的python-usage)。

文件(FuefitExcelRunner{#}.py)

上述xls文件用于运行一系列实验的Python函数。

特定函数从输入表中读取多个具有不同车辆特性和/或实验系数的车辆,然后它添加一个包含每个车辆循环运行的新工作表。当然,您可以进一步编辑它以满足您的需求。

关于从Excel单元格中提取Python代码的一些一般性说明

  • Excel .利用了一个详尽的语法,用于从Python代码中引用Excel 单元格,并将它们作为class(pandas.DataFrame)读取。请参阅func(~fuefit.excel.FuefitExcelRunner.resolve_excel_ref)中的语法。

  • 每次调用时,预定义的VBA模块pandalon都会在Excel文件所在的同一文件夹中执行一个动态生成的Python脚本文件,其中还包括导入“姐妹”Python脚本文件。您可以阅读并修改姐妹Python脚本以导入库,如‘numpy’和‘pandas’,或预先定义实用Python函数。

  • 姐妹Python脚本的名字是从Excel文件的名字自动计算的,并且它必须是一个有效的Python模块名字。因此:*不要在Excel文件中使用非字母数字字符,如空格(`),连字符(-)和点(`.`)。*如果您重命名了Excel文件,也要重命名Python文件,或者添加这个Python import <old_py_file> as mypy`

  • 发生错误时,将在Excel文件所在的同一文件夹中写入一个日志文件,直到消息框可见,然后您点击‘ok’后它会自动删除!

  • 阅读http://docs.xlwings.org/quickstart.html

命令行使用

示例命令

fuefit -v\
  -I fuefit/test/FuelFit.xlsx sheetname+=0 header@=None names:='["p","rpm","fc"]' \
  -I fuefit/test/engine.csv file_frmt=SERIES model_path=/engine header@=None \
  -m /engine/fuel=petrol \
  -O ~t2.csv model_path=/fitted_eng_points    index?=false \
  -O ~t2.csv model_path=/mesh_eng_points      index?=false \
  -O ~t.csv model_path= -m /params/plot_maps@=True

Python使用

与项目交互最强大的方式是通过Python REPL(读取-评估-打印循环)。因此,启动一个命令(python)或命令(ipython) shell,并首先尝试导入项目以检查其版本

代码块

>>> import fuefit

>>> fuefit.__version__                ## Check version once more.
'0.0.6'

>>> fuefit.__file__                   ## To check where it was installed.         # doctest: +SKIP
/usr/local/lib/site-package/fuefit-...

如果版本与预期一致,请使用base-model并使用您的引擎数据(字符串和数字)扩展它

>>> from fuefit import datamodel, processor

>>> inp_model = datamodel.base_model()
>>> inp_model.update({
...     "engine": {
...         "fuel":     "diesel",
...         "p_max":    95,
...         "n_idle":   850,
...         "n_rated":  6500,
...         "stroke":   94.2,
...         "capacity": 2000,
...         "bore":     None,       ##You do not have to include these,
...         "cylinders": None,      ##  they are just for displaying some more engine properties.
...     }
... })

>>> import pandas as pd
>>> df = pd.read_excel('fuefit/test/FuelFit.xlsx', 0, header=None, names=["n","p","fc"])
>>> inp_model['measured_eng_points'] = df

有关接受的模式数据的信息,请检查其func(~fuefit.datamodel.model_schema)中的JSON模式,以及func(~fuefit.datamodel.base_model)

然后您必须对它进行验证

>>> datamodel.validate_model(inp_model, additional_properties=False)

如果验证成功,然后您可以将这个模型树馈送到mod(fuefit.processor),以获取结果

>>> out_model = processor.run(inp_model)

>>> print(datamodel.resolve_jsonpointer(out_model, '/engine/fc_map_coeffs'))
a            164.110667
b           7051.867419
c          63015.519469
a2             0.121139
b2          -493.301306
loss0      -1637.894603
loss2   -1047463.140758
dtype: float64

>>> print(out_model['fitted_eng_points'].shape)
(262, 11)

拟合参数化

可以通过设置/修改/params/fitting/下的各种输入模型属性来通过‘lmfit’拟合库进行参数化。

特别是在/params/fitting/coeffs/下,您可以设置一个字典,其中包含系数名称 –> class(lmfit.parameters.Parameter),如min/max/value,如由lmfit库定义(检查func(fuefit.datamodel.base_model())下的默认属性和在ExcelRunner中的示例列)。

info:

http://lmfit.github.io/lmfit-py/parameters.html#Parameters

贡献

该项目托管在github。要提供有关错误和问题的反馈或有关增强功能和请求的问题,请使用github的Issue-tracker

源代码和依赖项

要参与开发,您需要一个POSIX环境来完全构建它(LinuxOSX或Windows上的Cygwin)。

开发团队

  • 科斯蒂斯·安纳格诺普洛斯(软件设计与实现)

  • 乔治奥斯·丰塔拉斯(方法起始、工程支持与验证)

贡献者

  • 斯蒂法诺斯·齐阿克马基斯

  • 比亚乔·丘福

  • 亚历山德罗·马拉塔

作者感谢SGS小组的专家提供有用的反馈。

索引

CM
    `Mean Piston Speed <https://en.wikipedia.org/wiki/Mean_piston_speed>`_,
    a measure for the engines operating speed [m/sec]

BMEP
    `Brake Mean Effective Pressure <https://en.wikipedia.org/wiki/Mean_effective_pressure>`_,
    a valuable measure of an engine's capacity to do work that is independent of engine displacement) [bar]

PMF
    *Available Mean Effective Pressure*, the maximum mean effective pressure calculated based on
    the energy content of the fuel [bar]

JSON-schema
    The `JSON schema <https://json-schema.fullstack.org.cn/>`_ is an `IETF draft <http://tools.ietf.org/html/draft-zyp-json-schema-03>`_
    that provides a *contract* for what JSON-data is required for a given application and how to interact
    with it.  JSON Schema is intended to define validation, documentation, hyperlink navigation, and
    interaction control of JSON data.
    You can learn more about it from this `excellent guide <http://spacetelescope.github.io/understanding-json-schema/>`_,
    and experiment with this `on-line validator <http://www.jsonschema.net/>`_.

JSON-pointer
    JSON Pointer(rfc(``6901``)) defines a string syntax for identifying a specific value within
    a JavaScript Object Notation (JSON) document. It aims to serve the same purpose as *XPath* from the XML world,
    but it is much simpler.

项目详情


下载文件

下载适合您平台的文件。如果您不确定该选择哪个,请了解更多关于安装包的信息。

源分发

fuefit-0.0.6.tar.gz (1.2 MB 查看哈希值

上传时间:

构建分发

fuefit-0.0.6-py2.py3-none-any.whl (325.3 kB 查看哈希值

上传时间: Python 2 Python 3

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面