处理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
用户指南
安装
使用pip
或conda/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 | ✅ |
项目详情
下载文件
下载您平台上的文件。如果您不确定选择哪一个,请了解更多关于 安装包 的信息。