跳转到主要内容

处理TwinCAT Scope数据文件的Python API

项目描述

pytcs

一个用于读取导出TwinCAT Scope文件的Python包。
将TwinCAT Scope文件.svdx导出为.csv格式,并将其导入Python。

快速入门

打开文件并创建一个pandas.DataFrame

from pytcs import ScopeFile

sf = ScopeFile("example.csv")  # open file and read metadata
df = sf.as_pandas()  # convert to pandas DataFrame

用户指南

安装

使用pipconda/mamba进行安装

pip install pytcs
conda install pytcs

加载数据

要开始,请使用pytcs.ScopeFile打开文件

from pytcs import ScopeFile

sf = ScopeFile("example.csv")
sf
# > <TwinCAT Scope File at 0x2a157ca9310>
# > name:    example
# > runtime: 0:00:00.999000
# > start:   2022-05-02T13:56:24.376000+00:00
# >
# > Channels:
# >   *var_REAL64: 1.0 ms [None]
# >   *var_UINT64: 1.0 ms [None]
# >   *var_UINT32: 1.0 ms [None]
# >   *var_UINT16: 1.0 ms [None]
# >   *func_units_scaled: 1.0 ms [dV]

您可以看到文件中包含的通道列表,以及样本时间和单位。在创建ScopeFile实例时,只从文件头读取关于通道的元数据。实际的通道数据不会加载,由通道前的*表示。

您可以使用ScopeFile.load()加载所有或仅加载通道列表

sf.load()
sf
# > <TwinCAT Scope File at 0x2a157ca9310>
# > name:    example
# > runtime: 0:00:00.999000
# > start:   2022-05-02T13:56:24.376000+00:00
# >
# > Channels:
# >   var_REAL64: 1.0 ms [None]
# >   var_UINT64: 1.0 ms [None]
# >   var_UINT32: 1.0 ms [None]
# >   var_UINT16: 1.0 ms [None]
# >   func_units_scaled: 1.0 ms [dV]

访问单个通道

可以通过名称访问单个通道

sf["func_units_scaled"]
# > ScopeChannel(name='func_units_scaled',
# >   time=array([  0.,   1.,   2., ..., 997., 998., 999.]),
# >   values=array([   10.,     0.,   -10., ..., -9960., -9970., -9980.]),
# >   sample_time=1.0, time_offset=0.0, units='dV')

CSV后端

pytcs的默认实现使用pandas.read_csv解析CSV文件。Pandas旨在为TwinCAT Scope导出工具提供的各种格式选项提供最灵活的支持。

为了提高大文件的性能,可以将 datatable 设置为 CSV 后端的替代方案。可以使用 ScopeFile.read(..., backend="datatable") 选择 datatable。然而,由于其可能导致某些 CSV 格式出现已知问题,因此应将其视为 实验性。如果想要使用 datatable 后端,建议对目标格式进行详细测试(或更改目标格式)。

导出到 pandas 和 xarray

为了处理数据,将它们转换为 pandas 或 xarray 对象。在导出到其他格式时,通道将自动从文件中加载。可以选择导出单个通道。

sf.as_pandas(channels=["var_REAL64", "var_UINT16"])
# >                          var_REAL64  var_UINT16
# > time
# > 2022-05-02 13:56:24.376         0.0         0.0
# > 2022-05-02 13:56:24.377         1.0         1.0
# > 2022-05-02 13:56:24.378         2.0         2.0
# > 2022-05-02 13:56:24.379         3.0         3.0
# > 2022-05-02 13:56:24.380         4.0         4.0
# > ...                             ...         ...
# > 2022-05-02 13:56:25.371       995.0       995.0
# > 2022-05-02 13:56:25.372       996.0       996.0
# > 2022-05-02 13:56:25.373       997.0       997.0
# > 2022-05-02 13:56:25.374       998.0       998.0
# > 2022-05-02 13:56:25.375       999.0       999.0
# >
# > [1000 rows x 2 columns]

导出到 xarray.Dataset 将保留元数据作为属性。

sf.as_xarray(channels=["var_REAL64", "var_UINT16"])
# > <xarray.Dataset>
# > Dimensions:     (time: 1000)
# > Coordinates:
# >   * time        (time) datetime64[ns] 2022-05-02T13:56:24.376000 ... 2022-05-...
# > Data variables:
# >     var_REAL64  (time) float64 0.0 1.0 2.0 3.0 4.0 ... 996.0 997.0 998.0 999.0
# >     var_UINT16  (time) float64 0.0 1.0 2.0 3.0 4.0 ... 996.0 997.0 998.0 999.0
# > Attributes:
# >     ScopeName:   tc3_scope_3_4_3145_3
# >     File:        C:\Python\weldx-dev\pytcs\tests\data\tc3_scope_3_4_3145_3-Co...
# >     StartTime:   132959733843760000
# >     EndTime:     132959733853750000
# >     start_time:  2022-05-02T13:56:24.376000+00:00
# >     run_time:    0:00:00.999000

数据类型支持

默认情况下,所有数据都将被读取为 np.float64。当使用 ScopeFile.load 导入数据并使用选项 native_dtypes=True 时,导入的数据将转换为它们的原生数据类型。

TwinCAT Scope numpy IEC61131-3
BIT np.bool_ BOOL
INT8 np.int8 SINT
INT16 np.int16 INT
INT32 np.int32 DINT
INT64 np.int64 LINT
UINT8 np.uint8 USINT
UINT16 np.uint16 UINT
UINT32 np.uint32 UDINT
UINT64 np.uint64 ULINT
REAL32 np.float32 REAL
REAL64 np.float64 LREAL

导出选项支持

以下表格列出了 ScopeExporter 的兼容 ✅ 和当前不兼容 ❌ 选项

文件和值格式
ScaleValues
true
false
DecimalMark
.
,
Seperator
Tab
Blank (space)
Colon
Semicolon
Comma
ExcludeDoubleTimestamp
true
false
SortChannels
true
false
FullTimeStamp
true
false
AdditionalEmptyLine
true
false
ContainEOF
true
false
HeaderKonfiguration
Full Header
ArraySeperator
Tab
AdditionalArraySeperator
true
false
IncludeTriggerInfos
true
false
IncludeMarkerTables
None
MarkerTableOnlyIncludedChannels
true
false
MarkerTableOnlyIncludedMarker
true
false

项目详情


下载文件

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

源分布

pytcs-0.1.3.tar.gz (22.1 kB 查看哈希)

上传时间

构建分布

pytcs-0.1.3-py3-none-any.whl (16.1 kB 查看哈希)

上传时间 Python 3

由以下机构支持