Skip to main content

Python API for processing TwinCAT Scope data files

Project description

pytcs: a TwinCAT Scope text export file reader

A Python package for reading exported TwinCAT Scope Files.
Export your TwinCAT Scope .svdx files to .txt/.csv and read them into Python.

quickstart

Open a file and create a pandas.DataFrame:

from pytcs import ScopeFile

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

user guide

installation

Install using pip/uv or conda/mamba:

pip install pytcs
conda install pytcs

loading data

To get started, open a file using 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]

You can see the list of channels contained in the file together with the sample time and the unit. When creating a ScopeFile instance only the metadata about the channels is read from the file header. The actual channel data is not loaded, indicated by the * in front of the channels.

You can load all or only a list of channels by using 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]

accessing individual channels

Individual channels can be accessed by their name:

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 backends

The default implementation of pytcs uses polars.read_csv for parsing CSV files. The polars backend is the new default since v0.2.0 and aims to provide support for the various formatting options provided by the TwinCAT Scope export tool with good file reading performance.

In case of compatibility issues, the old default pandas backend can be used calling ScopeFile.load(..., backend="pandas"). The pandas backend will be deprecated in a future release.

exporting to pandas and xarray

To work with the data, convert them to a pandas or xarray object. Channels will automatically be loaded form the file when exporting to other formats. You can select individual channels to export.

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]

Exporting to an xarray.Dataset will preserve the metadata as attributes.

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

dtype support

By default, all data will be read as np.float64. When importing data with ScopeFile.load using the option native_dtypes=True, imported data will be converted to their native dtypes.

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

export options support

The following table lists the compatible ✅ and currently uncompatible ❌ options of the ScopeExporter:

file and value formats
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

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pytcs-0.2.1.tar.gz (24.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pytcs-0.2.1-py3-none-any.whl (15.6 kB view details)

Uploaded Python 3

File details

Details for the file pytcs-0.2.1.tar.gz.

File metadata

  • Download URL: pytcs-0.2.1.tar.gz
  • Upload date:
  • Size: 24.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pytcs-0.2.1.tar.gz
Algorithm Hash digest
SHA256 707472bf87e1b64a1e71ee8c95faf677288f5aa2d9ed7084ec5ce67b1f1164de
MD5 6615ebd2878c044bdd16cb8907701031
BLAKE2b-256 82c14b1f25e1f17bd47f9d4fe03333dad17b1ea0c2edc01ebc5fed036655edee

See more details on using hashes here.

Provenance

The following attestation bundles were made for pytcs-0.2.1.tar.gz:

Publisher: build.yml on CagtayFabry/pytcs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pytcs-0.2.1-py3-none-any.whl.

File metadata

  • Download URL: pytcs-0.2.1-py3-none-any.whl
  • Upload date:
  • Size: 15.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pytcs-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 4a8ade36a0840f91cc8790333936c29af3967142602ca6ed57b49d263ac53f65
MD5 cb531468d88b2df7226db4816eca8ef4
BLAKE2b-256 015f576e6d28c387f6e5325c914a833f88a954009c41cc7866367577d229c987

See more details on using hashes here.

Provenance

The following attestation bundles were made for pytcs-0.2.1-py3-none-any.whl:

Publisher: build.yml on CagtayFabry/pytcs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page