0% found this document useful (0 votes)
26 views39 pages

Py Joulescope Record

Uploaded by

fomin.p
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
26 views39 pages

Py Joulescope Record

Uploaded by

fomin.p
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 39

{

"cells": [
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"ename": "AttributeError",
"evalue": "module 'joulescope' has no attribute 'JlsReader'",
"output_type": "error",
"traceback": [
"\
u001b[1;31m------------------------------------------------------------------------
---\u001b[0m",
"\u001b[1;31mAttributeError\u001b[0m Traceback
(most recent call last)",
"Cell \u001b[1;32mIn[6], line 13\u001b[0m\n\u001b[0;32m 11\u001b[0m \
u001b[38;5;66;03m# Путь к вашему файлу .jls\u001b[39;00m\n\u001b[0;32m 12\
u001b[0m filePath \u001b[38;5;241m=\u001b[39m \u001b[38;5;124m'\u001b[39m\
u001b[38;5;124mC:/Users/fomin.p/Desktop/MRF_1_24.jls\u001b[39m\u001b[38;5;124m'\
u001b[39m \u001b[38;5;66;03m# 'path_to_your_file.jls'\u001b[39;00m\n\u001b[1;32m---
> 13\u001b[0m \u001b[43mreadJlsFile\u001b[49m\u001b[43m(\u001b[49m\
u001b[43mfilePath\u001b[49m\u001b[43m)\u001b[49m\n",
"Cell \u001b[1;32mIn[6], line 6\u001b[0m, in \u001b[0;36mreadJlsFile\
u001b[1;34m(filePath)\u001b[0m\n\u001b[0;32m 4\u001b[0m \u001b[38;5;28;01mdef\
u001b[39;00m \u001b[38;5;21mreadJlsFile\u001b[39m(filePath):\n\u001b[0;32m 5\
u001b[0m \u001b[38;5;66;03m# open the JLS file\u001b[39;00m\n\u001b[1;32m---->
6\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m \u001b[43mjoulescope\u001b[49m\
u001b[38;5;241;43m.\u001b[39;49m\u001b[43mJlsReader\u001b[49m(filePath) \
u001b[38;5;28;01mas\u001b[39;00m jls:\n\u001b[0;32m 7\u001b[0m \
u001b[38;5;66;03m# Retrieve information about the available signals (e.g., current,
voltage)\u001b[39;00m\n\u001b[0;32m 8\u001b[0m signals \
u001b[38;5;241m=\u001b[39m jls\u001b[38;5;241m.\u001b[39msignals\n\u001b[0;32m
9\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124m\"\u001b[39m\
u001b[38;5;124mAvailable signals:\u001b[39m\u001b[38;5;124m\"\u001b[39m, signals)\
n",
"\u001b[1;31mAttributeError\u001b[0m: module 'joulescope' has no attribute
'JlsReader'"
]
}
],
"source": [
"import numpy as np\n",
"import joulescope\n",
"\n",
"s = joulescope\n",
"def readJlsFile(filePath):\n",
" # open the JLS file\n",
" with joulescope.JlsReader(filePath) as jls:\n",
" # Retrieve information about the available signals (e.g., current,
voltage)\n",
" signals = jls.signals\n",
" print(\"Available signals:\", signals)\n",
"\n",
"# Путь к вашему файлу .jls\n",
"filePath = 'C:/Users/fomin.p/Desktop/MRF_1_24.jls' # 'path_to_your_file.jls'\
n",
"readJlsFile(filePath)\n"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [
{
"ename": "ImportError",
"evalue": "cannot import name 'Reader' from 'joulescope' (c:\\Users\\fomin.p\\
AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\joulescope\\
__init__.py)",
"output_type": "error",
"traceback": [
"\
u001b[1;31m------------------------------------------------------------------------
---\u001b[0m",
"\u001b[1;31mImportError\u001b[0m Traceback
(most recent call last)",
"Cell \u001b[1;32mIn[22], line 1\u001b[0m\n\u001b[1;32m----> 1\u001b[0m \
u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mjoulescope\u001b[39;00m \
u001b[38;5;28;01mimport\u001b[39;00m Reader\n\u001b[0;32m 2\u001b[0m \
u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mjoulescope\u001b[39;00m\
u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mdata_recorder\u001b[39;00m\n\
u001b[0;32m 4\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m Reader(\
u001b[38;5;124m'\u001b[39m\u001b[38;5;124mC:/Users/fomin.p/Desktop/MRF_1_24.jls\
u001b[39m\u001b[38;5;124m'\u001b[39m) \u001b[38;5;28;01mas\u001b[39;00m reader:\n",
"\u001b[1;31mImportError\u001b[0m: cannot import name 'Reader' from
'joulescope' (c:\\Users\\fomin.p\\AppData\\Local\\Programs\\Python\\Python312\\
Lib\\site-packages\\joulescope\\__init__.py)"
]
}
],
"source": [
"from joulescope import Reader\n",
"\n",
"with Reader('C:/Users/fomin.p/Desktop/MRF_1_24.jls') as reader:\n",
" for signals, data in reader.samples():\n",
" print(signals, data)\n",
" "
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"['Calibration', 'DATA_RECORDER_FORMAT_VERSION', 'DataReader',
'DataRecorder', 'I_RANGE_MISSING', 'NP_STATS_NAMES', 'REDUCTIONS_PER_TLV',
'RawProcessor', 'SAMPLES_PER_REDUCTION', 'STATS_FIELD_NAMES',
'SUPPRESS_SAMPLES_MAX', 'Statistics', 'TLVS_PER_BLOCK', '_DOWNSAMPLE_FORMATTERS',
'_DOWNSAMPLE_UNFORMATTERS', '_SIGNALS_UNITS', '_STATS_VALUES_V1', '__builtins__',
'__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__',
'__spec__', 'array_storage', 'construct_record_filename', 'datafile', 'datetime',
'json', 'log', 'logging', 'np', 'reduction_downsample', 'stats_array_clear',
'stats_array_factory', 'stats_array_invalidate', 'stats_compute', 'stats_factory',
'stats_invalidate', 'stats_to_api']\n"
]
},
{
"ename": "TypeError",
"evalue": "DataReader.__init__() takes 1 positional argument but 2 were
given",
"output_type": "error",
"traceback": [
"\
u001b[1;31m------------------------------------------------------------------------
---\u001b[0m",
"\u001b[1;31mTypeError\u001b[0m Traceback
(most recent call last)",
"Cell \u001b[1;32mIn[2], line 6\u001b[0m\n\u001b[0;32m 2\u001b[0m \
u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mjoulescope\u001b[39;00m\
u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mdata_recorder\u001b[39;00m\n\
u001b[0;32m 4\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;28mdir\
u001b[39m(joulescope\u001b[38;5;241m.\u001b[39mdata_recorder))\n\u001b[1;32m---->
6\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m \u001b[43mjoulescope\u001b[49m\
u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdata_recorder\u001b[49m\
u001b[38;5;241;43m.\u001b[39;49m\u001b[43mDataReader\u001b[49m\u001b[43m(\
u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mC:/Users/fomin.p/
Desktop/MRF_1_24.jls\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m)\
u001b[49m \u001b[38;5;28;01mas\u001b[39;00m reader:\n\u001b[0;32m 7\u001b[0m
\u001b[38;5;28;01mfor\u001b[39;00m signals, data \u001b[38;5;129;01min\u001b[39;00m
reader\u001b[38;5;241m.\u001b[39msamples():\n\u001b[0;32m 8\u001b[0m \
u001b[38;5;28mprint\u001b[39m(signals, data)\n",
"\u001b[1;31mTypeError\u001b[0m: DataReader.__init__() takes 1 positional
argument but 2 were given"
]
}
],
"source": [
"import joulescope\n",
"import joulescope.data_recorder\n",
"\n",
"print(dir(joulescope.data_recorder))\n",
"\n",
"with
joulescope.data_recorder.DataReader('C:/Users/fomin.p/Desktop/MRF_1_24.jls') as
reader:\n",
" for signals, data in reader.samples():\n",
" print(signals, data)"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {},
"outputs": [
{
"ename": "RuntimeError",
"evalue": "no devices found",
"output_type": "error",
"traceback": [
"\
u001b[1;31m------------------------------------------------------------------------
---\u001b[0m",
"\u001b[1;31mRuntimeError\u001b[0m Traceback
(most recent call last)",
"Cell \u001b[1;32mIn[25], line 3\u001b[0m\n\u001b[0;32m 1\u001b[0m \
u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mjoulescope\u001b[39;00m\n\
u001b[0;32m 2\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \
u001b[38;5;21;01mnumpy\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m \
u001b[38;5;21;01mnp\u001b[39;00m\n\u001b[1;32m----> 3\u001b[0m \
u001b[38;5;28;01mwith\u001b[39;00m \u001b[43mjoulescope\u001b[49m\
u001b[38;5;241;43m.\u001b[39;49m\u001b[43mscan_require_one\u001b[49m\u001b[43m(\
u001b[49m\u001b[43mconfig\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\
u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mauto\u001b[39;49m\
u001b[38;5;124;43m'\u001b[39;49m\u001b[43m)\u001b[49m \u001b[38;5;28;01mas\
u001b[39;00m js:\n\u001b[0;32m 4\u001b[0m data \u001b[38;5;241m=\u001b[39m
js\u001b[38;5;241m.\u001b[39mread(contiguous_duration\u001b[38;5;241m=\u001b[39m\
u001b[38;5;241m0.1\u001b[39m)\n\u001b[0;32m 5\u001b[0m current, voltage \
u001b[38;5;241m=\u001b[39m np\u001b[38;5;241m.\u001b[39mmean(data, axis\
u001b[38;5;241m=\u001b[39m\u001b[38;5;241m0\u001b[39m, dtype\u001b[38;5;241m=\
u001b[39mnp\u001b[38;5;241m.\u001b[39mfloat64)\n",
"File \u001b[1;32mc:\\Users\\fomin.p\\AppData\\Local\\Programs\\Python\\
Python312\\Lib\\site-packages\\joulescope\\v1\\driver.py:120\u001b[0m, in \
u001b[0;36mscan_require_one\u001b[1;34m(name, config)\u001b[0m\n\u001b[0;32m
118\u001b[0m devices \u001b[38;5;241m=\u001b[39m scan(name, config\
u001b[38;5;241m=\u001b[39mconfig)\n\u001b[0;32m 119\u001b[0m \
u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \
u001b[38;5;28mlen\u001b[39m(devices):\n\u001b[1;32m--> 120\u001b[0m \
u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mRuntimeError\u001b[39;00m(\
u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mno devices found\u001b[39m\
u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m 121\u001b[0m \u001b[38;5;28;01mif\
u001b[39;00m \u001b[38;5;28mlen\u001b[39m(devices) \u001b[38;5;241m>\u001b[39m \
u001b[38;5;241m1\u001b[39m:\n\u001b[0;32m 122\u001b[0m \
u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mRuntimeError\u001b[39;00m(\
u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mmultiple devices found\u001b[39m\
u001b[38;5;124m\"\u001b[39m)\n",
"\u001b[1;31mRuntimeError\u001b[0m: no devices found"
]
}
],
"source": [
"import joulescope\n",
"import numpy as np\n",
"with joulescope.scan_require_one(config='auto') as js:\n",
" data = js.read(contiguous_duration=0.1)\n",
"current, voltage = np.mean(data, axis=0, dtype=np.float64)\n",
"print(f'{current} A, {voltage} V')"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__',
'__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__',
'__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__',
'__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__',
'__str__', '__subclasshook__', '__weakref__', '_configure',
'_data_get_handler_float32_v2', '_data_get_handler_none', '_data_get_handler_raw',
'_downsampled', '_get_reduction_stats', '_raw', '_reduction_handler_v1',
'_reduction_handler_v2', '_reduction_tlv', '_sample_count', '_sample_tlv',
'_samples_get_handler_float32_v2', '_samples_get_handler_none',
'_samples_get_handler_raw', '_statistics_get',
'_statistics_get_handler_float32_v2', '_statistics_get_handler_none',
'_statistics_get_handler_raw', '_stats_update', '_validate_range', 'close',
'data_get', 'duration', 'get_reduction', 'input_sampling_frequency',
'normalize_time_arguments', 'open', 'output_sampling_frequency',
'reduction_frequency', 'sample_id_range', 'sample_id_to_time', 'samples_get',
'sampling_frequency', 'statistics_get', 'summary_string', 'time_to_sample_id',
'voltage_range']\n"
]
},
{
"ename": "TypeError",
"evalue": "DataReader.__init__() takes 1 positional argument but 2 were
given",
"output_type": "error",
"traceback": [
"\
u001b[1;31m------------------------------------------------------------------------
---\u001b[0m",
"\u001b[1;31mTypeError\u001b[0m Traceback
(most recent call last)",
"Cell \u001b[1;32mIn[9], line 5\u001b[0m\n\u001b[0;32m 2\u001b[0m \
u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mjoulescope\u001b[39;00m\
u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mdata_recorder\u001b[39;00m\n\
u001b[0;32m 4\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;28mdir\
u001b[39m(joulescope\u001b[38;5;241m.\u001b[39mdata_recorder\u001b[38;5;241m.\
u001b[39mDataReader))\n\u001b[1;32m----> 5\u001b[0m \u001b[38;5;28mprint\
u001b[39m(\u001b[43mjoulescope\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\
u001b[43mdata_recorder\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\
u001b[43mDataReader\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m'\
u001b[39;49m\u001b[38;5;124;43mC:/Users/fomin.p/Desktop/MRF_1_24.jls\u001b[39;49m\
u001b[38;5;124;43m'\u001b[39;49m\u001b[43m)\u001b[49m)\n",
"\u001b[1;31mTypeError\u001b[0m: DataReader.__init__() takes 1 positional
argument but 2 were given"
]
}
],
"source": [
"import joulescope\n",
"import joulescope.data_recorder\n",
"\n",
"print(dir(joulescope.data_recorder.DataReader))\n",
"print(joulescope.data_recorder.DataReader('C:/Users/fomin.p/Desktop/
MRF_1_24.jls'))\n"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [
{
"ename": "ModuleNotFoundError",
"evalue": "No module named 'joulescope.jls'",
"output_type": "error",
"traceback": [
"\
u001b[1;31m------------------------------------------------------------------------
---\u001b[0m",
"\u001b[1;31mModuleNotFoundError\u001b[0m Traceback
(most recent call last)",
"Cell \u001b[1;32mIn[20], line 2\u001b[0m\n\u001b[0;32m 1\u001b[0m \
u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mpyjoulescope_driver\
u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m \u001b[38;5;21;01mjld\u001b[39;00m\
n\u001b[1;32m----> 2\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \
u001b[38;5;21;01mjoulescope\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\
u001b[38;5;21;01mjls\u001b[39;00m\n\u001b[0;32m 4\u001b[0m m \
u001b[38;5;241m=\u001b[39m jld\u001b[38;5;241m.\u001b[39mField\n\u001b[0;32m
5\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;28mdir\u001b[39m(m))\n",
"\u001b[1;31mModuleNotFoundError\u001b[0m: No module named 'joulescope.jls'"
]
}
],
"source": [
"import pyjoulescope_driver as jld\n",
"import joulescope.jls\n",
"\n",
"m = jld.Field\n",
"print(dir(m))\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"ename": "ModuleNotFoundError",
"evalue": "No module named 'joulescope.jls_v2'",
"output_type": "error",
"traceback": [
"\
u001b[1;31m------------------------------------------------------------------------
---\u001b[0m",
"\u001b[1;31mModuleNotFoundError\u001b[0m Traceback
(most recent call last)",
"Cell \u001b[1;32mIn[16], line 1\u001b[0m\n\u001b[1;32m----> 1\u001b[0m \
u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mjoulescope\u001b[39;00m\
u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mjls_v2\u001b[39;00m \
u001b[38;5;28;01mimport\u001b[39;00m Reader \u001b[38;5;66;03m# Если файл версии
1, попробуйте `jls_v1`\u001b[39;00m\n\u001b[0;32m 3\u001b[0m \
u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mexport_to_csv\u001b[39m(jls_file,
csv_file):\n\u001b[0;32m 4\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m
Reader(jls_file) \u001b[38;5;28;01mas\u001b[39;00m reader:\n",
"\u001b[1;31mModuleNotFoundError\u001b[0m: No module named
'joulescope.jls_v2'"
]
}
],
"source": [
"from joulescope.jls_v2 import Reader # Если файл версии 1, попробуйте
`jls_v1`\n",
"\n",
"def export_to_csv(jls_file, csv_file):\n",
" with Reader(jls_file) as reader:\n",
" with open(csv_file, 'w') as f:\n",
" # Запись заголовков\n",
" f.write('time,current,voltage,power\\n')\n",
" for timestamp, data in reader.samples():\n",
" time = timestamp['sample_id'] / reader.sampling_frequency #
Получение времени\n",
" current = data[0] # Ток\n",
" voltage = data[1] # Напряжение\n",
" power = current * voltage # Мощность, если это нужно\n",
" f.write(f'{time},{current},{voltage},{power}\\n')\n",
"\n",
"export_to_csv('C:/Users/fomin.p/Desktop/MRF_1_24.jls', 'output.csv')\n"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [],
"source": [
"try:\n",
" from joulescope.jls import Reader as ReaderV1\n",
" version = 1\n",
"except ImportError:\n",
" ReaderV1 = None\n",
"\n",
"try:\n",
" from joulescope.jls_v2 import Reader as ReaderV2\n",
" version = 2\n",
"except ImportError:\n",
" ReaderV2 = None\n",
"\n",
"file_path = 'C:/Users/fomin.p/Desktop/MRF_1_24.jls'\n",
"\n",
"try:\n",
" if ReaderV1 is not None:\n",
" with ReaderV1(file_path) as reader:\n",
" print(\"Файл соответствует версии JLS1\")\n",
" version = 1\n",
" elif ReaderV2 is not None:\n",
" with ReaderV2(file_path) as reader:\n",
" print(\"Файл соответствует версии JLS2\")\n",
" version = 2\n",
"except OSError as e:\n",
" print(f\"Ошибка: {e}\")\n"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {},
"outputs": [
{
"ename": "ModuleNotFoundError",
"evalue": "No module named 'joulescope.jls_v2'",
"output_type": "error",
"traceback": [
"\
u001b[1;31m------------------------------------------------------------------------
---\u001b[0m",
"\u001b[1;31mModuleNotFoundError\u001b[0m Traceback
(most recent call last)",
"Cell \u001b[1;32mIn[24], line 17\u001b[0m\n\u001b[0;32m 14\u001b[0m
\u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mДанные
по току:\u001b[39m\u001b[38;5;124m\"\u001b[39m, data)\n\u001b[0;32m 16\u001b[0m
\u001b[38;5;66;03m# Используем функцию\u001b[39;00m\n\u001b[1;32m---> 17\u001b[0m \
u001b[43mread_jls_v2\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\
u001b[39;49m\u001b[38;5;124;43mC:/Users/fomin.p/Desktop/MRF_1_24.jls\u001b[39;49m\
u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m)\u001b[49m\n",
"Cell \u001b[1;32mIn[24], line 4\u001b[0m, in \u001b[0;36mread_jls_v2\
u001b[1;34m(file_path)\u001b[0m\n\u001b[0;32m 3\u001b[0m \
u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mread_jls_v2\u001b[39m(file_path):\
n\u001b[1;32m----> 4\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \
u001b[38;5;21;01mjoulescope\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\
u001b[38;5;21;01mjls_v2\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m
JlsReader \u001b[38;5;66;03m# Подключаем JlsReader для работы с JLS файлами версии
2\u001b[39;00m\n\u001b[0;32m 6\u001b[0m \u001b[38;5;28;01mwith\
u001b[39;00m JlsReader(file_path) \u001b[38;5;28;01mas\u001b[39;00m jls:\n\
u001b[0;32m 7\u001b[0m \u001b[38;5;28mprint\u001b[39m(\
u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mФайл содержит
\u001b[39m\u001b[38;5;132;01m{\u001b[39;00m\u001b[38;5;28mlen\u001b[39m(jls\
u001b[38;5;241m.\u001b[39msignals)\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m
сигналов.\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n",
"\u001b[1;31mModuleNotFoundError\u001b[0m: No module named
'joulescope.jls_v2'"
]
}
],
"source": [
"import joulescope\n",
"\n",
"def read_jls_v2(file_path):\n",
" from joulescope.jls_v2 import JlsReader # Подключаем JlsReader для работы
с JLS файлами версии 2\n",
"\n",
" with JlsReader(file_path) as jls:\n",
" print(f\"Файл содержит {len(jls.signals)} сигналов.\")\n",
" for signal in jls.signals:\n",
" print(f\"Сигнал: {signal['name']}\")\n",
"\n",
" # Пример чтения данных\n",
" current_signal = jls.signals[0] # Предположим, что первый сигнал -
ток\n",
" data = jls.data_get(0, current_signal['samples']['count'])\n",
" print(\"Данные по току:\", data)\n",
"\n",
"# Используем функцию\n",
"read_jls_v2(\"C:/Users/fomin.p/Desktop/MRF_1_24.jls\")\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"try:\n",
" from joulescope.jls_v2 import JlsReader\n",
"\n",
" def read_jls_v2(file_path):\n",
" with JlsReader(file_path) as jls:\n",
" print(f\"Файл содержит {len(jls.signals)} сигналов.\")\n",
" for signal in jls.signals.values():\n",
" print(f\"Сигнал: {signal['name']}, {signal['units']}\")\n",
" data = signal['data']\n",
" print(f\"Данные: {data}\")\n",
"\n",
" read_jls_v2(\"C:/Users/fomin.p/Desktop/MRF_1_24.jls\")\n",
"\n",
"except ModuleNotFoundError:\n",
" print(\"Не удалось найти модуль 'joulescope.jls_v2'. Убедитесь, что у вас
установлена актуальная версия библиотеки.\")\n"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Не удалось найти модуль 'joulescope.jls_v2'. Убедитесь, что у вас
установлена актуальная версия библиотеки.\n"
]
}
],
"source": [
"try:\n",
" from joulescope.jls_v2 import JlsReader\n",
"\n",
" def read_jls_v2(file_path):\n",
" with JlsReader(file_path) as jls:\n",
" print(f\"Файл содержит {len(jls.signals)} сигналов.\")\n",
" for signal in jls.signals.values():\n",
" print(f\"Сигнал: {signal['name']}, {signal['units']}\")\n",
" data = signal['data']\n",
" print(f\"Данные: {data}\")\n",
"\n",
" read_jls_v2(\"C:/Users/fomin.p/Desktop/LP_1_22.jls\")\n",
"\n",
"except ModuleNotFoundError:\n",
" print(\"Не удалось найти модуль 'joulescope.jls_v2'. Убедитесь, что у вас
установлена актуальная версия библиотеки.\")\n"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {},
"outputs": [
{
"ename": "OSError",
"evalue": "invalid file",
"output_type": "error",
"traceback": [
"\
u001b[1;31m------------------------------------------------------------------------
---\u001b[0m",
"\u001b[1;31mOSError\u001b[0m Traceback
(most recent call last)",
"Cell \u001b[1;32mIn[27], line 29\u001b[0m\n\u001b[0;32m 26\
u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124mf\u001b[39m\
u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mЭкспорт завершен. Данные сохранены в \
u001b[39m\u001b[38;5;132;01m{\u001b[39;00moutput_path\u001b[38;5;132;01m}\
u001b[39;00m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m 28\u001b[0m \
u001b[38;5;66;03m# Укажите путь к вашему .jls файлу и путь к CSV файлу для
экспорта\u001b[39;00m\n\u001b[1;32m---> 29\u001b[0m \u001b[43mexport_jls_to_csv\
u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\
u001b[38;5;124;43mC:/Users/fomin.p/Desktop/MRF_1_24.jls\u001b[39;49m\
u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\
u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43moutput.csv\u001b[39;49m\
u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m)\u001b[49m\n",
"Cell \u001b[1;32mIn[27], line 9\u001b[0m, in \u001b[0;36mexport_jls_to_csv\
u001b[1;34m(input_path, output_path)\u001b[0m\n\u001b[0;32m 6\u001b[0m \
u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mexport_jls_to_csv\
u001b[39m(input_path, output_path):\n\u001b[0;32m 7\u001b[0m \
u001b[38;5;66;03m# Открываем .jls файл\u001b[39;00m\n\u001b[0;32m 8\u001b[0m
\u001b[38;5;28;01mwith\u001b[39;00m \u001b[38;5;28mopen\u001b[39m(input_path, \
u001b[38;5;124m'\u001b[39m\u001b[38;5;124mrb\u001b[39m\u001b[38;5;124m'\
u001b[39m) \u001b[38;5;28;01mas\u001b[39;00m f:\n\u001b[1;32m----> 9\u001b[0m
reader \u001b[38;5;241m=\u001b[39m \u001b[43mdatafile\u001b[49m\
u001b[38;5;241;43m.\u001b[39;49m\u001b[43mDataFileReader\u001b[49m\u001b[43m(\
u001b[49m\u001b[43mf\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 11\u001b[0m
\u001b[38;5;66;03m# Получаем информацию о сигналах\u001b[39;00m\n\u001b[0;32m
12\u001b[0m signals \u001b[38;5;241m=\u001b[39m reader\u001b[38;5;241m.\
u001b[39msignals\n",
"File \u001b[1;32mc:\\Users\\fomin.p\\AppData\\Local\\Programs\\Python\\
Python312\\Lib\\site-packages\\joulescope\\datafile.py:511\u001b[0m, in \
u001b[0;36mDataFileReader.__init__\u001b[1;34m(self, filehandle)\u001b[0m\n\
u001b[0;32m 509\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mlen\
u001b[39m(header) \u001b[38;5;241m!=\u001b[39m HEADER_SIZE:\n\u001b[0;32m 510\
u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mIOError\
u001b[39;00m(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mfile too small\u001b[39m\
u001b[38;5;124m'\u001b[39m)\n\u001b[1;32m--> 511\u001b[0m \u001b[38;5;28mself\
u001b[39m\u001b[38;5;241m.\u001b[39mlength, \u001b[38;5;28mself\u001b[39m\
u001b[38;5;241m.\u001b[39mversion \u001b[38;5;241m=\u001b[39m \
u001b[43mvalidate_file_header\u001b[49m\u001b[43m(\u001b[49m\u001b[43mheader\
u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 512\u001b[0m pos1 \
u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\
u001b[39m_fh\u001b[38;5;241m.\u001b[39mtell()\n\u001b[0;32m 513\u001b[0m \
u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_fh\u001b[38;5;241m.\
u001b[39mseek(\u001b[38;5;241m0\u001b[39m, \u001b[38;5;241m2\u001b[39m)\n",
"File \u001b[1;32mc:\\Users\\fomin.p\\AppData\\Local\\Programs\\Python\\
Python312\\Lib\\site-packages\\joulescope\\datafile.py:472\u001b[0m, in \
u001b[0;36mvalidate_file_header\u001b[1;34m(data)\u001b[0m\n\u001b[0;32m 470\
u001b[0m header \u001b[38;5;241m=\u001b[39m data[:HEADER_SIZE]\n\u001b[0;32m
471\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m MAGIC \u001b[38;5;241m!=\u001b[39m
header[:\u001b[38;5;241m16\u001b[39m]:\n\u001b[1;32m--> 472\u001b[0m \
u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mIOError\u001b[39;00m(\
u001b[38;5;124m'\u001b[39m\u001b[38;5;124minvalid file\u001b[39m\u001b[38;5;124m'\
u001b[39m)\n\u001b[0;32m 473\u001b[0m length, version, crc_read \
u001b[38;5;241m=\u001b[39m struct\u001b[38;5;241m.\u001b[39munpack(\
u001b[38;5;124m'\u001b[39m\u001b[38;5;124m<QxxxBI\u001b[39m\u001b[38;5;124m'\
u001b[39m, header[\u001b[38;5;241m16\u001b[39m:])\n\u001b[0;32m 474\u001b[0m
crc_compute \u001b[38;5;241m=\u001b[39m binascii\u001b[38;5;241m.\
u001b[39mcrc32(header[:(HEADER_SIZE \u001b[38;5;241m-\u001b[39m \u001b[38;5;241m4\
u001b[39m)])\n",
"\u001b[1;31mOSError\u001b[0m: invalid file"
]
}
],
"source": [
"import joulescope\n",
"\n",
"# Подключаем класс Reader из joulescope\n",
"from joulescope import datafile\n",
"\n",
"def export_jls_to_csv(input_path, output_path):\n",
" # Открываем .jls файл\n",
" with open(input_path, 'rb') as f:\n",
" reader = datafile.DataFileReader(f)\n",
" \n",
" # Получаем информацию о сигналах\n",
" signals = reader.signals\n",
" print(f\"Найдено {len(signals)} сигналов\")\n",
"\n",
" # Открываем файл CSV для записи\n",
" with open(output_path, 'w') as csv_file:\n",
" # Пишем заголовки\n",
" header = \"time,\" + \",\".join([s[\"name\"] for s in signals])
+ \"\\n\"\n",
" csv_file.write(header)\n",
" \n",
" # Проходим по каждому сигналу\n",
" for record in reader.records():\n",
" row = f\"{record['time']:.6f},\" + \",\".join([str(v) for v in
record[\"value\"]]) + \"\\n\"\n",
" csv_file.write(row)\n",
" \n",
" print(f\"Экспорт завершен. Данные сохранены в {output_path}\")\n",
"\n",
"# Укажите путь к вашему .jls файлу и путь к CSV файлу для экспорта\n",
"export_jls_to_csv(\"C:/Users/fomin.p/Desktop/MRF_1_24.jls\", \"output.csv\")\
n"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {},
"outputs": [
{
"ename": "OSError",
"evalue": "invalid file",
"output_type": "error",
"traceback": [
"\
u001b[1;31m------------------------------------------------------------------------
---\u001b[0m",
"\u001b[1;31mOSError\u001b[0m Traceback
(most recent call last)",
"Cell \u001b[1;32mIn[28], line 16\u001b[0m\n\u001b[0;32m 13\u001b[0m
\u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\
u001b[39m\u001b[38;5;124mНайдено \u001b[39m\u001b[38;5;132;01m{\u001b[39;00m\
u001b[38;5;28mlen\u001b[39m(signals)\u001b[38;5;132;01m}\u001b[39;00m\
u001b[38;5;124m сигналов\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m
15\u001b[0m \u001b[38;5;66;03m# Укажите путь к вашему .jls файлу и путь к CSV файлу
для экспорта\u001b[39;00m\n\u001b[1;32m---> 16\u001b[0m \
u001b[43mexport_jls_to_csv\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\
u001b[39;49m\u001b[38;5;124;43mC:/Users/fomin.p/Desktop/MRF_1_24.jls\u001b[39;49m\
u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m)\u001b[49m\n",
"Cell \u001b[1;32mIn[28], line 9\u001b[0m, in \u001b[0;36mexport_jls_to_csv\
u001b[1;34m(input_path, output_path)\u001b[0m\n\u001b[0;32m 6\u001b[0m \
u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mexport_jls_to_csv\
u001b[39m(input_path, output_path\u001b[38;5;241m=\u001b[39m\
u001b[38;5;28;01mFalse\u001b[39;00m):\n\u001b[0;32m 7\u001b[0m \
u001b[38;5;66;03m# Открываем .jls файл\u001b[39;00m\n\u001b[0;32m 8\u001b[0m
\u001b[38;5;28;01mwith\u001b[39;00m \u001b[38;5;28mopen\u001b[39m(input_path, \
u001b[38;5;124m'\u001b[39m\u001b[38;5;124mrb\u001b[39m\u001b[38;5;124m'\
u001b[39m) \u001b[38;5;28;01mas\u001b[39;00m f:\n\u001b[1;32m----> 9\u001b[0m
reader \u001b[38;5;241m=\u001b[39m \u001b[43mdatafile\u001b[49m\
u001b[38;5;241;43m.\u001b[39;49m\u001b[43mDataFileReader\u001b[49m\u001b[43m(\
u001b[49m\u001b[43mf\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 11\u001b[0m
\u001b[38;5;66;03m# Получаем информацию о сигналах\u001b[39;00m\n\u001b[0;32m
12\u001b[0m signals \u001b[38;5;241m=\u001b[39m reader\u001b[38;5;241m.\
u001b[39msignals\n",
"File \u001b[1;32mc:\\Users\\fomin.p\\AppData\\Local\\Programs\\Python\\
Python312\\Lib\\site-packages\\joulescope\\datafile.py:511\u001b[0m, in \
u001b[0;36mDataFileReader.__init__\u001b[1;34m(self, filehandle)\u001b[0m\n\
u001b[0;32m 509\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mlen\
u001b[39m(header) \u001b[38;5;241m!=\u001b[39m HEADER_SIZE:\n\u001b[0;32m 510\
u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mIOError\
u001b[39;00m(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mfile too small\u001b[39m\
u001b[38;5;124m'\u001b[39m)\n\u001b[1;32m--> 511\u001b[0m \u001b[38;5;28mself\
u001b[39m\u001b[38;5;241m.\u001b[39mlength, \u001b[38;5;28mself\u001b[39m\
u001b[38;5;241m.\u001b[39mversion \u001b[38;5;241m=\u001b[39m \
u001b[43mvalidate_file_header\u001b[49m\u001b[43m(\u001b[49m\u001b[43mheader\
u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 512\u001b[0m pos1 \
u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\
u001b[39m_fh\u001b[38;5;241m.\u001b[39mtell()\n\u001b[0;32m 513\u001b[0m \
u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_fh\u001b[38;5;241m.\
u001b[39mseek(\u001b[38;5;241m0\u001b[39m, \u001b[38;5;241m2\u001b[39m)\n",
"File \u001b[1;32mc:\\Users\\fomin.p\\AppData\\Local\\Programs\\Python\\
Python312\\Lib\\site-packages\\joulescope\\datafile.py:472\u001b[0m, in \
u001b[0;36mvalidate_file_header\u001b[1;34m(data)\u001b[0m\n\u001b[0;32m 470\
u001b[0m header \u001b[38;5;241m=\u001b[39m data[:HEADER_SIZE]\n\u001b[0;32m
471\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m MAGIC \u001b[38;5;241m!=\u001b[39m
header[:\u001b[38;5;241m16\u001b[39m]:\n\u001b[1;32m--> 472\u001b[0m \
u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mIOError\u001b[39;00m(\
u001b[38;5;124m'\u001b[39m\u001b[38;5;124minvalid file\u001b[39m\u001b[38;5;124m'\
u001b[39m)\n\u001b[0;32m 473\u001b[0m length, version, crc_read \
u001b[38;5;241m=\u001b[39m struct\u001b[38;5;241m.\u001b[39munpack(\
u001b[38;5;124m'\u001b[39m\u001b[38;5;124m<QxxxBI\u001b[39m\u001b[38;5;124m'\
u001b[39m, header[\u001b[38;5;241m16\u001b[39m:])\n\u001b[0;32m 474\u001b[0m
crc_compute \u001b[38;5;241m=\u001b[39m binascii\u001b[38;5;241m.\
u001b[39mcrc32(header[:(HEADER_SIZE \u001b[38;5;241m-\u001b[39m \u001b[38;5;241m4\
u001b[39m)])\n",
"\u001b[1;31mOSError\u001b[0m: invalid file"
]
}
],
"source": [
"import joulescope\n",
"\n",
"# Подключаем класс Reader из joulescope\n",
"from joulescope import datafile\n",
"\n",
"def export_jls_to_csv(input_path, output_path=False):\n",
" # Открываем .jls файл\n",
" with open(input_path, 'rb') as f:\n",
" reader = datafile.DataFileReader(f)\n",
" \n",
" # Получаем информацию о сигналах\n",
" signals = reader.signals\n",
" print(f\"Найдено {len(signals)} сигналов\")\n",
"\n",
"# Укажите путь к вашему .jls файлу и путь к CSV файлу для экспорта\n",
"export_jls_to_csv(\"C:/Users/fomin.p/Desktop/MRF_1_24.jls\")\n"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {},
"outputs": [
{
"ename": "AttributeError",
"evalue": "'str' object has no attribute 'read'",
"output_type": "error",
"traceback": [
"\
u001b[1;31m------------------------------------------------------------------------
---\u001b[0m",
"\u001b[1;31mAttributeError\u001b[0m Traceback
(most recent call last)",
"Cell \u001b[1;32mIn[33], line 7\u001b[0m\n\u001b[0;32m 4\u001b[0m
mode \u001b[38;5;241m=\u001b[39m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mrb\
u001b[39m\u001b[38;5;124m'\u001b[39m\n\u001b[0;32m 5\u001b[0m \
u001b[38;5;66;03m#reader = joulescope.datafile.DataFileReader(path, mode)\
u001b[39;00m\n\u001b[1;32m----> 7\u001b[0m \u001b[38;5;28mprint\u001b[39m(\
u001b[38;5;28mdir\u001b[39m(\u001b[43mjoulescope\u001b[49m\u001b[38;5;241;43m.\
u001b[39;49m\u001b[43mdatafile\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\
u001b[43mDataFileReader\u001b[49m\u001b[43m(\u001b[49m\u001b[43mpath\u001b[49m\
u001b[43m)\u001b[49m))\n",
"File \u001b[1;32mc:\\Users\\fomin.p\\AppData\\Local\\Programs\\Python\\
Python312\\Lib\\site-packages\\joulescope\\datafile.py:508\u001b[0m, in \
u001b[0;36mDataFileReader.__init__\u001b[1;34m(self, filehandle)\u001b[0m\n\
u001b[0;32m 506\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\
u001b[39m_signature_data \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\
u001b[39;00m\n\u001b[0;32m 507\u001b[0m \u001b[38;5;28mself\u001b[39m\
u001b[38;5;241m.\u001b[39m_fh \u001b[38;5;241m=\u001b[39m filehandle\n\
u001b[1;32m--> 508\u001b[0m header \u001b[38;5;241m=\u001b[39m \
u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_fh\
u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mread\u001b[49m(HEADER_SIZE)\n\
u001b[0;32m 509\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mlen\
u001b[39m(header) \u001b[38;5;241m!=\u001b[39m HEADER_SIZE:\n\u001b[0;32m 510\
u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mIOError\
u001b[39;00m(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mfile too small\u001b[39m\
u001b[38;5;124m'\u001b[39m)\n",
"\u001b[1;31mAttributeError\u001b[0m: 'str' object has no attribute 'read'"
]
}
],
"source": [
"import joulescope\n",
"\n",
"path = \"C:/Users/fomin.p/Desktop/MRF_1_24.jls\"\n",
"mode = 'rb'\n",
"#reader = joulescope.datafile.DataFileReader(path, mode)\n",
"\n",
"print(dir(joulescope.datafile.DataFileReader(path)))\n",
"\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {},
"outputs": [
{
"ename": "OSError",
"evalue": "invalid file",
"output_type": "error",
"traceback": [
"\
u001b[1;31m------------------------------------------------------------------------
---\u001b[0m",
"\u001b[1;31mOSError\u001b[0m Traceback
(most recent call last)",
"Cell \u001b[1;32mIn[35], line 9\u001b[0m\n\u001b[0;32m 7\u001b[0m \
u001b[38;5;66;03m# Открываем файл\u001b[39;00m\n\u001b[0;32m 8\u001b[0m \
u001b[38;5;28;01mwith\u001b[39;00m \u001b[38;5;28mopen\u001b[39m(file_path, \
u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mrb\u001b[39m\u001b[38;5;124m\"\
u001b[39m) \u001b[38;5;28;01mas\u001b[39;00m f:\n\u001b[1;32m----> 9\u001b[0m
reader \u001b[38;5;241m=\u001b[39m \u001b[43mDataFileReader\u001b[49m\u001b[43m(\
u001b[49m\u001b[43mf\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 11\u001b[0m
\u001b[38;5;66;03m# Итерируемся по данным в файле\u001b[39;00m\n\u001b[0;32m
12\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m tag, value \
u001b[38;5;129;01min\u001b[39;00m reader:\n\u001b[0;32m 13\u001b[0m \
u001b[38;5;66;03m# В зависимости от тега определяем, что мы извлекаем\u001b[39;00m\
n",
"File \u001b[1;32mc:\\Users\\fomin.p\\AppData\\Local\\Programs\\Python\\
Python312\\Lib\\site-packages\\joulescope\\datafile.py:511\u001b[0m, in \
u001b[0;36mDataFileReader.__init__\u001b[1;34m(self, filehandle)\u001b[0m\n\
u001b[0;32m 509\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mlen\
u001b[39m(header) \u001b[38;5;241m!=\u001b[39m HEADER_SIZE:\n\u001b[0;32m 510\
u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mIOError\
u001b[39;00m(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mfile too small\u001b[39m\
u001b[38;5;124m'\u001b[39m)\n\u001b[1;32m--> 511\u001b[0m \u001b[38;5;28mself\
u001b[39m\u001b[38;5;241m.\u001b[39mlength, \u001b[38;5;28mself\u001b[39m\
u001b[38;5;241m.\u001b[39mversion \u001b[38;5;241m=\u001b[39m \
u001b[43mvalidate_file_header\u001b[49m\u001b[43m(\u001b[49m\u001b[43mheader\
u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 512\u001b[0m pos1 \
u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\
u001b[39m_fh\u001b[38;5;241m.\u001b[39mtell()\n\u001b[0;32m 513\u001b[0m \
u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_fh\u001b[38;5;241m.\
u001b[39mseek(\u001b[38;5;241m0\u001b[39m, \u001b[38;5;241m2\u001b[39m)\n",
"File \u001b[1;32mc:\\Users\\fomin.p\\AppData\\Local\\Programs\\Python\\
Python312\\Lib\\site-packages\\joulescope\\datafile.py:472\u001b[0m, in \
u001b[0;36mvalidate_file_header\u001b[1;34m(data)\u001b[0m\n\u001b[0;32m 470\
u001b[0m header \u001b[38;5;241m=\u001b[39m data[:HEADER_SIZE]\n\u001b[0;32m
471\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m MAGIC \u001b[38;5;241m!=\u001b[39m
header[:\u001b[38;5;241m16\u001b[39m]:\n\u001b[1;32m--> 472\u001b[0m \
u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mIOError\u001b[39;00m(\
u001b[38;5;124m'\u001b[39m\u001b[38;5;124minvalid file\u001b[39m\u001b[38;5;124m'\
u001b[39m)\n\u001b[0;32m 473\u001b[0m length, version, crc_read \
u001b[38;5;241m=\u001b[39m struct\u001b[38;5;241m.\u001b[39munpack(\
u001b[38;5;124m'\u001b[39m\u001b[38;5;124m<QxxxBI\u001b[39m\u001b[38;5;124m'\
u001b[39m, header[\u001b[38;5;241m16\u001b[39m:])\n\u001b[0;32m 474\u001b[0m
crc_compute \u001b[38;5;241m=\u001b[39m binascii\u001b[38;5;241m.\
u001b[39mcrc32(header[:(HEADER_SIZE \u001b[38;5;241m-\u001b[39m \u001b[38;5;241m4\
u001b[39m)])\n",
"\u001b[1;31mOSError\u001b[0m: invalid file"
]
}
],
"source": [
"import struct\n",
"from joulescope.datafile import DataFileReader\n",
"\n",
"# Путь к вашему .jls файлу\n",
"file_path = \"C:/Users/fomin.p/Desktop/LP_1_22.jls\" # LP_1_22.jls MRF_1_24\
n",
" \n",
"# Открываем файл\n",
"with open(file_path, \"rb\") as f:\n",
" reader = DataFileReader(f)\n",
" \n",
" # Итерируемся по данным в файле\n",
" for tag, value in reader:\n",
" # В зависимости от тега определяем, что мы извлекаем\n",
" if tag.startswith(b\"CUR\"): # Если тег связан с текущим\n",
" current_value = struct.unpack('f', value[:4])[0] # Пример для
извлечения float значений\n",
" print(\"Current value:\", current_value)\n"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"b'jlsfmt\\r\\n \\n \\x1a \\xb2\\x1c'\n"
]
}
],
"source": [
"file_path = \"C:/Users/fomin.p/Desktop/LP_1_22.jls\" # Ваш путь к файлу\n",
"\n",
"# Открываем файл и читаем его заголовок\n",
"with open(file_path, \"rb\") as f:\n",
" header = f.read(32) # Считываем первые 32 байта\n",
" print(header[:16]) # Выводим \"подпись\" файла для проверки формата\n"
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {},
"outputs": [
{
"ename": "ModuleNotFoundError",
"evalue": "No module named 'joulescope.jls_v2'",
"output_type": "error",
"traceback": [
"\
u001b[1;31m------------------------------------------------------------------------
---\u001b[0m",
"\u001b[1;31mModuleNotFoundError\u001b[0m Traceback
(most recent call last)",
"Cell \u001b[1;32mIn[37], line 1\u001b[0m\n\u001b[1;32m----> 1\u001b[0m \
u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mjoulescope\u001b[39;00m\
u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mjls_v2\u001b[39;00m \
u001b[38;5;28;01mimport\u001b[39;00m JlsReader\n\u001b[0;32m 3\u001b[0m \
u001b[38;5;66;03m# Путь к вашему .jls файлу\u001b[39;00m\n\u001b[0;32m 4\
u001b[0m file_path \u001b[38;5;241m=\u001b[39m \u001b[38;5;124m\"\u001b[39m\
u001b[38;5;124mC:/Users/fomin.p/Desktop/LP_1_22.jls\u001b[39m\u001b[38;5;124m\"\
u001b[39m\n",
"\u001b[1;31mModuleNotFoundError\u001b[0m: No module named
'joulescope.jls_v2'"
]
}
],
"source": [
"from joulescope.jls_v2 import JlsReader\n",
"\n",
"# Путь к вашему .jls файлу\n",
"file_path = \"C:/Users/fomin.p/Desktop/LP_1_22.jls\"\n",
"\n",
"# Используем JlsReader для чтения файла версии 2\n",
"with JlsReader(file_path) as jls:\n",
" # Получаем информацию о сигналах\n",
" print(f\"Файл содержит {len(jls.signals)} сигналов.\")\n",
"\n",
" # Извлекаем данные по току\n",
" current_signal = jls.signals['current']\n",
" data = current_signal.data\n",
" print(\"Данные по току:\", data)\n"
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Чтение сигнала: global_annotation_signal\n"
]
},
{
"ename": "AttributeError",
"evalue": "'SignalDef' object has no attribute 'data_get'",
"output_type": "error",
"traceback": [
"\
u001b[1;31m------------------------------------------------------------------------
---\u001b[0m",
"\u001b[1;31mAttributeError\u001b[0m Traceback
(most recent call last)",
"Cell \u001b[1;32mIn[38], line 10\u001b[0m\n\u001b[0;32m 8\u001b[0m \
u001b[38;5;28;01mfor\u001b[39;00m signal \u001b[38;5;129;01min\u001b[39;00m reader\
u001b[38;5;241m.\u001b[39msignals\u001b[38;5;241m.\u001b[39mvalues():\n\u001b[0;32m
9\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124mf\u001b[39m\
u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mЧтение сигнала: \u001b[39m\
u001b[38;5;132;01m{\u001b[39;00msignal\u001b[38;5;241m.\u001b[39mname\
u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m)\n\u001b[1;32m---> 10\
u001b[0m data \u001b[38;5;241m=\u001b[39m \u001b[43msignal\u001b[49m\
u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdata_get\u001b[49m()\n\u001b[0;32m
11\u001b[0m \u001b[38;5;66;03m# Сохраняем данные в CSV-файл\u001b[39;00m\n\
u001b[0;32m 12\u001b[0m output_file \u001b[38;5;241m=\u001b[39m \
u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;132;01m{\
u001b[39;00msignal\u001b[38;5;241m.\u001b[39mname\u001b[38;5;132;01m}\u001b[39;00m\
u001b[38;5;124m_output.csv\u001b[39m\u001b[38;5;124m\"\u001b[39m\n",
"\u001b[1;31mAttributeError\u001b[0m: 'SignalDef' object has no attribute
'data_get'"
]
}
],
"source": [
"import pyjls\n",
"\n",
"# Путь к вашему .jls файлу\n",
"file_path = \"C:/Users/fomin.p/Desktop/LP_1_22.jls\" # LP_1_22.jls или
MRF_1_24.jls\n",
"\n",
"# Открываем файл .jls для чтения\n",
"with pyjls.Reader(file_path) as reader:\n",
" for signal in reader.signals.values():\n",
" print(f\"Чтение сигнала: {signal.name}\")\n",
" data = signal.data_get()\n",
" # Сохраняем данные в CSV-файл\n",
" output_file = f\"{signal.name}_output.csv\"\n",
" with open(output_file, \"w\") as f:\n",
" f.write(\"Index,Value\\n\")\n",
" for idx, value in enumerate(data):\n",
" f.write(f\"{idx},{value}\\n\")\n",
" print(f\"Данные сигнала '{signal.name}' успешно сохранены в
{output_file}\")\n"
]
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Чтение сигнала: global_annotation_signal\n",
"Ошибка при извлечении данных для сигнала 'global_annotation_signal':
'pyjls.binding.Reader' object has no attribute 'data_get'\n",
"Чтение сигнала: current\n",
"Ошибка при извлечении данных для сигнала 'current': 'pyjls.binding.Reader'
object has no attribute 'data_get'\n",
"Чтение сигнала: voltage\n",
"Ошибка при извлечении данных для сигнала 'voltage': 'pyjls.binding.Reader'
object has no attribute 'data_get'\n",
"Чтение сигнала: power\n",
"Ошибка при извлечении данных для сигнала 'power': 'pyjls.binding.Reader'
object has no attribute 'data_get'\n"
]
}
],
"source": [
"import pyjls\n",
"\n",
"# Путь к вашему .jls файлу\n",
"file_path = \"C:/Users/fomin.p/Desktop/LP_1_22.jls\" # или MRF_1_24.jls\n",
"\n",
"# Открываем файл .jls для чтения\n",
"with pyjls.Reader(file_path) as reader:\n",
" # Перебираем сигналы\n",
" for signal in reader.signals.values():\n",
" print(f\"Чтение сигнала: {signal.name}\")\n",
"\n",
" # Извлекаем данные\n",
" try:\n",
" data = reader.data_get(signal)\n",
" # Сохраняем данные в CSV-файл\n",
" output_file = f\"{signal.name}_output.csv\"\n",
" with open(output_file, \"w\") as f:\n",
" f.write(\"Index,Value\\n\")\n",
" for idx, value in enumerate(data):\n",
" f.write(f\"{idx},{value}\\n\")\n",
" print(f\"Данные сигнала '{signal.name}' успешно сохранены в
{output_file}\")\n",
" except Exception as e:\n",
" print(f\"Ошибка при извлечении данных для сигнала '{signal.name}':
{e}\")\n"
]
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Чтение сигнала: global_annotation_signal\n",
"Ошибка при извлечении данных для сигнала 'global_annotation_signal':
'pyjls.binding.Reader' object has no attribute 'data'\n",
"Чтение сигнала: current\n",
"Ошибка при извлечении данных для сигнала 'current': 'pyjls.binding.Reader'
object has no attribute 'data'\n",
"Чтение сигнала: voltage\n",
"Ошибка при извлечении данных для сигнала 'voltage': 'pyjls.binding.Reader'
object has no attribute 'data'\n",
"Чтение сигнала: power\n",
"Ошибка при извлечении данных для сигнала 'power': 'pyjls.binding.Reader'
object has no attribute 'data'\n"
]
}
],
"source": [
"import pyjls\n",
"\n",
"# Путь к вашему .jls файлу\n",
"file_path = \"C:/Users/fomin.p/Desktop/LP_1_22.jls\" # или MRF_1_24.jls\n",
"\n",
"# Открываем файл .jls для чтения\n",
"with pyjls.Reader(file_path) as reader:\n",
" # Перебираем сигналы\n",
" for signal in reader.signals.values():\n",
" print(f\"Чтение сигнала: {signal.name}\")\n",
"\n",
" # Извлекаем данные\n",
" try:\n",
" # Получаем данные сигнала\n",
" data = reader.data(signal)\n",
" # Сохраняем данные в CSV-файл\n",
" output_file = f\"{signal.name}_output.csv\"\n",
" with open(output_file, \"w\") as f:\n",
" f.write(\"Index,Value\\n\")\n",
" for idx, value in enumerate(data):\n",
" f.write(f\"{idx},{value}\\n\")\n",
" print(f\"Данные сигнала '{signal.name}' успешно сохранены в
{output_file}\")\n",
" except Exception as e:\n",
" print(f\"Ошибка при извлечении данных для сигнала '{signal.name}':
{e}\")\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 67,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Чтение сигнала: global_annotation_signal\n",
"Чтение сигнала: current\n",
"Чтение сигнала: voltage\n",
"Чтение сигнала: power\n",
"Чтение сигнала: 0\n",
"Чтение сигнала: 1\n",
"Чтение сигнала: 2\n",
"Чтение сигнала: 3\n",
"1\n"
]
}
],
"source": [
"import pyjls\n",
"\n",
"# Путь к вашему .jls файлу\n",
"file_path = \"C:/Users/fomin.p/Desktop/LP_1_22.jls\" # или MRF_1_24.jls\n",
"sigCurrent = 0\n",
"# Открываем файл .jls для чтения\n",
"with pyjls.Reader(file_path) as reader:\n",
" # Перебираем сигналы\n",
" for signal in reader.signals.values():\n",
" print(f\"Чтение сигнала: {signal.name}\")\n",
" if signal.name == 'current':\n",
" sigCurrent = signal\n",
" for signal in reader.signals.keys():\n",
" print(f\"Чтение сигнала: {signal}\")\n",
" if signal == 1:\n",
" sigCurrent = signal\n",
"\n",
" \n",
"print(sigCurrent)"
]
},
{
"cell_type": "code",
"execution_count": 58,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Help on Reader object:\n",
"\n",
"class Reader(builtins.object)\n",
" | Open a JLS v2 file for reading.\n",
" |\n",
" | :param path: The path to the JLS file.\n",
" |\n",
" | Methods defined here:\n",
" |\n",
" | __enter__(self)\n",
" |\n",
" | __exit__(self, type, value, traceback)\n",
" |\n",
" | __init__(self, /, *args, **kwargs)\n",
" | Initialize self. See help(type(self)) for accurate signature.\n",
" |\n",
" | __reduce__ = __reduce_cython__(...)\n",
" |\n",
" | __setstate__ = __setstate_cython__(...)\n",
" |\n",
" | annotations(self, signal_id, timestamp, cbk_fn)\n",
" | Read annotations from a signal.\n",
" |\n",
" | :param signal_id: The signal id.\n",
" | :param timestamp: The starting timestamp. FSR uses sample_id. VSR
uses utc.\n",
" | :param cbk: The function(timestamp, y, annotation_type, group_id,
data)\n",
" | to call for each annotation. Return True to stop iteration
over\n",
" | the annotations or False to continue iterating.\n",
" |\n",
" | close(self)\n",
" | Close the JLS file and free all resources.\n",
" |\n",
" | fsr(self, signal_id, start_sample_id, length)\n",
" | Read the FSR data.\n",
" |\n",
" | :param signal_id: The signal id.\n",
" | :param start_sample_id: The starting sample id to read.\n",
" | :param length: The number of samples to read.\n",
" | :return: The data, which varies depending upon the FSR data type.\
n",
" |\n",
" | u1 and u4 data will be packed in little endian order.\n",
" |\n",
" | For u1, unpack with:\n",
" | np.unpackbits(y, bitorder='little')[:len(x)]\n",
" |\n",
" | For u4, unpack with\n",
" | d = np.empty(len(y) * 2, dtype=np.uint8)\n",
" | d[0::2] = np.bitwise_and(y, 0x0f)\n",
" | d[1::2] = np.bitwise_and(np.right_shift(y, 4), 0x0f)\n",
" |\n",
" | fsr_statistics(self, signal_id, start_sample_id, increment, length)\n",
" | Read FSR statistics (mean, stdev, min, max).\n",
" |\n",
" | :param signal_id: The signal id for a fixed sampling rate (FSR)
signal.\n",
" | :param start_sample_id: The starting sample id to read.\n",
" | The sample_id of the first recorded sample in a signal is 0.\n",
" | :param increment: The number of samples represented per return
value.\n",
" | :param length: The number of return values to generate.\n",
" | :return: The 2-D array[summary][stat] of np.float32.\n",
" | * Each summary entry represents the statistics computed\n",
" | approximately over increment samples starting\n",
" | from start_sample_id + <index> * increment.\n",
" | It has length given by the length argument.\n",
" | * stat is length 4 with columns defined by SummaryFSR\n",
" | which are mean (average), standard deviation,\n",
" | minimum, and maximum.\n",
" |\n",
" | For length 1, the return statistics are sample-accurate.\n",
" | For larger lengths, the external boundaries for index 0 (first)\n",
" | and index -1 (last) are computed exactly. The internal boundaries\
n",
" | are approximated, perfect for waveform display, but perhaps not\n",
" | suitable for other use cases. If you need sample accurate
statistics\n",
" | over multiple increments, call this function repeatedly with length
1.\n",
" |\n",
" | sample_id_to_timestamp(self, signal_id, sample_id)\n",
" | Convert sample_id to UTC timestamp for FSR signals.\n",
" |\n",
" | :param signal_id: The signal id.\n",
" | :param sample_id: The sample_id to convert.\n",
" | :return: The JLS timestamp corresponding to sample_id.\n",
" | :raise RuntimeError: on error.\n",
" |\n",
" | signal_lookup(self, spec) -> 'SignalDef'\n",
" | Look up a signal.\n",
" |\n",
" | :param spec: The signal id or name.\n",
" | :return: The signal definition:\n",
" | :raise ValueError: If not found.\n",
" |\n",
" | timestamp_to_sample_id(self, signal_id, utc_timestamp)\n",
" | Convert UTC timestamp to sample_id for FSR signals.\n",
" |\n",
" | :param signal_id: The signal id.\n",
" | :param utc_timestamp: The UTC timestamp to convert.\n",
" | :return: The sample_id corresponding to utc_timestamp.\n",
" | :raise RuntimeError: on error.\n",
" |\n",
" | user_data(self, cbk_fn)\n",
" | Get the user data.\n",
" |\n",
" | :param cbk_fn: The callable(chunk_meta_u16, data) called for each\
n",
" | user_data entry. Return True to stop iterating over subsequent\
n",
" | user data entries or False to continue iterating.\n",
" |\n",
" | utc(self, signal_id, sample_id, cbk_fn)\n",
" | Read the sample_id / utc pairs from a FSR signal.\n",
" |\n",
" | :param signal_id: The signal id.\n",
" | :param sample_id: The starting sample_id.\n",
" | :param cbk: The function(entries)\n",
" | to call for each annotation. Entries is an Nx2 numpy array of\
n",
" | [sample_id, utc_timestamp].\n",
" | Return True to stop iteration over the annotations\n",
" | or False to continue iterating.\n",
" |\n",
" | ----------------------------------------------------------------------\
n",
" | Static methods defined here:\n",
" |\n",
" | __new__(*args, **kwargs) from builtins.type\n",
" | Create and return a new object. See help(type) for accurate
signature.\n",
" |\n",
" | ----------------------------------------------------------------------\
n",
" | Data descriptors defined here:\n",
" |\n",
" | signals\n",
" | Return the dict mapping signal_id to SignalDef.\n",
" |\n",
" | sources\n",
" | Return the dict mapping source_id to SourceDef.\n",
"\n",
"Чтение сигнала: global_annotation_signal\n",
"Ошибка при извлечении данных для сигнала 'global_annotation_signal':
'pyjls.binding.Reader' object has no attribute 'data'\n",
"Чтение сигнала: current\n",
"Ошибка при извлечении данных для сигнала 'current': 'pyjls.binding.Reader'
object has no attribute 'data'\n",
"Чтение сигнала: voltage\n",
"Ошибка при извлечении данных для сигнала 'voltage': 'pyjls.binding.Reader'
object has no attribute 'data'\n",
"Чтение сигнала: power\n",
"Ошибка при извлечении данных для сигнала 'power': 'pyjls.binding.Reader'
object has no attribute 'data'\n"
]
}
],
"source": [
"import pyjls\n",
"\n",
"# Путь к вашему .jls файлу\n",
"file_path = \"C:/Users/fomin.p/Desktop/LP_1_22.jls\" # или MRF_1_24.jls\n",
"\n",
"# Открываем файл .jls для чтения\n",
"with pyjls.Reader(file_path) as reader:\n",
" help(reader)\n",
" # Перебираем сигналы\n",
" for signal in reader.signals.values():\n",
" print(f\"Чтение сигнала: {signal.name}\")\n",
" # Извлекаем данные\n",
" try:\n",
" # Получаем данные сигнала\n",
" data = reader.data(signal)\n",
" # Сохраняем данные в CSV-файл\n",
" output_file = f\"{signal.name}_output.csv\"\n",
" with open(output_file, \"w\") as f:\n",
" f.write(\"Index,Value\\n\")\n",
" for idx, value in enumerate(data):\n",
" f.write(f\"{idx},{value}\\n\")\n",
" print(f\"Данные сигнала '{signal.name}' успешно сохранены в
{output_file}\")\n",
" except Exception as e:\n",
" print(f\"Ошибка при извлечении данных для сигнала '{signal.name}':
{e}\")\n"
]
},
{
"cell_type": "code",
"execution_count": 68,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Чтение сигнала: global_annotation_signal\n",
"Ошибка при извлечении данных для сигнала 'global_annotation_signal':
'SignalDef' object has no attribute 'id'\n",
"Чтение сигнала: current\n",
"Ошибка при извлечении данных для сигнала 'current': 'SignalDef' object has
no attribute 'id'\n",
"Чтение сигнала: voltage\n",
"Ошибка при извлечении данных для сигнала 'voltage': 'SignalDef' object has
no attribute 'id'\n",
"Чтение сигнала: power\n",
"Ошибка при извлечении данных для сигнала 'power': 'SignalDef' object has no
attribute 'id'\n"
]
}
],
"source": [
"import pyjls\n",
"\n",
"# Путь к вашему .jls файлу\n",
"file_path = \"C:/Users/fomin.p/Desktop/LP_1_22.jls\" # или MRF_1_24.jls\n",
"\n",
"# Открываем файл .jls для чтения\n",
"with pyjls.Reader(file_path) as reader:\n",
" # Перебираем сигналы\n",
" for signal in reader.signals.values():\n",
" print(f\"Чтение сигнала: {signal.name}\")\n",
" \n",
" # Извлекаем данные\n",
" try:\n",
" # Проверяем наличие фиксированной частоты дискретизации\n",
" if signal.id in reader.signals.keys():\n",
" data = reader.fsr(signal.id, 0, signal.sample_count) # Чтение
всех данных сигнала\n",
" # Сохраняем данные в CSV-файл\n",
" output_file = f\"{signal.name}_output.csv\"\n",
" with open(output_file, \"w\") as f:\n",
" f.write(\"Index,Value\\n\")\n",
" for idx, value in enumerate(data):\n",
" f.write(f\"{idx},{value}\\n\")\n",
" print(f\"Данные сигнала '{signal.name}' успешно сохранены в
{output_file}\")\n",
" else:\n",
" print(f\"Сигнал '{signal.name}' не имеет фиксированной частоты
дискретизации.\")\n",
" except Exception as e:\n",
" print(f\"Ошибка при извлечении данных для сигнала '{signal.name}':
{e}\")\n"
]
},
{
"cell_type": "code",
"execution_count": 69,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Чтение сигнала: global_annotation_signal\n",
"Доступные атрибуты сигнала:\n",
" - annotation_decimate_factor\n",
" - data_type\n",
" - entries_per_summary\n",
" - info\n",
" - length\n",
" - name\n",
" - sample_decimate_factor\n",
" - sample_id_offset\n",
" - sample_rate\n",
" - samples_per_data\n",
" - signal_id\n",
" - signal_type\n",
" - source_id\n",
" - summary_decimate_factor\n",
" - units\n",
" - utc_decimate_factor\n",
"Ошибка при извлечении данных для сигнала 'global_annotation_signal':
'SignalDef' object has no attribute 'sample_count'\n",
"Чтение сигнала: current\n",
"Доступные атрибуты сигнала:\n",
" - annotation_decimate_factor\n",
" - data_type\n",
" - entries_per_summary\n",
" - info\n",
" - length\n",
" - name\n",
" - sample_decimate_factor\n",
" - sample_id_offset\n",
" - sample_rate\n",
" - samples_per_data\n",
" - signal_id\n",
" - signal_type\n",
" - source_id\n",
" - summary_decimate_factor\n",
" - units\n",
" - utc_decimate_factor\n",
"Ошибка при извлечении данных для сигнала 'current': 'SignalDef' object has
no attribute 'sample_count'\n",
"Чтение сигнала: voltage\n",
"Доступные атрибуты сигнала:\n",
" - annotation_decimate_factor\n",
" - data_type\n",
" - entries_per_summary\n",
" - info\n",
" - length\n",
" - name\n",
" - sample_decimate_factor\n",
" - sample_id_offset\n",
" - sample_rate\n",
" - samples_per_data\n",
" - signal_id\n",
" - signal_type\n",
" - source_id\n",
" - summary_decimate_factor\n",
" - units\n",
" - utc_decimate_factor\n",
"Ошибка при извлечении данных для сигнала 'voltage': 'SignalDef' object has
no attribute 'sample_count'\n",
"Чтение сигнала: power\n",
"Доступные атрибуты сигнала:\n",
" - annotation_decimate_factor\n",
" - data_type\n",
" - entries_per_summary\n",
" - info\n",
" - length\n",
" - name\n",
" - sample_decimate_factor\n",
" - sample_id_offset\n",
" - sample_rate\n",
" - samples_per_data\n",
" - signal_id\n",
" - signal_type\n",
" - source_id\n",
" - summary_decimate_factor\n",
" - units\n",
" - utc_decimate_factor\n",
"Ошибка при извлечении данных для сигнала 'power': 'SignalDef' object has no
attribute 'sample_count'\n"
]
}
],
"source": [
"import pyjls\n",
"\n",
"# Путь к вашему .jls файлу\n",
"file_path = \"C:/Users/fomin.p/Desktop/LP_1_22.jls\" # или MRF_1_24.jls\n",
"\n",
"# Открываем файл .jls для чтения\n",
"with pyjls.Reader(file_path) as reader:\n",
" # Перебираем сигналы\n",
" for signal in reader.signals.values():\n",
" print(f\"Чтение сигнала: {signal.name}\")\n",
" \n",
" # Выводим все доступные атрибуты сигнала\n",
" print(\"Доступные атрибуты сигнала:\")\n",
" for attr in dir(signal):\n",
" if not attr.startswith('_'):\n",
" print(f\" - {attr}\")\n",
"\n",
" # Извлекаем данные\n",
" try:\n",
" # Если signal.id не существует, возможно, нужно использовать
другой атрибут\n",
" signal_id = signal.signal_id # Попробуем использовать другой
атрибут для идентификации сигнала\n",
" data = reader.fsr(signal_id, 0, signal.sample_count) # Чтение
всех данных сигнала\n",
" # Сохраняем данные в CSV-файл\n",
" output_file = f\"{signal.name}_output.csv\"\n",
" with open(output_file, \"w\") as f:\n",
" f.write(\"Index,Value\\n\")\n",
" for idx, value in enumerate(data):\n",
" f.write(f\"{idx},{value}\\n\")\n",
" print(f\"Данные сигнала '{signal.name}' успешно сохранены в
{output_file}\")\n",
" except Exception as e:\n",
" print(f\"Ошибка при извлечении данных для сигнала '{signal.name}':
{e}\")\n"
]
},
{
"cell_type": "code",
"execution_count": 70,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Чтение сигнала: global_annotation_signal\n",
"Доступные атрибуты сигнала:\n",
" - annotation_decimate_factor\n",
" - data_type\n",
" - entries_per_summary\n",
" - info\n",
" - length\n",
" - name\n",
" - sample_decimate_factor\n",
" - sample_id_offset\n",
" - sample_rate\n",
" - samples_per_data\n",
" - signal_id\n",
" - signal_type\n",
" - source_id\n",
" - summary_decimate_factor\n",
" - units\n",
" - utc_decimate_factor\n",
"Ошибка при извлечении данных для сигнала 'global_annotation_signal': Out of
bounds on buffer access (axis 0)\n",
"Чтение сигнала: current\n",
"Доступные атрибуты сигнала:\n",
" - annotation_decimate_factor\n",
" - data_type\n",
" - entries_per_summary\n",
" - info\n",
" - length\n",
" - name\n",
" - sample_decimate_factor\n",
" - sample_id_offset\n",
" - sample_rate\n",
" - samples_per_data\n",
" - signal_id\n",
" - signal_type\n",
" - source_id\n",
" - summary_decimate_factor\n",
" - units\n",
" - utc_decimate_factor\n",
"Данные сигнала 'current' успешно сохранены в current_output.csv\n",
"Чтение сигнала: voltage\n",
"Доступные атрибуты сигнала:\n",
" - annotation_decimate_factor\n",
" - data_type\n",
" - entries_per_summary\n",
" - info\n",
" - length\n",
" - name\n",
" - sample_decimate_factor\n",
" - sample_id_offset\n",
" - sample_rate\n",
" - samples_per_data\n",
" - signal_id\n",
" - signal_type\n",
" - source_id\n",
" - summary_decimate_factor\n",
" - units\n",
" - utc_decimate_factor\n",
"Данные сигнала 'voltage' успешно сохранены в voltage_output.csv\n",
"Чтение сигнала: power\n",
"Доступные атрибуты сигнала:\n",
" - annotation_decimate_factor\n",
" - data_type\n",
" - entries_per_summary\n",
" - info\n",
" - length\n",
" - name\n",
" - sample_decimate_factor\n",
" - sample_id_offset\n",
" - sample_rate\n",
" - samples_per_data\n",
" - signal_id\n",
" - signal_type\n",
" - source_id\n",
" - summary_decimate_factor\n",
" - units\n",
" - utc_decimate_factor\n",
"Данные сигнала 'power' успешно сохранены в power_output.csv\n"
]
}
],
"source": [
"import pyjls\n",
"\n",
"# Путь к вашему .jls файлу\n",
"file_path = \"C:/Users/fomin.p/Desktop/LP_1_22.jls\" # или MRF_1_24.jls\n",
"\n",
"# Открываем файл .jls для чтения\n",
"with pyjls.Reader(file_path) as reader:\n",
" # Перебираем сигналы\n",
" for signal in reader.signals.values():\n",
" print(f\"Чтение сигнала: {signal.name}\")\n",
" \n",
" # Выводим все доступные атрибуты сигнала\n",
" print(\"Доступные атрибуты сигнала:\")\n",
" for attr in dir(signal):\n",
" if not attr.startswith('_'):\n",
" print(f\" - {attr}\")\n",
"\n",
" # Извлекаем данные\n",
" try:\n",
" signal_id = signal.signal_id # Идентификатор сигнала\n",
" data_length = signal.length # Длина данных сигнала\n",
"\n",
" # Читаем данные сигнала с помощью fsr\n",
" data = reader.fsr(signal_id, 0, data_length) # Чтение всех данных
сигнала\n",
"\n",
" # Сохраняем данные в CSV-файл\n",
" output_file = f\"{signal.name}_output.csv\"\n",
" with open(output_file, \"w\") as f:\n",
" f.write(\"Index,Value\\n\")\n",
" for idx, value in enumerate(data):\n",
" f.write(f\"{idx},{value}\\n\")\n",
" print(f\"Данные сигнала '{signal.name}' успешно сохранены в
{output_file}\")\n",
" except Exception as e:\n",
" print(f\"Ошибка при извлечении данных для сигнала '{signal.name}':
{e}\")\n"
]
},
{
"cell_type": "code",
"execution_count": 73,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Чтение сигнала: global_annotation_signal\n",
"Доступные атрибуты сигнала:\n",
" - annotation_decimate_factor\n",
" - data_type\n",
" - entries_per_summary\n",
" - info\n",
" - length\n",
" - name\n",
" - sample_decimate_factor\n",
" - sample_id_offset\n",
" - sample_rate\n",
" - samples_per_data\n",
" - signal_id\n",
" - signal_type\n",
" - source_id\n",
" - summary_decimate_factor\n",
" - units\n",
" - utc_decimate_factor\n",
"Сигнал 'global_annotation_signal' не содержит данных.\n",
"Чтение сигнала: current\n",
"Доступные атрибуты сигнала:\n",
" - annotation_decimate_factor\n",
" - data_type\n",
" - entries_per_summary\n",
" - info\n",
" - length\n",
" - name\n",
" - sample_decimate_factor\n",
" - sample_id_offset\n",
" - sample_rate\n",
" - samples_per_data\n",
" - signal_id\n",
" - signal_type\n",
" - source_id\n",
" - summary_decimate_factor\n",
" - units\n",
" - utc_decimate_factor\n",
"Данные сигнала 'current' успешно сохранены в current_output.csv\n",
"Чтение сигнала: voltage\n",
"Доступные атрибуты сигнала:\n",
" - annotation_decimate_factor\n",
" - data_type\n",
" - entries_per_summary\n",
" - info\n",
" - length\n",
" - name\n",
" - sample_decimate_factor\n",
" - sample_id_offset\n",
" - sample_rate\n",
" - samples_per_data\n",
" - signal_id\n",
" - signal_type\n",
" - source_id\n",
" - summary_decimate_factor\n",
" - units\n",
" - utc_decimate_factor\n",
"Ошибка при извлечении данных для сигнала 'voltage': [Errno 13] Permission
denied: 'voltage_output.csv'\n",
"Чтение сигнала: power\n",
"Доступные атрибуты сигнала:\n",
" - annotation_decimate_factor\n",
" - data_type\n",
" - entries_per_summary\n",
" - info\n",
" - length\n",
" - name\n",
" - sample_decimate_factor\n",
" - sample_id_offset\n",
" - sample_rate\n",
" - samples_per_data\n",
" - signal_id\n",
" - signal_type\n",
" - source_id\n",
" - summary_decimate_factor\n",
" - units\n",
" - utc_decimate_factor\n",
"Данные сигнала 'power' успешно сохранены в power_output.csv\n"
]
}
],
"source": [
"import pyjls\n",
"\n",
"# Путь к вашему .jls файлу\n",
"file_path = \"C:/Users/fomin.p/Desktop/LP_1_22.jls\" # или MRF_1_24.jls\n",
"\n",
"# Открываем файл .jls для чтения\n",
"with pyjls.Reader(file_path) as reader:\n",
" # Перебираем сигналы\n",
" for signal in reader.signals.values():\n",
" print(f\"Чтение сигнала: {signal.name}\")\n",
" \n",
" # Выводим все доступные атрибуты сигнала\n",
" print(\"Доступные атрибуты сигнала:\")\n",
" for attr in dir(signal):\n",
" if not attr.startswith('_'):\n",
" print(f\" - {attr}\")\n",
"\n",
" # Извлекаем данные\n",
" try:\n",
" signal_id = signal.signal_id # Идентификатор сигнала\n",
" data_length = signal.length # Длина данных сигнала\n",
"\n",
" # Проверяем, есть ли данные для сигнала\n",
" if data_length == 0:\n",
" print(f\"Сигнал '{signal.name}' не содержит данных.\")\n",
" continue\n",
"\n",
" # Читаем данные сигнала с помощью fsr\n",
" data = reader.fsr(signal_id, 0, data_length) # Чтение всех данных
сигнала\n",
"\n",
" # Сохраняем данные в CSV-файл\n",
" output_file = f\"{signal.name}_output.csv\"\n",
" with open(output_file, \"w\") as f:\n",
" f.write(\"Index,Value\\n\")\n",
" for idx, value in enumerate(data):\n",
" f.write(f\"{idx},{value}\\n\")\n",
" print(f\"Данные сигнала '{signal.name}' успешно сохранены в
{output_file}\")\n",
" except Exception as e:\n",
" print(f\"Ошибка при извлечении данных для сигнала '{signal.name}':
{e}\")\n"
]
},
{
"cell_type": "code",
"execution_count": 76,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Чтение сигнала: global_annotation_signal\n",
"Доступные атрибуты сигнала:\n",
" - annotation_decimate_factor\n",
" - data_type\n",
" - entries_per_summary\n",
" - info\n",
" - length\n",
" - name\n",
" - sample_decimate_factor\n",
" - sample_id_offset\n",
" - sample_rate\n",
" - samples_per_data\n",
" - signal_id\n",
" - signal_type\n",
" - source_id\n",
" - summary_decimate_factor\n",
" - units\n",
" - utc_decimate_factor\n",
"Сигнал 'global_annotation_signal' не содержит данных.\n",
"Чтение сигнала: current\n",
"Доступные атрибуты сигнала:\n",
" - annotation_decimate_factor\n",
" - data_type\n",
" - entries_per_summary\n",
" - info\n",
" - length\n",
" - name\n",
" - sample_decimate_factor\n",
" - sample_id_offset\n",
" - sample_rate\n",
" - samples_per_data\n",
" - signal_id\n",
" - signal_type\n",
" - source_id\n",
" - summary_decimate_factor\n",
" - units\n",
" - utc_decimate_factor\n",
"Данные сигнала 'current' успешно сохранены в current_output.csv\n",
"Чтение сигнала: voltage\n",
"Доступные атрибуты сигнала:\n",
" - annotation_decimate_factor\n",
" - data_type\n",
" - entries_per_summary\n",
" - info\n",
" - length\n",
" - name\n",
" - sample_decimate_factor\n",
" - sample_id_offset\n",
" - sample_rate\n",
" - samples_per_data\n",
" - signal_id\n",
" - signal_type\n",
" - source_id\n",
" - summary_decimate_factor\n",
" - units\n",
" - utc_decimate_factor\n",
"Данные сигнала 'voltage' успешно сохранены в voltage_output.csv\n",
"Чтение сигнала: power\n",
"Доступные атрибуты сигнала:\n",
" - annotation_decimate_factor\n",
" - data_type\n",
" - entries_per_summary\n",
" - info\n",
" - length\n",
" - name\n",
" - sample_decimate_factor\n",
" - sample_id_offset\n",
" - sample_rate\n",
" - samples_per_data\n",
" - signal_id\n",
" - signal_type\n",
" - source_id\n",
" - summary_decimate_factor\n",
" - units\n",
" - utc_decimate_factor\n",
"Данные сигнала 'power' успешно сохранены в power_output.csv\n"
]
}
],
"source": [
"import pyjls\n",
"\n",
"# Путь к вашему .jls файлу\n",
"file_path = \"C:/Users/fomin.p/Desktop/LP_1_22.jls\" # или MRF_1_24.jls\n",
"\n",
"# Открываем файл .jls для чтения\n",
"with pyjls.Reader(file_path) as reader:\n",
" # Перебираем сигналы\n",
" for signal in reader.signals.values():\n",
" print(f\"Чтение сигнала: {signal.name}\")\n",
" \n",
" # Выводим все доступные атрибуты сигнала\n",
" print(\"Доступные атрибуты сигнала:\")\n",
" for attr in dir(signal):\n",
" if not attr.startswith('_'):\n",
" print(f\" - {attr}\")\n",
"\n",
" # Извлекаем данные\n",
" try:\n",
" signal_id = signal.signal_id # Идентификатор сигнала\n",
" data_length = signal.length # Длина данных сигнала\n",
"\n",
" # Проверяем, есть ли данные для сигнала\n",
" if data_length == 0:\n",
" print(f\"Сигнал '{signal.name}' не содержит данных.\")\n",
" continue\n",
"\n",
" # Читаем данные сигнала с помощью fsr\n",
" data = reader.fsr(signal_id, 0, data_length) # Чтение всех данных
сигнала\n",
"\n",
" # Сохраняем данные в CSV-файл\n",
" output_file = f\"{signal.name}_output.csv\"\n",
" with open(output_file, \"w\") as f:\n",
" f.write(\"Index,Value\\n\") # Заголовки столбцов\n",
" for idx, value in enumerate(data):\n",
" f.write(f\"{idx},{value}\\n\") # Правильный формат
записи\n",
" print(f\"Данные сигнала '{signal.name}' успешно сохранены в
{output_file}\")\n",
" except Exception as e:\n",
" print(f\"Ошибка при извлечении данных для сигнала '{signal.name}':
{e}\")\n"
]
},
{
"cell_type": "code",
"execution_count": 78,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Чтение сигнала: global_annotation_signal\n",
"Доступные атрибуты сигнала:\n",
" - annotation_decimate_factor\n",
" - data_type\n",
" - entries_per_summary\n",
" - info\n",
" - length\n",
" - name\n",
" - sample_decimate_factor\n",
" - sample_id_offset\n",
" - sample_rate\n",
" - samples_per_data\n",
" - signal_id\n",
" - signal_type\n",
" - source_id\n",
" - summary_decimate_factor\n",
" - units\n",
" - utc_decimate_factor\n",
"Сигнал 'global_annotation_signal' не содержит данных.\n",
"Чтение сигнала: current\n",
"Доступные атрибуты сигнала:\n",
" - annotation_decimate_factor\n",
" - data_type\n",
" - entries_per_summary\n",
" - info\n",
" - length\n",
" - name\n",
" - sample_decimate_factor\n",
" - sample_id_offset\n",
" - sample_rate\n",
" - samples_per_data\n",
" - signal_id\n",
" - signal_type\n",
" - source_id\n",
" - summary_decimate_factor\n",
" - units\n",
" - utc_decimate_factor\n",
"Данные сигнала 'current' успешно сохранены в current_output.csv\n",
"Чтение сигнала: voltage\n",
"Доступные атрибуты сигнала:\n",
" - annotation_decimate_factor\n",
" - data_type\n",
" - entries_per_summary\n",
" - info\n",
" - length\n",
" - name\n",
" - sample_decimate_factor\n",
" - sample_id_offset\n",
" - sample_rate\n",
" - samples_per_data\n",
" - signal_id\n",
" - signal_type\n",
" - source_id\n",
" - summary_decimate_factor\n",
" - units\n",
" - utc_decimate_factor\n",
"Данные сигнала 'voltage' успешно сохранены в voltage_output.csv\n",
"Чтение сигнала: power\n",
"Доступные атрибуты сигнала:\n",
" - annotation_decimate_factor\n",
" - data_type\n",
" - entries_per_summary\n",
" - info\n",
" - length\n",
" - name\n",
" - sample_decimate_factor\n",
" - sample_id_offset\n",
" - sample_rate\n",
" - samples_per_data\n",
" - signal_id\n",
" - signal_type\n",
" - source_id\n",
" - summary_decimate_factor\n",
" - units\n",
" - utc_decimate_factor\n",
"Данные сигнала 'power' успешно сохранены в power_output.csv\n"
]
}
],
"source": [
"import pyjls\n",
"import csv\n",
"\n",
"# Путь к вашему .jls файлу\n",
"file_path = \"C:/Users/fomin.p/Desktop/LP_1_22.jls\" # или MRF_1_24.jls\n",
"\n",
"# Открываем файл .jls для чтения\n",
"with pyjls.Reader(file_path) as reader:\n",
" # Перебираем сигналы\n",
" for signal in reader.signals.values():\n",
" print(f\"Чтение сигнала: {signal.name}\")\n",
" \n",
" # Выводим все доступные атрибуты сигнала\n",
" print(\"Доступные атрибуты сигнала:\")\n",
" for attr in dir(signal):\n",
" if not attr.startswith('_'):\n",
" print(f\" - {attr}\")\n",
"\n",
" # Извлекаем данные\n",
" try:\n",
" signal_id = signal.signal_id # Идентификатор сигнала\n",
" data_length = signal.length # Длина данных сигнала\n",
"\n",
" # Проверяем, есть ли данные для сигнала\n",
" if data_length == 0:\n",
" print(f\"Сигнал '{signal.name}' не содержит данных.\")\n",
" continue\n",
"\n",
" # Читаем данные сигнала с помощью fsr\n",
" data = reader.fsr(signal_id, 0, data_length) # Чтение всех данных
сигнала\n",
"\n",
" # Сохраняем данные в CSV-файл\n",
" output_file = f\"{signal.name}_output.csv\"\n",
" with open(output_file, \"w\", newline='') as f: # Используем
newline=''\n",
" writer = csv.writer(f) # Создаем объект writer\n",
" writer.writerow([\"Index\", \"Value\"]) # Записываем
заголовки\n",
" for idx, value in enumerate(data):\n",
" writer.writerow([idx, value]) # Записываем индекс и
значение в отдельные ячейки\n",
" print(f\"Данные сигнала '{signal.name}' успешно сохранены в
{output_file}\")\n",
" except Exception as e:\n",
" print(f\"Ошибка при извлечении данных для сигнала '{signal.name}':
{e}\")\n"
]
},
{
"cell_type": "code",
"execution_count": 82,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Чтение сигнала: global_annotation_signal\n",
"Доступные атрибуты сигнала:\n",
" - annotation_decimate_factor\n",
" - data_type\n",
" - entries_per_summary\n",
" - info\n",
" - length\n",
" - name\n",
" - sample_decimate_factor\n",
" - sample_id_offset\n",
" - sample_rate\n",
" - samples_per_data\n",
" - signal_id\n",
" - signal_type\n",
" - source_id\n",
" - summary_decimate_factor\n",
" - units\n",
" - utc_decimate_factor\n",
"Сигнал 'global_annotation_signal' не содержит данных.\n",
"Чтение сигнала: current\n",
"Доступные атрибуты сигнала:\n",
" - annotation_decimate_factor\n",
" - data_type\n",
" - entries_per_summary\n",
" - info\n",
" - length\n",
" - name\n",
" - sample_decimate_factor\n",
" - sample_id_offset\n",
" - sample_rate\n",
" - samples_per_data\n",
" - signal_id\n",
" - signal_type\n",
" - source_id\n",
" - summary_decimate_factor\n",
" - units\n",
" - utc_decimate_factor\n",
"Данные сигнала 'current' успешно сохранены в current_output.csv\n",
"Чтение сигнала: voltage\n",
"Доступные атрибуты сигнала:\n",
" - annotation_decimate_factor\n",
" - data_type\n",
" - entries_per_summary\n",
" - info\n",
" - length\n",
" - name\n",
" - sample_decimate_factor\n",
" - sample_id_offset\n",
" - sample_rate\n",
" - samples_per_data\n",
" - signal_id\n",
" - signal_type\n",
" - source_id\n",
" - summary_decimate_factor\n",
" - units\n",
" - utc_decimate_factor\n",
"Данные сигнала 'voltage' успешно сохранены в voltage_output.csv\n",
"Чтение сигнала: power\n",
"Доступные атрибуты сигнала:\n",
" - annotation_decimate_factor\n",
" - data_type\n",
" - entries_per_summary\n",
" - info\n",
" - length\n",
" - name\n",
" - sample_decimate_factor\n",
" - sample_id_offset\n",
" - sample_rate\n",
" - samples_per_data\n",
" - signal_id\n",
" - signal_type\n",
" - source_id\n",
" - summary_decimate_factor\n",
" - units\n",
" - utc_decimate_factor\n",
"Данные сигнала 'power' успешно сохранены в power_output.csv\n"
]
},
{
"ename": "",
"evalue": "",
"output_type": "error",
"traceback": [
"\u001b[1;31mThe Kernel crashed while executing code in the current cell or a
previous cell. \n",
"\u001b[1;31mPlease review the code in the cell(s) to identify a possible
cause of the failure. \n",
"\u001b[1;31mClick <a href='https://aka.ms/vscodeJupyterKernelCrash'>here</a>
for more info. \n",
"\u001b[1;31mView Jupyter <a href='command:jupyter.viewOutput'>log</a> for
further details."
]
}
],
"source": [
"import pyjls\n",
"import csv\n",
"\n",
"# Путь к вашему .jls файлу\n",
"file_path = \"C:/Users/fomin.p/Desktop/LP_1_22.jls\" # или MRF_1_24.jls\n",
"\n",
"# Открываем файл .jls для чтения\n",
"with pyjls.Reader(file_path) as reader:\n",
" # Перебираем сигналы\n",
" for signal in reader.signals.values():\n",
" print(f\"Чтение сигнала: {signal.name}\")\n",
" \n",
" # Выводим все доступные атрибуты сигнала\n",
" print(\"Доступные атрибуты сигнала:\")\n",
" for attr in dir(signal):\n",
" if not attr.startswith('_'):\n",
" print(f\" - {attr}\")\n",
"\n",
" # Извлекаем данные\n",
" try:\n",
" signal_id = signal.signal_id # Идентификатор сигнала\n",
" data_length = signal.length # Длина данных сигнала\n",
"\n",
" # Проверяем, есть ли данные для сигнала\n",
" if data_length == 0:\n",
" print(f\"Сигнал '{signal.name}' не содержит данных.\")\n",
" continue\n",
"\n",
" # Читаем данные сигнала с помощью fsr\n",
" data = reader.fsr(signal_id, 0, data_length) # Чтение всех данных
сигнала\n",
"\n",
" # Сохраняем данные в CSV-файл\n",
" output_file = f\"{signal.name}_output.csv\"\n",
" with open(output_file, \"w\", newline='') as f: # Используем
newline=''\n",
" writer = csv.writer(f, delimiter=';') # Используем точку с
запятой как разделитель\n",
" writer.writerow([\"Index\", \"Value\"]) # Записываем
заголовки\n",
" for idx, value in enumerate(data):\n",
" writer.writerow([idx, value]) # Записываем индекс и
значение в отдельные ячейки\n",
" print(f\"Данные сигнала '{signal.name}' успешно сохранены в
{output_file}\")\n",
" except Exception as e:\n",
" print(f\"Ошибка при извлечении данных для сигнала '{signal.name}':
{e}\")\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.12.1"
}
},
"nbformat": 4,
"nbformat_minor": 2
}

You might also like