Файл WFM чем открыть

Обновлено: 21.11.2024

Быстрый и некрасивый экспорт данных WFM для Rigol DS2072A

В работе использую осциллограф Rigol DS2072A. Это довольно функциональный маленький двухканальный цифровой прицел, который в основном выполняет ту работу, для которой он мне нужен. Однако время от времени он может глючить, и с опытом я научился избегать некоторых его функций. Как, например, инструмент для создания снимков экрана, который иногда, но не всегда, захватывает вполне правдоподобный PNG, который на самом деле содержит что-то отличное от того, что отображалось на физическом экране в то время. Я не шучу — я думаю, что тут какая-то проблема с двойной буферизацией.

Недавно я использовал его для захвата некоторых сигналов, которые я хотел обработать на своем компьютере. В большинстве современных цифровых осциллографов достаточно просто экспортировать трассировку в файл CSV на USB-накопителе. DS2072A действительно имеет эту функцию, однако вскоре я обнаружил, что она невыносимо медленная. Экспорт 1,4 млн отсчетов занял почти 6 минут. Я предполагаю, что экспорт полного 14-мегапиксельного захвата займет час — у меня никогда не хватало терпения, чтобы действительно дождаться его завершения, и индикатор прогресса действительно оставался привязанным к 0%, пока я в отчаянии не сбросил область видимости. Я планировал сделать много захватов, так что этот подход явно непригоден.

К счастью, есть также вариант двоичного экспорта, который создает файлы WFM. Экспорт в них намного быстрее, чем в текстовый формат CSV, но, с другой стороны, он создает двоичные BLOB-объекты, которые, по-видимому, может прочитать только сама область видимости. Я нашел инструмент pyRigolWFM с открытым исходным кодом для чтения файлов WFM, но, к сожалению, он поддерживает только серию DS1000 и не работает с файлами, созданными DS2072A. Есть еще конвертер Rigol WFM, но опять же он работает только с сериями DS4000 и DS6000, так что мне и с ним не повезло.

Я заметил, что размеры файлов WFM в байтах были аналогичны количеству семплов, которые они должны были содержать, поэтому я предположил, что извлечь из них необработанные данные будет не так уж сложно — они не могут быть сжаты, и есть только столько способов вы можете перетасовать байты. Единственная странность заключалась в том, что файлы, содержащие одинаковое количество сэмплов, были немного разного размера. В комментарии к системе отслеживания проблем pyRigolWFM упоминается, что файлы WFM представляют собой более или менее дамп памяти области видимости, что дало мне надежду, что их формат не очень сложен.

Повозившись с блокнотом Jupyter, я придумал следующий код, который извлекал нужные мне данные из файлов WFM в массив Numpy:

Я также не удосужился полностью понять структуру файла. Приведенный выше код работал для экспорта, содержащего только канал 1. Во всех моих файлах сэмплы чередовались на двух страницах памяти: четные сэмплы были на одной странице, нечетные — на другой. Я не уверен, что это всегда так, и код явно не пытается охватить какой-либо другой макет.

Вот график данных, которые я извлек для трассировки, показанной на фотографии выше:

Я сравнил данные трассировки, извлеченные из файла WFM, с данными из файла CSV, созданного собственной функцией медленного экспорта CSV осциллографа. Различия между ними порядка 10-15. Это, скорее всего, связано с точностью с плавающей запятой. Для всех практических целей значения из обоих экспортов идентичны:

В любом случае, я надеюсь, что это будет полезно всем, кому нужно извлечь данные из этих областей. Просто имейте в виду, что это лишь минимальное жизнеспособное решение для того, что мне нужно было сделать - код потребуется дальнейшего взлома, если вы примените его к своим собственным файлам.

Комментарии

Хорошая работа. Это единственное, что я видел о сигналах DS2000!

Не могли бы вы предоставить несколько тестовых файлов для проекта RigolWFM, чтобы обеспечить полную поддержку этой серии DS2000?

Привет, Скотт. Спасибо за вашу работу. С вашим RigolWFM я еще не сталкивался. Я был бы рад предоставить несколько тестовых файлов. В данный момент у меня нет с собой DS2072A, но я, вероятно, смогу сделать это на следующей неделе. Прикрепить файлы к этому выпуску?

Да, добавление файлов к задаче было бы идеальным. Спасибо.

Скотт, я не забыл об этом.Из-за эпидемии лаборатория, где у меня есть этот прицел, закрыта, и я не был там на этой неделе. Я сделаю для вас несколько пробных снимков при первой же возможности.

Вы здесь, потому что у вас есть файл с расширением .wfm. Файлы с расширением .wfm могут запускаться только определенными приложениями. Возможно, файлы .wfm представляют собой файлы данных, а не документы или медиафайлы, что означает, что они вообще не предназначены для просмотра.

Существует два распространенных типа файлов, связанных с расширением .wfm. Во-первых, он известен как Tektronix Waveform Data File, потому что файлы, к которым прикреплено это расширение файла, представляют собой файлы данных, созданные с использованием осциллографов и логических анализаторов Tektronix. Эта программа позволяет пользователям выполнять тесты электронных схем и напряжения сигналов. Файлы .wfm, созданные этой программой, содержат информацию о сигналах, в которых эта информация может отображаться на устройстве. Эти файлы полезны для создания графиков зависимости времени от напряжения. Программное обеспечение Wavestart может открывать эти файлы, а с помощью Tektronix Windows Oscilloscope WFM Converte эти файлы можно преобразовать в другой формат. Следующим приложением, использующим расширение файла .wfm, является dBase. Это программа, которая позволяет пользователям управлять базой данных. Файлы .wfm, созданные этим программным обеспечением, известны как формы и используются для ввода и изменения данных с помощью программы.

Запустите файл .wfm или любой другой файл на своем ПК, дважды щелкнув его. Если ваши ассоциации файлов настроены правильно, приложение, предназначенное для открытия вашего файла .wfm, откроет его. Возможно, вам потребуется загрузить или приобрести правильное приложение. Также возможно, что на вашем ПК установлено правильное приложение, но файлы .wfm еще не связаны с ним. В этом случае, когда вы пытаетесь открыть файл .wfm, вы можете сообщить Windows, какое приложение подходит для этого файла. С этого момента при открытии файла .wfm будет открываться правильное приложение. Нажмите здесь, чтобы исправить ошибки сопоставления файлов .wfm

Конвертер WFM осциллографа Tektronix для Windows

Tektronix WaveStar

Tektronix Wavestar является одним из продуктов Tektronix. Программное обеспечение, предназначенное для анализа, управления, захвата и документирования данных, имеет возможность захвата данных и измерений сигналов, создания, изменения и передачи телекоммуникационных масок. WaveStar — это программное обеспечение Microsoft Windows, которое может передавать данные измерений на рабочий стол Windows. Он также может получать доступ, устанавливать, манипулировать и перемещать файлы инструментов. Wavestar регистрирует измерения, поступающие от одного или нескольких устройств, а также может выполнять исследования форм сигналов мощности. Он позволяет дистанционно управлять измерениями и настройками прибора и хорошо сочетается с осциллографами Tektronix Open Windows. Также включен инструмент для чтения waveStar, предназначенный для обмена информацией. Для сбора данных он работает, настраивая связь с оборудованием с помощью WaveStar Instrument Manager, после чего проводник отобразит инструменты и выдаст их свойства. Чтобы зафиксировать измерения, выберите свойство, нажмите и перетащите его на лист приложения, где начнется анализ.

Конвертер сигналов — это бесплатная служебная программа, которая преобразует файлы осциллографов Tektronix в формате .WFM в форматы, распространенные в отрасли. Форматы, генерируемые этой версией преобразователя сигналов, включают текстовые файлы ASCII с табличным интервалом, файлы значений, разделенных запятыми (CSV), и файлы MATHCAD и MATLAB (также файлы ASCII с расширением .dat).
Tektronix, Inc. не дает никаких гарантий в отношении обновлений или поддержки этой бесплатной утилиты. Tektronix, Inc. не несет ответственности за способ использования этой утилиты или любые результаты, которые могут быть получены при использовании этой утилиты. Используйте по своему усмотрению. Для корректной работы и получения результатов для новых версий встроенного ПО для поддерживаемых осциллографов может потребоваться более новая версия программы Waveform Converter, чем имеется в настоящее время в этом выпуске.

<Р> Это программное обеспечение относится к: TDS7054, TDS7404, TDS7104, TDS6604, TDS7154, CSA7154, CSA7404, TDS6404, CSA7404B, TDS7154B, TDS7254B, TDS7404B, TDS7704B, TDS5054B, TDS5104B, TDS5032B, TDS5052B, TDS5034B, TDS6804B, TDS6604B, TDS6154C, TDS6124C, DPO7054, DPO7104, DPO7254, DPO70404, DPO70604, DPO70804, DSA70404, DSA70604, DSA70804, DPO7354, DPO71254, DPO71604, DPO72004, DSA71254, DSA71604, DSAp7>

Политика загрузки программного обеспечения Tektronix

Чтобы соответствовать постановлению правительства США о соблюдении экспортных требований, политика загрузки программного обеспечения Tektronix требует, чтобы мы просим вас предоставить следующую информацию, если вы загружаете программное обеспечение с веб-сайта Tektronix,

  • Если информация в вашем профиле неполная, вам будет предложено заполнить свой профиль, указав свое имя, адрес и организацию.
  • Если в вашем профиле указана указанная выше информация, но есть какая-либо информация не на английском языке, вам также будет предложено указать свое имя, адрес и название организации также простыми английскими буквами.

После того, как вы соответствуете вышеуказанным критериям, ваш запрос на загрузку программного обеспечения будет рассмотрен и одобрен, и вы сможете загрузить программное обеспечение.

Иногда процесс проверки может занять до одного рабочего дня, но вы будете проинформированы, как только проверка будет завершена.

Спасибо за понимание и терпение.

СОГЛАШЕНИЕ О ЗАГРУЗКЕ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ: Загружая, вы соглашаетесь с условиями соглашения. Нажмите, чтобы прочитать подробнее

Загрузка бесплатного программного обеспечения

Не все бесплатное программное обеспечение проходит стандартный контроль качества или производственные процессы Tektronix, но предоставляется пользователям в качестве приспособления для ответа на запросы пользователей. Бесплатное программное обеспечение предоставляется по настоящему документу на условиях «как есть» без каких-либо заверений или гарантий. Tektronix отказывается от всех гарантий, явных или подразумеваемых, включая гарантии товарного состояния, пригодности для определенной цели и ненарушения прав интеллектуальной собственности. Ни при каких обстоятельствах Tektronix не несет ответственности за любые прямые, непрямые, фактические, случайные или косвенные убытки, каким-либо образом возникающие в результате использования бесплатного программного обеспечения или связанные с ним.

ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ Информация о программе GPL или LGPL: Это программное обеспечение может содержать одну или несколько программ под лицензией GPL или LGPL. Нажмите, чтобы узнать подробности.

Данное программное обеспечение может содержать одну или несколько программ под лицензией GPL или LGPL.

Для программ под лицензией «Стандартная общественная лицензия GNU (GPL) или Стандартная общественная лицензия ограниченного применения GNU (LGPL)» доступны полные соответствующие исходные коды. Вы можете заказать у нас полную машиночитаемую копию исходного кода в течение трех (3) лет после загрузки или получения программного обеспечения, отправив письменный запрос по адресу:

Главный советник по интеллектуальной собственности
Tektronix, Inc.
MS/50 LAW
14150 SW Карл Браун Д-р
Beaverton, OR 97077

Это предложение действительно для всех, кто получил эту информацию.

Ваш запрос должен включать: название продукта, (ii) название вашей (компании) и (iii) обратный почтовый адрес и адрес электронной почты (при наличии).

Обратите внимание, что мы можем взимать с вас плату для покрытия расходов на выполнение этого распространения.

Мы – компания, занимающаяся анализом результатов, стремящаяся к эффективности и руководствующаяся возможностями. Компания Tektronix разрабатывает и производит решения для испытаний и измерений, которые преодолевают барьеры сложности и ускоряют глобальные инновации.

Я рекомендую вам загрузить прикрепленный файл, а не копировать этот код, потому что у меня возникли проблемы с форматированием URL-адресов в комментариях.

// Загрузчик файлов для файлов Tektronix ISF
// Файл Tektronix ISF представляет собой содержимое того, что осциллограф Tek отправляет в ответ
// на WAVFrm? команда. См. https://www.tek.com/support/faqs/what-format-isf-file
//
// Файл Tek ISF отличается от файла Tek WFM. Существует загрузчик файлов Tek WFM.
// См. https://www.wavemetrics.com/project/LoadTekWaveform.
//
// Рекомендуется называть файлы Tek ISF с расширением ".isf", чтобы
// было понятно, что это за файл.

// Чтобы определить длину заголовка, нужно найти ключевое слово ":CURVE". Он имеет следующий формат:
// ":CURVE " .eg, ":CURVE 41000"
// где представляет количество цифр следующее число и представляет количество
/ / образцы двоичных данных, которые следуют. В данном случае «4» — это количество цифр в «1000», а 1000 — это количество образцов.

static Constant kHeaderLength = 282 // Длина заголовка в байтах. Эмпирически определено.
статическая константа kWaveDataType = 2 // с плавающей запятой одинарной точности

// LoadTekISFFile(pathName, fileName, createTable, createGraph)
//
// pathName — имя символического пути Igor или "".
// имя_файла может быть одним из следующих:
// Имя файла в папке, обозначенной путем.
// Частичный путь от папки, указанной pathName, до загружаемого файла.
// Полный путь к загружаемому файлу.
// "" для открытия диалогового окна открытия файла.

// Добавляем элемент в подменю Игоря «Загрузить волны» (меню «Данные»)
Меню «Загрузить волны»
«Загрузить файл Tek ISF». , LoadTekISFFileMenuItem ( )
«Загрузить все Tek ISF Файлы в папке. " , LoadAllTekISFFiles ("" , "" , 0 , 0 )
Конец

Function / S StripDoubleQuotes ( str )
String str // Строка, начинающаяся и заканчивающаяся двойными кавычками

if (CmpStr (str [0], " \" " ) ! = 0 )
return str // Строка не начинается с двойных кавычек
endif

Переменная len = strlen ( str )
str = str [ 1 ,len- 2 ]
return str
End

Структура TekISFHeaderInfo
Переменная кодировка // 0 = двоичная. -1 = неизвестно. В настоящее время единственная известная мне кодировка — двоичная. Из ключевого слова ENCDG.
Переменная byteOrder // 0 = обратный порядок байтов, 1 = прямой порядок байтов. Из ключевого слова BYT_OR.
Variable dataType // Возможные значения см. в WaveType. Из ключевых слов BIT_NR и BN_FMT.
Переменная numPoints // Количество точек в сигнале. Из ключевого слова NR_PT.
String xUnits // Из ключевого слова XUNIT.
Переменная x0 // Из ключевого слова XZERO.
Переменная dx // Из ключевого слова XINCR.
String yUnits // Из ключевого слова YUNIT.
Переменная yOffset // Из ключевого слова YOFF.
Переменная yZero // Из ключевого слова YZERO.
Переменная yMultiplier // Из ключевого слова YMULT.
Конечная структура

Функция ExtractISFHeaderInfo ( refNum, headerInfo, quiet )
Переменная refNum // Номер ссылки на файл
STRUCT TekISFHeaderInfo & headerInfo
Переменная quiet // 0 - вывести информацию об ошибках

Переменная результата = 0

Переменная originalPos
FStatus refNum
originalPos = V_filePos

// Чтение строки заголовка
String headerStr = ""
Переменная headerStrLength = kHeaderLength
FSetPos refNum, 0
headerStr = PadString ( headerStr, kHeaderLength, 0x20 )
FBinRead refNum, headerStr
FSetPos refNum, originalPos

// Разбираем строку заголовка
String str
str = StringByKey ("ENCDG", headerStr, " ")
strswitch ( str )
case "BIN" :
headerInfo.encoding = 0
break
по умолчанию:
headerInfo.encoding = - 1 // Неизвестная кодировка,
результат -= 1
break
endswitch

str = StringByKey ("BYT_OR", headerStr, " ")
strswitch (str)
case "MSB":
headerInfo.byteOrder = 0
break
case "LSB":
headerInfo.byteOrder = 1
break
по умолчанию:
headerInfo.byteOrder = - 1 // Неизвестный порядок байтов
result -= 1 < br />разорвать
концевой переключатель

headerInfo.numPoints = NumberByKey ("NR_PT", headerStr, " " )

headerInfo.xUnits = StripDoubleQuotes (StringByKey ("XUNIT", headerStr, " " ))
headerInfo.x0 = NumberByKey ("XZERO", headerStr, " " )
headerInfo.dx = NumberByKey ( "XINCR" , headerStr, " " )

headerInfo.yUnits = StripDoubleQuotes ( StringByKey ("ЮНИТ" , headerStr, " " ) )
headerInfo.yOffset = NumberByKey ("YOFF" , headerStr, " " )
headerInfo.yZero = NumberByKey ( "YZERO", headerStr, " " )
headerInfo.yMultiplier = NumberByKey ("YMULT", headerStr, " " )

Переменная numBitsPerPoint = NumberByKey ("BIT_NR", headerStr, " ")
String binaryFormat = StringByKey ("BN_FMT", headerStr, " ")
strswitch (binaryFormat)
case "RI " : // Предположительно "действительное целое число"
switch ( numBitsPerPoint )
case 8 :
headerInfo.dataType = 8 // 8-битное целое число со знаком
break

case 16 :
headerInfo.dataType = 16 // 16-битное целое число со знаком
break

case 32 :
headerInfo.dataType = 32 // 32-битное целое число со знаком
break

по умолчанию:
headerInfo.dataType = - 1 // Неизвестный тип
result -= 1
break
endswitch
break

по умолчанию:
headerInfo.dataType = - 1 // Непонятен тип данных
result -= 1
break
endswitch

вернуть результат
Конец

// LoadTekISFFileDialog(createTable, createGraph)
// Отображает диалоговое окно, в котором пользователь может вводить параметры.
// Все параметры функционируют как в качестве входных данных для предварительной установки значений диалога,
//, так и в качестве выходных данных для возврата значений в вызывающую процедуру.
// Результатом функции является 0, если OK или -1, если отменить.
Функция LoadTekISFFileDialog ( createTable, createGraph )
Переменная и createTable // Ввод и вывод.
Переменная и createGraph // Ввод и вывод.

if ( ( createTable 1 ) || ( createTable > 2 ))
createTable = 1
endif
if ( ( createGraph 1 ) || ( createGraph > 2 ))
createGraph = 1
endif

// Это необходимо, потому что вы не можете передать параметр & в Prompt.
Переменная createTable2 = createTable
Переменная createGraph2 = createGraph

Подсказка createTable2, «Создать таблицу», всплывающее окно «Да;Нет»
Подсказка createGraph2, «Создать график», всплывающее окно «Да;Нет»
DoPrompt «Загрузить файл Tek ISF», createTable2, createGraph2
if ( V_Flag ! = 0 )
return - 1 // Пользователь отменен.
конец, если

createTable = createTable2
createGraph = createGraph2

Функция LoadTekISFFile ( pathName, fileName, createTable, createGraph, quiet, newWaveName )
String pathName // Имя символического пути Igor или "" для диалога.
String fileName // имя файла, частичный путь и имя файла или полный путь или "" для диалога.
Переменная createTable // 1 = Да, 2 = Нет, 0 для диалога.
Переменная createGraph // 1 = Да, 2 = Нет, 0 для диалога.
Переменная тишина // 0 = печатать диагностические сообщения и сообщения об ошибках, 1 = печатать только сообщения об ошибках, 2 = не печатать диагностические сообщения или сообщения об ошибках
String & newWaveName // Вывод: имя созданной волны.

if ( ( createTable== 0 ) || ( createGraph == 0 ) )
err = LoadTekISFFileDialog ( createTable, createGraph )
if ( err ! = 0 )
вернуть ошибку < br />конец, если
конец, если

// Это выводит диалоговое окно, если pathName и fileName не указывают файл.
Строка сообщения = "Выберите файл Tek ISF"
Переменная refNum
Открыть / R / Z = 2 / P = $pathName / T = ". " / M=message refNum as fileName / // Флаг T представляет «Все файлы» в диалоговом окне «Открыть файл».

// Сохраняем выходные данные Open в надежном месте.
err = V_Flag
String fullPath = S_fileName

if ( err ! = 0 )
возврат err // -1 означает, что пользователь отменен.
конец, если

// Загружаем информацию заголовка
STRUCT TekISFHeaderInfo headerInfo
if ( ExtractISFHeaderInfo ( refNum, headerInfo, тихий ! = 2 ) ! = 0 )
if ( тихий ! = 2 )
Вывести "Ошибка при загрузке заголовка файла."
endif
Закрыть refNum
return - 1
endif

switch ( headerInfo.encoding )
case 0 : // Binary
break
по умолчанию:
if ( quiet ! = 2 )
Print "Кодировка файла неизвестно. Поддерживается только двоичное кодирование."
endif
возврат - 1
endswitch

if (quiet == 0)
Printf "Загрузка данных Tek ISF из \" %s \" \r ", fullPath
endif

GBLoadWave / B= (headInfo.byteOrder) / A=tekWave / T = < headerInfo.dataType,kWaveDataType >/ S = (kHeaderLength) / W= 1 / U= (headInfo.numPoints) / Q fullPath
if ( V_flag == 0 )
if ( quiet ! = 2 )
Print "Ошибка при загрузке раздела бинарных данных файла."
endif
возврат - 1
endif
newWaveName = StringFromList ( 0 , S_waveNames )
Wave w = $newWaveName

SetScale / P x , headerInfo.x0, headerInfo.dx, "" +headerInfo.xUnits, w
SetScale d, 0 , 0 , "" +headerInfo.yUnits, w

// Я не знаю, что такое headerInfo.yZero (ключевое слово YZERO).

w = ( w - headerInfo.yOffset ) * headerInfo.yMultiplier

if (quiet == 0)
Printf "Создана волна %s, %d точек. \r ", newWaveName, numppts (w)
endif

if ( createTable == 1 )
Изменить w.id
ModifyTable format [ 1 ] = 3 ,digits [ 1 ] = 9 // Отображать время в подходящем формате.
endif
if ( createGraph == 1 )
Отобразить
endif

return 0 // Ноль означает отсутствие ошибки.
Конец

Функция LoadTekISFFileMenuItem ( )
String newWaveName
LoadTekISFFile ("" , "" , 1 , 1 , 0 , newWaveName )
End

// LoadAllTekISFFilesDialog(extension, createTable, createGraph)
// Отображает диалоговое окно, в котором пользователь может вводить параметры.
// Все параметры функционируют как в качестве входных данных для предварительной установки значений диалога,
//, так и в качестве выходных данных для возврата значений в вызывающую процедуру.
// Результатом функции является 0, если OK или -1, если отменить.
Функция LoadAllTekISFFilesDialog (расширение, createTable, createGraph)
Строка и расширение // Ввод и вывод
Переменная и createTable // Ввод и вывод.
Переменная и createGraph // Ввод и вывод.

if ( CmpStr (расширение, ".isf" ) ! = 0 && CmpStr (расширение, ". " ) ! = 0 )
extension = ".isf"
endif
if ( ( createTable 1 ) || ( createTable > 2 ))
createTable = 1
endif
if ( ( createGraph 1 ) || ( createGraph > 2 ))
createGraph = 1
конец, если

// Это необходимо, потому что вы не можете передать параметр & в Prompt.
String extension2 = extension
Переменная createTable2 = createTable
Переменная createGraph2 = createGraph

Подсказка extension2, "Расширение имени файла Tek ISF", всплывающее окно ".isf;Любое расширение"
Подсказка createTable2, "Создать таблицу", всплывающее окно "Да;Нет"
Подсказка createGraph2, "Создать график ", всплывающее окно "Да; Нет"
DoPrompt "Загрузить все файлы Tek ISF", extension2, createTable2, createGraph2
if (V_Flag ! = 0)
return - 1 // Пользователь отменен.
конец, если

if ( CmpStr ( extension2, "Любое расширение" ) == 0 )
extension2 = "."
endif

extension = extension2
createTable = createTable2
createGraph = createGraph2

Функция LoadAllTekISFFiles ( pathName, extension, createTable, createGraph )
String pathName // Имя символической папки Igor, созданной с помощью Misc->NewPath
Расширение String // например, ".isf". Проходить "." для любого расширения. Передайте "" для диалога.
Переменная createTable // 1 = Да, 2 = Нет, 0 для диалога.
Переменная createGraph // 1 = Да, 2 = Нет, 0 для диалога .

if ( CmpStr (расширение, "" ) == 0 || createTable 1 || createTable > 2 || createGraph 1 || createGraph > 2 )
if ( LoadAllTekISFFilesDialog ( extension, createTable, createGraph ) ! = 0 )
return - 1 // Пользователь отменен.
конец, если
конец, если

if ( strlen ( pathName ) == 0 )
Строковое сообщение

if ( CmpStr ( extension, ". " ) == 0 )
message = "Выберите каталог, содержащий файлы Tek ISF с любым расширением"
else
сообщение sprintf, "Выберите каталог, содержащий файлы Tek ISF с расширением %s", расширение
endif

NewPath / O / M=message TekISFDataPath // Это отображает диалоговое окно, в котором вы можете выбрать папку,
if ( V_flag ! = 0 )
вернуть V_flag // -1 означает, что пользователь отменил
/>endif
pathName = "TekISFDataPath"
endif

Переменная ошибка = 0

String newWaveName
String fileName
Variable i = 0
do
fileName = IndexedFile ($pathName, i, extension)
if (strlen (fileName) = = 0 )
break // Нет больше файлов
endif

err = LoadTekISFFile ( pathName, fileName, 2 , 2 , 1 , newWaveName )
if ( err ! = 0 )
возврат err
endif

if ( createTable == 1 )
if ( i == 0 )
Изменить $newWaveName
else
AppendToTable $newWaveName
endif
endif

if ( createGraph == 1 )
if ( i == 0 )
Отобразить $newWaveName
else
AppendToGraph $newWaveName
endif
endif

Читайте также: