Py Joulescope Record
Py Joulescope Record
"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
}