• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Помогите с программой

  • Автор темы Автор темы JCHacker
  • Дата начала Дата начала

JCHacker

Ученик
Почётный участник
Регистрация
23 Июл 2008
Сообщения
584
Реакции
6
Баллы
0
Помогите с программой

Нужно написать программу для измерения двух величин X, Y.
X - управляемая величина, кутовое перемещение, 0...360 градусов
Y - контролируемая(измеряемая) величина, давление, 0...250 Па
N - объем выборки, 128
вид функции для вычисления Dy - несмещенные оценки дисперсии измеряемой Y величины
102304bdd33f08b5dc.jpg

частота опроса = 14000 Гц

Очень благодарен за внимание. Надеюсь на вашу помощь.
 
Пожалуйста, еще раз и, для разнообразия, с начала. Какой язык? Откуда берутся X и Y? Снимаются с каких-то датчиков? Тогда как организован ввод? В общем, опишите задачу так, чтобы стало понятно.
 
Для получения информации об объекте, контролируемые, в схеме использован датчик давления и датчик углового перемещения.
В данном задании управляемой величиной является угловое перемещения и контролируемой - давление. Управляемая величина в виде аналогового сигнала после прохождения по линии связи поступает на АЦП одновременно фильтрует этот сигнал и преобразует в цифровой лишая ошибок при прохождении линии связи. АЦП выполняет аналого-цифровое преобразование, после чего сигнал в цифровой форме поступает на ЭВМ, где обрабатывается с определенной программой.
Контролируемая величина, натходить с датчика углового перемещения, аналогично проходя по линии связи через преобразователи и АЦП, поступает на ЭВМ. Одновременно контролируемая величина, проходя по линии связи перед АЦП поступает на компаратор. На компараторе сравниваются две напряжения: сигнал с датчика и сигнал с задавача. И чем больше различие между этими напряжениями, тем интенсивнее воздействие оказывает система по линии обратной связи на исполнительный элемент, в свою очередь нормализует работу объекта управления. То есть данная система отслеживает несоответствия между фактическим параметром работы и желанным.
Ссылка удалена
- ОУ (объект управления);
- Дт (датчик давления);
- Дп (датчик углового перемещения.
- ЛЗ (линия связи);
- ПСН (преобразователь «ток-напряжение»);
- НП (нормирующий преобразователь.
- АЦП (аналого-цифровой перетвоювач.
- ЕОМ (электронно-вычислительная машина);
- ЦАП (цифро-аналоговый перетвоювач.
- К (компаратор);
- ПН (усилитель напряжения);
- ПП (усилитель мощности);
- ВП (исполнительное устройство).
 
Последнее редактирование модератором:
Начало хорошее. Начинает проясняться, несмотря на украинско-русскую терминологически-аббревиатурную мешанину. Осталось только выяснить, что понимается под ЭВМ (ЕОМ) - обычный компьютер или технологический микропроцессор, на каком языке это дело программируется (ассемблер? спецкоды?), куда записывается поступающая с АЦП информация (ячейка, регистр?) и т.п. Впрочем, сразу оговорюсь - я вряд ли сумею Вам здесь помочь. Увы, не специалист. Хотя подобные задачи решать приходилось. Но 14 кГц выборка - ой-ой-ой! Тут Паскалем, увы, не обойтись - слишком медленный.
 
Спасибо и за внимание. ) ЕОМ - обычный компьютер. Програмирование на любом языке програмирования. Абсолютно любом. Информация просто поступает после преобразования на ЕОМ.
 
Вот пример программы:
Код:
#include <iostream>
#include <math.h>
using std::cout;
using std::endl;
int main()
{
const int n=128;
int i, j;
float x[n];
       double M, D;
 M=D=0;
FILE *kv;
kv=fopen("masyv.txt","r");
for (i=0; i<n; i++)
{
fscanf(kv, "%f\n", &x[i]);	//зчитування значень і обчислення
M+=(x[i])/n;			          //математичного сподівання
}
fclose(kv);
for (j=0; j<n; j++)		          //обчислення
D+=pow((x[i]-M),2)/n;	          //дисперсії
cout<<"Duspersia:  "<<D<<endl;
return 0;
}
 
Програмна реалізація на мові AVRPascal
Код:
program V05;
{$NOSHADOW}
{ $W+ Warnings}            {Warnings off}
Device = mega103, VCC=5;
Import SysTick, Disp7sPort;
From System Import LongWord, LongInt, Float;
Define
        ProcClock   = 12000000;        {Hertz}
        SysTick     = 10;             {msec}
        StackSize   = $0064, iData;
        FrameSize   = $0064, iData;
        Disp7sPort  = PortB, Mux, 0;  {multiplexed, Portbit}
        DispMode    = Wrap;
        DispDigits  = 3, iData;

Implementation
{$IDATA}
{--------------------------------------------------------------}
{ Type Declarations }
type
{--------------------------------------------------------------}
{ Const Declarations }
const n=128;
{--------------------------------------------------------------}
{ Var Declarations }
{$IDATA}
var x:array[0..n] of byte; // масив змінних вибірки x
    i:integer;
   kx,mx,rx,dx:float;
{--------------------------------------------------------------}
{ functions }
{--------------------------------------------------------------}
{ Main Program }
{$IDATA}
begin
  EnableInts;
  loop
  write(dispout,#10+'read');  //виводимо повідомленн про зчитування масиву
   for i:=1 to n do
       x[i]:=PORTB; // зчитуємо масив з порта B
       udelay(2); // 1/32000=31мкс 31/10-1=2 - затримка
   endfor;
   kx:=0;
   for i:=1 to n do
       kx:=kx+float(x[i]); //обчислюємо суму елементів вибірки
   endfor;
   mx:=kx/n; //знаходимо математичне сподівання
   for i:=1 to n do
       rx:=rx+pow(float(x[i])-mx,2); // знаходимо суму квадрату різниця i-ого значення вибірки та математичного сподівання
   endfor;
   dx:=rx/(n-1); // знаходимо незміщену вибіркову дисперсію
   dispclear;
   write(dispout,#10+floattostr(dx)); // виводимо результат обробки масиву на семисегментні індикатори
   mdelay(5000); // організовуємо затримку 5с
  endloop;
end V05
 
Мне нужно знать:
1) Какой контроллер.
2) Его тактовая частота.
3) Принципиальныя схема.
4) В каком виде поступают сигналы в устройство.
5) Типы датчиков.
6) Тип исполнительного устройства.
7) Имеется ли в устройстве гистерезис.
 
  • Like
Реакции: Maga
1) Сдесь нет контроллера. Все обрабатывает ЕОМ, т.е. обычный компьютер.
2)-
3)Ссылка удалена
4)Сигналы поступают в цыфровом виде, пройдя через линию связи и АЦП.
5)Дп - датчик углового перемещения.
Дт - датчик давления
6)Шаговый двигатель
7)Трудно ответить.
 
Последнее редактирование модератором:
Каким образом (по какому интерфейсу) эта информация поступает в ПК?
 
Каким образом (по какому интерфейсу) эта информация поступает в ПК?
Не знаю. Но я
не думаю что программа должна быть настолько сложной.

Программа для ПК может быть написана на любом языке высокого уровня и должна состоять из следующих этапов:
• формирование двух файлов X i Y (применение этих имен является обязательным), содержащие данные о управляемую и измеренную величины и представляют собой две выборки объемом N; эти файлы могут быть получены путем назначения этим величинам, например, постоянных значений в середине заданного диапазона с наложением случайных величин относительным размером ± 20%;
• чтение этих файлов, с целью получения данных для необходимых расчетов;
• проведение необходимых вычислений;
• вывод значений трех необходимых величин (см. с.7), а также содержимого файлов X i Y.
 
Последнее редактирование:
Извините, но задание непонятно. Изложите толком. Какова структура файлов X и Y? Это что - две отдельных выборки? Или "управляемая" величина тоже имеет статистический разброс? Каково среднее значение (или каковы средние значения) измеренной величины? Что за "три необходимые величины" - не понимаю.
В общем так.
Сформулируйте задание по схеме:
1. Сформировать файлы X и Y, содержащие то-то и то-то и имеющие такую-то структуру.
2. Считать файлы и определить то-то и то-то.
Извините, иначе никак.
 
1. Файлы X , Y это выборка.
2. Нужно считать файлы и найти дисперсию.
 
1. Файлы X , Y это выборка.
Нет, ну черт-те-что! Извините. Мне эти Ваши слова ни о чем не говорят. Можете Вы прямо здесь, в поле поста, примерно показать, как они выглядят? Чем они отличаются? Это что - две разных выборки или выборки по двум разным величинам? Что они содержат? По одной колонке чисел? По две колонки? Каковы примерные величины средних значений?
В общем, пока мне из Ваших суперсверхлаконичных посланий ничего не ясно. Извините еще раз.
 
X - управляемая величина, кутовое перемещение, 0...360 градусов
Y - контролируемая(измеряемая) величина, давление, 0...250 Па
 
Владимир задал гораздо больше вопросов. Распишите уже все подробно, а не двумя словами
 
X - управляемая величина, кутовое перемещение, 0...360 градусов
Y - контролируемая(измеряемая) величина, давление, 0...250 Па
Значит так. Я делаю ПОСЛЕДНЮЮ попытку выжать информацию.
Предположим, выборка составляет всего 4 значения. В ходе пяти измерений мы получили следующие результаты:

1. Перемещение 72 градуса.
Измеренные значения давления (Па): 48, 52, 51, 49;

2. Перемещение 144 градуса.
Измеренные значения давления (Па): 103, 96, 101, 105;

3. Перемещение 216 градусов.
Измеренные значения давления (Па): 145, 156, 150, 148;

4. Перемещение 288 градусов.
Измеренные значения давления (Па): 210, 197, 201, 199;

5. Перемещение 360 градусов.
Измеренные значения давления (Па): 247, 253, 254, 248;

Теперь вопрос: как должны выглядеть файлы X и Y?
Если я опять получу вместо развернутого ответа идиотскую отписку, то на этом будет поставлена точка.
 
Я сегодня был у предподавателя, он мне всё объяснил. Не нужно создавать никаких сложных программ. Просто нужно создать масиив: выборку из 50 значений(0...250 Па) и найти дисперсию. Извиняйте, что так вас помучал. Все, что я писал до этого, забудьте.
 
Забыл. И вот что у меня получилось:
Код:
CONST
 Med=125.0;
 Sigma=20.0;
VAR
 f:TEXT;
 i:INTEGER;
 Y:ARRAY[1..50] of REAL;
 M,D:REAL;

FUNCTION Rnd:Real;
 VAR y1,y2,V1,V2,S:REAL;
 Begin
  Repeat
   y1:=Random;
   y2:=Random;
   V1:=y1*2-1;
   V2:=y2*2-1;
   S:=SQR(V1)+SQR(V2);
  Until S<1;
  Rnd:=Med+Sigma*V1*SQRT(-2.0*Ln(S)/S);
 End;

BEGIN
 Randomize;
 Assign(f,'D:\XY');
 ReWrite(f);
 For i:=1 to 50 do
  WriteLn(f,Rnd);
 Close(f);

 M:=0;
 Assign(f,'D:\XY');
 ReSet(f);
 For i:=1 to 50 do
  begin
   ReadLn(f,Y[i]);
   M:=M+Y[i]/50;
  end;
 Close(f);

 D:=0;
 For i:=1 to 50 do
  D:=D+SQR(Y[i]-M)/49;

 WriteLn('M= ',M:6:2);
 WriteLn('D= ',D:6:3);

ReadLn;
END.
Пояснения:
Сначала формируется файл, который имитирует выборку из 50 значений при ожидаемой величине давления 125 Па. Отсчеты представляют собой случайные числа, распределенные по нормальному (гауссову) закону с центром Med = 125 и Sigma (корень из дисперсии) = 20. Разумеется, имя файла и путь могут быть изменены. Генерация таких случайных чисел осуществляется функцией Rnd.
Затем файл считывается в массив и определяются "экспериментальные" значения среднего (М) и дисперсии (D), каковые и выводятся на экран. Величина M должна оказаться близкой к константе Med (125), а D - к квадрату константы Sigma (400).
Ну вроде всё.
 
Спасибо большое!!!
 
Назад
Сверху