unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, TeeProcs, TeEngine, Chart, Series;
type
TForm1 = class(TForm)
Memo1: TMemo;
Chart1: TChart;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Memo2: TMemo;
Label1: TLabel;
Label2: TLabel;
Edit1: TEdit;
Label3: TLabel;
Chart2: TChart;
Edit2: TEdit;
Label4: TLabel;
Series3: TFastLineSeries;
Edit3: TEdit;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Series1: TLineSeries;
Memo3: TMemo;
Series2: TLineSeries;
Memo4: TMemo;
procedure FormCreate(Sender: TObject);{выводнаэкранэксперимен-тальныхданных}
procedure Button3Click(Sender: TObject); {очисткатекстовыхполей}
procedure Button1Click(Sender: TObject); моделирование}
procedure Button2Click(Sender: TObject); {очисткаэкрана}
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
var i, m:integer;
tt, cc:array [1..9] of real;
c:array [1..100000] of real;
t, dt, k:real;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
memo1.Clear;
memo2.Clear;
memo3.Clear;
memo4.clear;
tt[1]:=0; cc[1]:=1000;
tt[2]:=10; cc[2]:=600;
tt[3]:=20; cc[3]:=390;
tt[4]:=30; cc[4]:=240;
tt[5]:=40; cc[5]:=150;
tt[6]:=50; cc[6]:=100;
tt[7]:=60; cc[7]:=60;
tt[8]:=70; cc[8]:=30;
tt[9]:=80; cc[9]:=15;
for i:=1 to 9 do begin
memo1.Lines[0]:=memo1.Lines[0]+' '+floattostr(tt[i]);
memo2.Lines[0]:=memo2.Lines[0]+' '+floattostr(cc[i]);
end;
i:=0;
while cc[i]>15 do begin
i:=i+1;
series1.AddXY(tt[i],(cc[i]),'');
series2.AddXY((tt[i]),ln(cc[i]),'');
end;
memo3.Lines[0]:='зеленая - расчет, красная - эксперимент';
memo4.Lines[0]:='ln(cc[i])';
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
//memo1.Lines. Clear;
//memo2.Lines. Clear;
edit1.Text:='';
edit2.Text:='';
edit3.Text:='';
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
i:=0;
while cc[i]>15 do begin
i:=i+1;
series1.AddXY(tt[i],(cc[i]),'');
series2.AddXY((tt[i]),ln(cc[i]),'');
end;
dt:=strtofloat(edit1.Text);
m:=strtoint(edit3.text);
k:=(ln(cc[1])-ln(cc[m]))/(ln(cc[1])*(tt[9]-tt[8]));
edit2.Text:=floattostr(k);
c[1]:=cc[1]; i:=1; t:=0;
while c[i]>0.001 do begin
series3.AddXY(t, c[i],'');
inc(i);
c[i]:=c[i-1]-k*c[i-1]*dt;
t:=t+dt;
end; end;
procedure TForm1.Button2Click(Sender: TObject);
begin
chart1.series[0].Clear;
chart1.Series[1].Clear;
chart2.Series[0].Clear;
end;
end.

Рис. 16 Форма примера № 4

Рис. 17 Рабочее окно запуска программы

Рис. 18 Ввод данных

Рис. 19 Окно выполненной программы, красная зависимость – экспериментальная, зеленая - теоретическая
Аналогично предыдущей задаче, работу можно выполнить в пакете Mathcad. Модель решения та же самая, но исполнение – проще.

Рис. 20 Файл Mathcad с программой, исходными данными и теоретической зависимостью (ломанная кривая, т. е. – дискретная)

Рис. 21 Файл Mathcad с экспериментальной зависимостью (плавная кривая, без разрывов)

Рис. 22 Файл Mathcad с программой, исходными данными и теоретической зависимостью (ломанная кривая, т. е. – дискретная) зависимостью для определения k

Рис. 23Файл Mathcad с данными расчетов
Аналогично предыдущей задаче, моделировать химическую реакцию можно и в excel. Ниже приводятся соответствующие рисунки.

Рис. 24 Файл Excel с исходными данными и экспериментальной зависимостью

Рис. 25Файл Excel с исходными данными и экспериментальной зависимостью для определения k

Рис. 26Файл Excel с исходными данными и теоретической зависимостью
Пример №5
¾ В ходе изучения термического разложения динитроксида на золоте при 990оС получены следующие кинетические данные:
время, мин 30 53 100
степень превращения, % 32 50 73
Определить порядок реакции n и константу скорости k с помощью вычислительной машины. Для решения задачи надо подготовить четыре вычислительных блока: блок, моделирующий собственно химическую реакцию, блок, воспроизводящий экспериментальную кривую,
В уравнении (Т) производим замену: С = С0(1-x), где С0 – начальная концентрация. Получаем:
(Т*). Для вычисления степени превращения x необходим дополнительный сумматор: - (-x = (1-x) – 1). ( константа скорости реакции должна получиться 2.1×10-4 с-1.
Задание аналогично предыдущему, подробно не рассматривается, имеются код программы и различные этапы ее выполнения.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Math, ExtCtrls, TeeProcs, TeEngine, Chart, Series;
type
TForm1 = class(TForm)
Memo1: TMemo;
Chart1: TChart;
Edit1: TEdit;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Chart2: TChart;
Edit2: TEdit;
Label6: TLabel;
Series2: TFastLineSeries;
Edit3: TEdit;
Label7: TLabel;
Edit4: TEdit;
Label8: TLabel;
Memo2: TMemo;
Series4: TFastLineSeries;
Memo3: TMemo;
Memo4: TMemo;
Series3: TLineSeries;
Series1: TLineSeries;
procedureFormCreate(Sender: TObject); {вывод на экран экперимен-тальных данных и построение полулогарифмической зависимости}
procedure Button2Click(Sender: TObject); {очисткатекстовыхполей}
procedure Button3Click(Sender: TObject); {очисткаграфиков}
procedure Button1Click(Sender: TObject); {основнаяпрограмма}
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
i:integer;
tt, al:array [0..3] of real;
k, dt, t,c, n:real;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
tt[0]:=0; al[0]:=0;
tt[1]:=30; al[1]:=0.32;
tt[2]:=53; al[2]:=0.5;
tt[3]:=100; al[3]:=0.73;
memo1.Clear;
memo2.Clear;
memo3.Clear;
memo4.Clear;
for i:=0 to 3 do begin
memo1.Lines[0]:=memo1.Lines[0]+' '+floattostr(tt[i]);
memo2.Lines[0]:=memo2.Lines[0]+' '+floattostr(al[i]);
series1.AddXY(tt[i],1-al[i],'');
series2.AddXY(tt[i],Ln(1-al[i]),'')
end;
k:= abs(ln(1-al[3])-ln(1-al[1]))/(tt[3]-tt[1]);
edit2.Text:=floattostr(k);
n:=100*(ln(al[3])-ln(al[1]))/((ln((1-al[1])/(1-al[3])))*(tt[3]-tt[1]));
//n:=(ln((1-al[1])/(1-al[3]))+(ln(tt[1]/tt[3])))/(ln((1-al[3])/(1-al[1])));
edit3.Text:=floattostr(n);
memo3.Lines[0]:='зеленая - эксперимент, красная - расчет';
memo4.Lines[0]:='зеленая -Ln(1-al[i]), красная - 1-al[i] ';
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
edit1.Text:='';
edit4.text:='';
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
series3.Clear;
series4.Clear;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
c:=strtofloat(edit1.text);
dt:=strtofloat(edit4.text);
t:=0;
while c>0.001 do begin
series3.AddXY(t, c,'');
t:=t+dt;
c:=c-k*power(c, n)*dt;
end;
c:=strtofloat(edit1.text);
for i:=0 to 3 do
series4.AddXY(tt[i],c*(1-al[i]),'');
end;
end.

Рис. 27 Исходная форма.

Рис. 28 Окно программы с расчетом константы скорости (k) и порядка реакции (n)

Рис. 29 Окно программы, ввод данных с клавиаткры

Рис. 30 Рабочее окно с экспериментальной и теоретической зависимостями.

Рис. 31 Рабочее окно, ввод новых данных

Рис. 32Рабочее окно с экспериментальной и теоретической зависимостями.
Задания для лабораторных работ
Все задания, приведенные в пособии, взяты из книг , Финякин моделирование химико-технологических процессов на аналоговых вычислительных машинах. Лабораторный практикум ( М., Химия, 1984) [1] и К. Эберт, Х. Эдерер Компьютеры. Применение в химии. Пер. с нем., под ред. (М., Мир, 1988) [13].
Моделирование гомогенных химических реакций
Стехиометрическое уравнение реакции показывает, в каких соотношениях компоненты участвуют в химической реакции. Это уравнение связывает исходные реагенты и конечные продукты и представляет собой материальный баланс в целом или ее отдельных элементарных стадий.
aA + bB Û cC
cC – aA – bB = 0
где а, b, с – количество молей вещества А, В и С и называются стехиометрическими коэффициентами реакции.
В отличие от стехиометрической схемы механизм химической реакции раскрывает элементарные стадии превращения исходных компонентов в конечные продукты. Скорость химической реакции (u)–есть изменение количества молей компонента (ni), происходящее в единицу времени (dt) в единице объема (dV). Кинетическое уравнение реакции записывается в виде:
ui = ![]()
![]()
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 |


