КТвП    

  Задание на практику ~ 
  Доступ к осциллографу ~ 
  Проверка доступа ~ 
  Язык SCPI ~ 
  Справка по gnuplot ~ 
  Справка по GD ~ 
  Справка по Xlib ~ 
  Справка по SDL ~ 
/Студентам/КТвП/Язык SCPI

Управление осциллографом GDS-840C при помощи SCPI

Осциллограф GDS-840C подключается к компьютеру посредством интерфейса RS223. Управление осциллографом с стороны программы, исполняющейся на этом компьютере, осуществляется при помощи командного языка SCPI. Аббревиатура SCPI означает "Стандартные команды для программируемых приборов" (Standard Commands for Programmable Instruments).

Синтаксикс SCPI

Команда SCPI состоит в общем случае из 3-х элементов:

Заголовок команды имеет иерархическую структуру, при этом он начинается с символа ':' (двоеточие); элементы заголовка команды также разделяются двоеточием. Некоторые команды, однако, начинаются с символа '*' (звездочка). Команды являются регистронезависимыми (см., однако, замечание к примерам команд ниже)

Некоторые команды требуют указания параметра. Параметр отделяется от заголовка команды пробелом. Имеется 4 типа параметров:

Замечание: в руководстве программиста эти типы обозначаются (см. стр. 15 в этом руководстве) как 'BOOLEAN', NR1, NR2 и NR3, соответственно, при этом NRf означает любой числовой тип.

В качестве признака конца команды может быть использованы (в программах на Си удобно использовать вариант 2, то есть LF):

Команды можно объединять, то есть посылать за один раз (до посылки признака конца команды) более одной команды, при этом в качестве разделителя команд служит символ ';'(точка с запятой).

Примеры команд управления осциллографом:

	// получить идентификационную подпись 
	*idn?
	// на эту команду осциллограф
	// должен ответить строчкой 
	// "GW,GDS-840C,EE142162,V2.02"

	// включить курсоры по оси X
	:CURSor:XDISPlay 1
	
	// измерить длительность ниспадающего 
	// фронта сигнала
	:MEASure:FALL?
	
	// включить систему запуска
	:RUN
	
	// выключить систему запуска
	:STOP

	// запросить величину уровня сигнала 
	// для системы запуска
	:TRIGger:LEVel?
	
	// установить величину уровня сигнала 
	// для системы запуска (в вольтах)
	:TRIGger:LEVel 0.1

Обратите внимание, что начальные части элементов заголовка команд написаны большими буквами. Эти начальные части обязательны, а остальное можно отбросить. Напомним, что регистр не имеет значения. Таким образом, следующие варианты написания команды, например, :TRIGger:LEVel?, являются эквивалентными:

	:TRIGger:LEVel?
	:TRIG:LEV?
	:trig:lev?
	:tRiGgE:lEVe?

Полное описание команд для управления осциллографом GDS-840C см. в руководстве программиста

Считывание осциллограммы

Для чтения осциллограммы предназначены команды

:ACQuire1:POINt
:ACQuire2:POINt

В ответ на первую осциллограф выдает осциллограмму с первого канала, в ответ на вторую - со второго. Осциллограмма предваряется заголовком, размер которого составляет 14 байт.

Осциллограмма состоит из 500 отсчетов, каждый отсчет имеет размер 2 байта. Первым передается старший байт каждого отсчета (big-endian), поэтому на машинах с порядком байт little-endian нужно будет переставить байты в каждом отсчете.

Из 2-х предыдущих абзацев понятно, что полное количество байт, которое должно придти от осциллографа в ответ на команду "прочитать осциллограмму", равно 1014.

Заголовок осциллограммы имеет следующую структуру:

Номер поля Смещение Размер Описание
1 0 1 Содержит символ '#'
21 1 Содержит символ '4' (количество цифр в следующем поле, размер данных)
32 4 Содержит символы '1008' (размер данных в байтах, 1000 байт осциллограмма плюс оставшаяся часть заголовка)
46 4 Число в формате float, содержащее масштаб по оси времени (?)
510 1 Номер канала в двоичной форме, 1 - первый канал, 2 - второй канал
611 3 Число отсчетов в осциллограмме, всегда 500 (0x0001F4)

На языке Си этот заголовок можно представить следующим образом:

	struct osc_hdr {
		char octotorp;
		char four;
		char len[4];
		float tdiv;
		char chan;
		char cnt[3];
	} __attribute__((packed));

Обратите внимание на '__attribute__((packed))'! Если этот атрибут не указать, то размер структуры, скорее всего, будет неправильный (16 байт вместо нужных 14-ти) из-за того, что компиляторы в целях оптимизации доступа к оперативной памяти выравнивают поля структуры на размер машинного слова (если явно не указано не делать этого).

Единицей измерения в отсчетах, составляющих осциллограмму, является ПИКСЕЛ. Каждая клетка на экране осциллографа имеет размер 25x25 пикселов. Если, например, вы наблюдаете на экране осциллографа прямоугольный сигнал размахом в 2 клетки, то отсчеты в осцилллограмме (соответствующие верхней "полке" сигнала) будут равны 50 единицам плюс-минус шумы. Для перевода этой величины в вольты нужно использовать величину масштаба по оси напряжений, которая показывает, сколько вольт приходится на клетку (деление).

При считывании осциллограммы нужно учитывать то, что возврат из системного вызова read() может произойти раньше, чем будет прочитано полное количество байт, указанное 3-им параметром этого вызова. Если такое произошло, нужно повторить попытку чтения:

Можно поступить по-другому: перед тем как делать чтение, убедиться в том, что данных имеется ровно столько, сколько должно быть (с помощью функции ioctl(FIONREAD)), и потом считать их за 1 вызов read():

Дата последней модификации: 2013-12-06


/Студентам/КТвП/Язык SCPI

Содержимое данного сайта может быть использовано кем угодно, когда угодно, как угодно и для каких угодно целей. Автор сайта не несёт абсолютно никакой ответственности за землетрясения, наводнения, финансовые кризисы, глобальные потепления/похолодания, разбитые тарелки, зуд/онемение в левой/правой пятке читателя, эпидемии/пандемии свинячьего/птичьего/тараканьего и иных гриппов, а также за прочие негативные, равно как и позитивные, последствия, вызванные прямым или косвенным использованием материалов данного сайта кем бы то ни было, включая самого автора. При копировании/цитировании материалов данного сайта любым технически возможным в настоящее время способом, а также способом, могущим стать возможным в будущем, указание (либо неуказание) ссылки на первоисточник лежит, блин, тяжким грузом на совести копирующего/цитирующего.

Valid HTML 4.0 Strict Valid CSS!