лаб5АСУ
.docxМИНОБРНАУКИ РОССИИ
«Челябинский государственный университет»
(ФГБОУ ВО «ЧелГУ»)
Физический факультет
Кафедра радиофизики и электроники
ЛАБОРАТОРНАЯ РАБОТА № 5
ТЕМА: Измерение параметров частотно-импульсного сигнала с использованием средств стандарта КАМАК
Выполнил: Агеев А.А.
Группа: ФФ-404
Принял: Михайлов С.Н.
Челябинск
2026
Цель работы: Необходимо измерить частоту следования прямоугольных импульсов с помощью счетчика ФК 5299 стандарта КАМАК
Общие сведения
Предлагается к рассмотрению автоматизированная система:
Задача: Необходимо разработать программный модуль, обеспечивающий измерение частоты следования прямоугольных импульсов. В качестве источника сигнала использовать генератор типа ГЗ-112\1. Вывод измеренной частоты должен осуществляться на экран терминала, а результаты счета импульсов – на регистр ФК449 КАМАК.
Блок-схема алгоритма:
Для автоматизации эксперимента используется крейт КАМАК – стандартизированная система сбора данных и управления, широко применяемая в измерительных комплексах АСУ. В состав экспериментальной установки входят:
Счётчик ФК‑5299 – модуль, выполняющий функции измерительного преобразователя: запуск счёта импульсов (F26), остановка (F24) и чтение результата (F2). Номер станции (адрес) модуля – 14, субадрес – 2.
Регистр ФК‑449 – модуль индикации, отображающий текущее значение счёта на светодиодной панели (бинарная индикация). Используется для визуального контроля. Номер станции – 20, субадрес – 0, функция записи – F16.
Крейт КАМАК – магистрально-модульная конструкция, обеспечивающая питание, обмен данными и управление модулями по стандартизированной шине.
Контроллер крейта на базе микропроцессора AT89C5131 и модуля USB‑UART DLP‑USB245M (FTDI), который организует связь с персональным компьютером через виртуальный COM-порт.
Управление модулями осуществляется посредством записи кода команды NAF (номер станции N, субадрес A, функция F) в COM-порт. Для упрощения разработки программного обеспечения используется библиотека libcamac.dll, предоставляющая функции высокого уровня для формирования команд и обмена данными.
В рамках данной работы предполагается, что объект управления (звено), включённое в контур АСУ, обладает инерционностью первого порядка. Тогда его передаточная функция имеет вид:
где:
k – коэффициент усиления (отношение выходной частоты к входной в установившемся режиме);
T – постоянная времени (характеризует инерционность объекта).
Экспериментальное определение k и T производится по результатам серии измерений частоты выходных импульсов при различных частотах входного сигнала. Полученные значения позволяют построить модель объекта, необходимую для синтеза регуляторов и анализа устойчивости замкнутой системы.
Программа:
unit MainUnit;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
Memo1: TMemo;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
hPort: THandle;
end;
var
Form1: TForm1;
implementation
// Импорт функций из libcamac.dll
function openCOMPort(const Name: PChar; var ComPort: THandle): integer; stdcall; external 'libcamac.dll';
function closeCOMPort(ComPort: THandle): integer; stdcall; external 'libcamac.dll';
function searchCOMPorts(Numbers: pointer; const Size: integer): integer; stdcall; external 'libcamac.dll';
procedure setCamacPort(Port: THandle); stdcall; external 'libcamac.dll';
procedure clearBuffer(); stdcall; external 'libcamac.dll';
procedure ActCam(); stdcall; external 'libcamac.dll';
procedure ActNAF(N, A, F: byte); stdcall; external 'libcamac.dll';
function ActR(): longword; stdcall; external 'libcamac.dll';
procedure ActW(Word: longword); stdcall; external 'libcamac.dll';
{$R *.dfm}
const
ST_COUNTER = 14; // Счетчик ФК-5299
ST_REG = 20; // Регистр ФК449
A_CNT = 2; // Субадрес счетчика
A_REG = 0; // Субадрес регистра
procedure TForm1.FormCreate(Sender: TObject);
var
ports: array[0..9] of Integer;
i, cnt: Integer;
begin
hPort := THandle(-1); // Вместо INVALID_HANDLE_VALUE
Edit1.Text := '10';
Memo1.Clear;
cnt := searchCOMPorts(@ports, SizeOf(ports));
for i := 0 to cnt-1 do
if openCOMPort(PChar('COM'+IntToStr(ports[i])), hPort) = 0 then
begin
setCamacPort(hPort);
Break;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
n, i: Integer;
val: Longword;
begin
if hPort = THandle(-1) then Exit;
n := StrToIntDef(Edit1.Text, 10);
if n <= 0 then Exit;
Memo1.Lines.Add('Частота (Гц):');
for i := 1 to n do
begin
clearBuffer;
ActNAF(ST_COUNTER, A_CNT, 26); ActCam; // Запуск
Sleep(1000);
clearBuffer;
ActNAF(ST_COUNTER, A_CNT, 24); ActCam; // Останов
clearBuffer;
ActNAF(ST_COUNTER, A_CNT, 2); ActCam; // Чтение
val := ActR;
clearBuffer;
ActW(val); // Данные для регистра
ActNAF(ST_REG, A_REG, 16); ActCam; // Запись в регистр
Memo1.Lines.Add(Format('%d: %d Гц', [i, val]));
Sleep(100);
end;
clearBuffer;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
if hPort <> THandle(-1) then
closeCOMPort(hPort);
end;
end.
Вывод: лабораторная работа позволяет практически ознакомиться с методами идентификации динамических звеньев АСУ с использованием стандартных средств автоматизации (система КАМАК), а также закрепить навыки разработки управляющих программ на языке высокого уровня (Delphi) для взаимодействия с измерительным оборудованием.
