Инструментальная среда имитационного моделирования

Рассмотрение формальных моделей распределенных систем. Обзор ресурсно-управляемой сети временных автоматов. Обоснование выбора программных и аппаратных средств. Соответствие графической визуализации текущего состояния модели ее структурному представлению.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 07.03.2016
Размер файла 2,4 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

this.panel2.ResumeLayout(false);

this.panel2.PerformLayout();

((System.ComponentModel.ISupportInitialize)(this.numericUpDown2)).EndInit();

((System.ComponentModel.ISupportInitialize)(this.numericUpDown1)).EndInit();

this.menuStrip1.ResumeLayout(false);

this.menuStrip1.PerformLayout();

this.ResumeLayout(false);

this.PerformLayout();

}

#endregion

private System.Windows.Forms.StatusStrip statusStrip1;

private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel1;

private System.Windows.Forms.Panel panel1;

private System.Windows.Forms.SplitContainer splitContainer1;

private System.Windows.Forms.TreeView treeView1;

private System.Windows.Forms.Button btn_exec;

private System.Windows.Forms.ListBox lb_Vars;

private System.Windows.Forms.MenuStrip menuStrip1;

private System.Windows.Forms.ToolStripMenuItem fileToolStripMenuItem;

private System.Windows.Forms.ToolStripMenuItem openToolStripMenuItem;

private System.Windows.Forms.ToolStripMenuItem saveToolStripMenuItem;

private System.Windows.Forms.CheckBox cb_Log;

private System.Windows.Forms.SplitContainer splitContainer2;

private System.Windows.Forms.Panel panel2;

private System.Windows.Forms.Button btn_Trace;

private System.Windows.Forms.CheckBox cb_Trace;

private System.Windows.Forms.Button btn_Loop;

private System.Windows.Forms.ToolStripProgressBar toolStripProgressBar1;

private System.Windows.Forms.Button btn_chart;

private System.Windows.Forms.ToolStripMenuItem выходToolStripMenuItem;

private System.Windows.Forms.Button btn_time;

private System.Windows.Forms.NumericUpDown numericUpDown1;

private System.Windows.Forms.Label label1;

private System.Windows.Forms.ToolStripMenuItem справкаToolStripMenuItem;

private System.Windows.Forms.ToolStripMenuItem загрузитьДемоМодельToolStripMenuItem;

private System.Windows.Forms.Button btn_steps;

private System.Windows.Forms.CheckBox cb_chart;

private System.Windows.Forms.ToolStripMenuItem оПрограммеToolStripMenuItem;

private System.Windows.Forms.ToolStripMenuItem языкОписанияМоделиToolStripMenuItem;

private System.Windows.Forms.NumericUpDown numericUpDown2;

private System.Windows.Forms.Button btn_rezult;

private System.Windows.Forms.Panel panel3;

private System.Windows.Forms.CheckBox cb_Finiteness;

private System.Windows.Forms.CheckBox cb_Marking;

private System.Windows.Forms.CheckBox cb_lock;

private System.Windows.Forms.CheckBox cb_stop;

private System.Windows.Forms.Panel panel4;

private System.Windows.Forms.CheckBox cb_visual;

private System.Windows.Forms.CheckBox cb_autonet;

private System.Windows.Forms.ToolStripMenuItem englishToolStripMenuItem;

}

}

Приложение 13

Form1_io.cs

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using System.IO;

using System.Reflection;

namespace Automata {

public partial class Form1: Form {

void save_model() {

if(m == null) {

log(ml["model_undef"]/*"Модель не определена!"*/);

return;

}

SaveFileDialog d = new SaveFileDialog();

DialogResult rez = d.ShowDialog();

if(rez != DialogResult.OK) return;

log(ml["save_in_file"]/*"Сохраняем в файл "*/ + d.FileName);

using(StreamWriter sw = File.CreateText(d.FileName)) {

wr = sw;

write_model();

}

status(ml["file_is_saved"]/*"Файл сохранен"*/);

}

StreamWriter wr;

void sp() {

wr.WriteLine("");

}

void sp(string s1, string s2) {

wr.WriteLine(s1 + "(" + s2.Replace(' ','_') + ")");

}

void sp(string s1, string s2,string s3) {

wr.WriteLine(s1 + "(" + s2.Replace(' ','_') + "," + s3.Replace(' ','_') + ")");

}

void sp(string s1, string s2, string s3, string s4) {

wr.WriteLine(s1 + "(" + s2.Replace(' ', '_')

+ "," + s3.Replace(' ', '_') + "," + s4.Replace(' ', '_') + ")");

}

void write_model() {

sp("model", m.name);

sp();

foreach(Place p in m.p_list) {

sp("place",p.name);

}

foreach(Place p in m.p_list) {

foreach(Arc a in p.list_in) {

sp("arc_in",p.name,a.p.name,a.port.name);

}

foreach(Arc a in p.list_out) {

sp("arc_out",p.name,a.p.name,a.port.name);

}

}

foreach(Type t in m.t_list) {

sp();

sp("type", t.name);

if(t.initial_state != null) {

sp(" state", t.initial_state.name);

}

foreach(Const c in t.list_const) {

sp(" const", c.name);

}

foreach(Var v in t.list_var) {

sp(" var", v.name);

}

foreach(Port port in t.list_port) {

sp(" port", port.name);

}

foreach(Transition trans in t.list_trans) {

sp(" trans", trans.state_from.name, trans.state_to.name);

if(trans.priority != Transition.default_priority) {

sp(" priority", ""+trans.priority);

}

if(trans.duration_max != Transition.default_duration) {

if(trans.duration_max == trans.duration_min) {

sp(" duration", ""+trans.duration_min);

} else {

sp(" duration", ""+trans.duration_min,""+trans.duration_max);

}

}

foreach(Term term in trans.list_term_in) {

sp(" term_in", term.port.name, term.res.name);

}

foreach(Term term in trans.list_term_out) {

sp(" term_out", term.port.name, term.res.name);

}

}

}

foreach(Place p in m.p_list) {

sp();

sp("place", p.name);

foreach(Instance inst in p.list_inst) {

if(inst.current_state == null) {

sp(" inst", inst.con.name);

} else {

sp(" inst", inst.con.name,inst.current_state.name);

}

}

}

}

string trda_file_name = "";

void load_model() {

if(m != null) {

if(!confirm(ml["del_cur_model"]/*"Удалить текущую модель?"*/)) return;

}

log(ml["loading_new_model..."]/*"Загружаем новую модель ..."*/);

OpenFileDialog d = new OpenFileDialog();

DialogResult rez = d.ShowDialog();

if(rez != DialogResult.OK) return;

log(ml["loading_new_model_from_file"]/*"Загружаем новую модель из файла "*/+d.FileName);

m = new Model(ml["new model"]/*"Новая модель"*/);

int n_err = 0;

multy_alarm_on();

using(StreamReader sr = File.OpenText(d.FileName)) {

string line = "";

int n_str = 0;

comment_deep = 0;

while ((line = sr.ReadLine()) != null) {

n_str++;

log("sou("+n_str+")="+line);

if (!scan_blank(line, n_str)) {

n_err++;

if (n_err > 5) {

alarm(ml["too_many_errors_in_input_file"]/*"Слишком много ошибок во входном файле."*/);

break;

}

}

}

}

if(n_err == 0){

m.fix_marking();

model_ready(ml["model_is_loaded"]/*"модель загружена"*/);

this.Text = ml["TRDA_typed_model"]/*"Модель типа TRDA "*/ + d.SafeFileName;

this.trda_file_name = d.FileName;

}else{

status(ml["model_is_not_loaded"]/*"Модель не загружена"*/);

m = null;

model_not_ready();

}

multy_alarm_off();

}

int comment_deep = 0;

bool scan_blank(string ss,int n_str) {

Char[] null_c_list = null;

bool rez = true;

foreach(string s in ss.Split(null_c_list,StringSplitOptions.RemoveEmptyEntries) ){

log("==>"+s);

if (!scan(s, n_str, ss)) {

rez = false;

}

}

return rez;

}

bool scan(string ss, int n_str, string sou) {

Char[] delim = {'(',',',')',';'};

string[] s_list = ss.Split(delim, StringSplitOptions.RemoveEmptyEntries);

foreach(string s in s_list) {

log("---->" + s);

}

try {

if(s_list[0] == "/*") {

comment_deep++;

log("----> /* deep=" + comment_deep);

return true;

}

if(s_list[0] == "*/") {

comment_deep--;

log("----> */ deep="+comment_deep);

return true;

}

if(comment_deep > 0) return true;

if(comment_deep < 0) {

error(ml["unopened comment id closed"]/*"закрыт не открытый комиментарий"*/);

}

decode(s_list, n_str, sou);

return true;

} catch(Exception e) {

log("n_str=" + n_str + ": " + sou);

log("decode_error: " + e.Message );

string err_msg = e.Message;

if(e.InnerException != null) {

log("innerException: " + e.InnerException.Message);

err_msg = e.InnerException.Message;

}

alarm("decode_error in "+s_list[0]+": " + err_msg);

return false;

}

}

void decode(string[] sl, int n_str, string sou) {

System.Type t = m.GetType();

int n = sl.Length;

Object[] pars = null;

System.Type[] types = null;

if(n > 1) {

pars = new Object[n - 1];

types = new System.Type[n - 1];

for(int i = 1; i < n; i++) {

pars[i - 1] = sl[i];

types[i-1]=typeof(string);

}

}

string func_name = sl[0];

if(func_name.Equals("const")) {

func_name = "dconst";

} else if(func_name.Equals("var")) {

func_name = "dvar";

} else if(func_name.Equals("time")) {

func_name = "duration";

}

MethodInfo method = t.GetMethod(func_name,types);

method.Invoke(m, pars);

}

}

}

Приложение 14

FormChart.cs

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

namespace Automata {

public partial class FormChart : Form {

public FormChart() {

InitializeComponent();

}

void log(string ss) {

Form1.log(ss);

}

MultyLanguage ml = MultyLanguage.get_MultyLanguage();

Form1 main_form;

ChartInfo chin = null;

public FormChart(Form1 i_form) {

InitializeComponent();

main_form = i_form;

}

void set_text() {

this.Text = ml["chart_diagram_title"];

}

public void set_chin(ChartInfo i_chin) {

chin = i_chin;

panel1.Refresh();

}

Graphics gr;

Color[] colors = {Color.Red, Color.Orange, Color.Yellow

,Color.Green, Color.LightBlue,Color.Blue

,Color.Violet, Color.Aquamarine, Color.Brown, Color.Black

,Color.Aqua,Color.Bisque,Color.Coral,Color.BurlyWood

};

List<Pen> pens = new List<Pen>();

List<SolidBrush> brushes = new List<SolidBrush>();

int ix_by_dx(double dx, int i_max, double d_max, int X0, int X_GAP) {

double f1 = dx * (i_max - X0-X_GAP) / d_max;

int ix = X0 + (int)f1;

return ix;

}

private void panel1_Paint(object sender, PaintEventArgs e) {

gr = panel1.CreateGraphics();

int xmax = panel1.ClientSize.Width;

int ymax = panel1.ClientSize.Height;

for (int i = 0; i < colors.Length; i++) {

Pen p = new Pen((Color)colors[i], 10);

pens.Add(p);

}

int x1,y1,x2,y2;

for (int i = 0; i < colors.Length; i++) {

SolidBrush b = new SolidBrush((Color)colors[i]);

brushes.Add(b);

}

int X0 = 80;

int X_GAP = 10;

// считаю размер шага по оси времени

int n_x = (int) Math.Round(Math.Log10(chin.x_max));

double s_x = Math.Pow(10, n_x - 1);

log("x_max="+chin.x_max

+ " log10="+Math.Log10(chin.x_max)

+ " n_x="+n_x

+ " s_x="+s_x

);

// ось времени

int y0 = ymax - 65;

gr.DrawLine(new Pen(colors[9], 3), X0, y0, xmax - X_GAP, y0);

// формирование подписей оси времени

double x0=0;

int j = 0;

while (x0 < chin.x_max) {

x1 = ix_by_dx(x0,xmax,chin.x_max,X0,X_GAP);

/*

double f1 = x0 * (xmax-X0) / chin.x_max;

x1 = X0 + (int) f1 ;

*/

y1 = ymax - 60;

x0 += s_x;

gr.DrawString(""+s_x*j, new Font(Font.SystemFontName, 10), brushes[8], x1-5,y1);

// отметки на оси времени

gr.DrawLine(new Pen(colors[9], 3), x1+1, y0+2, x1+1, y0-5);

j++;

}

// позиции

for (int i = 0; i < chin.positions.Count; i++) {

x1 = 2;

y1 = ymax - 100 - i * 35;

gr.DrawString(chin.positions[i], new Font(Font.SystemFontName, 10), brushes[8], x1,y1);

}

// рисование линий по позициям

int n_color;

foreach(ChartItem item in chin.items) {

x1 = ix_by_dx(item.x_from, xmax, chin.x_max, X0, X_GAP);

x2 = ix_by_dx(item.x_to, xmax, chin.x_max, X0, X_GAP);

y1 = ymax - 90 - item.position * 35;

n_color = item.state % colors.Length;

gr.DrawLine(new Pen(colors[n_color], 10), x1, y1, x2, y1);

}

// легенда - цвета состояний

int n = chin.states.Count;

n = Math.Max(n, 10);

int dx = xmax / n;

int gap_x = dx/2;

int gap_y = 10;

log("y0=" + y0);

for (int i = 0; i < chin.states.Count; i++) {

log(chin.states[i]);

x1 = 20 + dx*i;

y1= ymax - 3*gap_y;

x2 = x1 + gap_x;

y2=y1;

n_color = i % colors.Length;

gr.DrawLine(new Pen(colors[n_color], 10),x1,y1,x2,y2);

System.Drawing.Point p = new System.Drawing.Point();

p.X = x1;

p.Y = y1 + gap_y;

gr.DrawString(chin.states[i],new Font(Font.SystemFontName,10),brushes[8],p);

}

}

private void panel1_Resize(object sender, EventArgs e) {

panel1.Refresh();

}

private void FormChart_FormClosing(object sender, FormClosingEventArgs e) {

main_form.chart_visible(false);

/*

this.Visible = false;

e.Cancel = true;

*/

}

private void FormChart_Activated(object sender, EventArgs e) {

set_text();

}

}

}

Приложение 15

FormChart.Designer.cs

namespace Automata {

partial class FormChart {

/// <summary>

/// Требуется переменная конструктора.

/// </summary>

private System.ComponentModel.IContainer components = null;

/// <summary>

/// Освободить все используемые ресурсы.

/// </summary>

/// <param name="disposing">истинно, если управляемый ресурс должен быть удален; иначе ложно.</param>

protected override void Dispose(bool disposing) {

if(disposing && (components != null)) {

components.Dispose();

}

base.Dispose(disposing);

}

#region Код, автоматически созданный конструктором форм Windows

/// <summary>

/// Обязательный метод для поддержки конструктора - не изменяйте

/// содержимое данного метода при помощи редактора кода.

/// </summary>

private void InitializeComponent() {

this.panel1 = new System.Windows.Forms.Panel();

this.SuspendLayout();

//

// panel1

//

this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;

this.panel1.Location = new System.Drawing.Point(0, 0);

this.panel1.Margin = new System.Windows.Forms.Padding(2);

this.panel1.Name = "panel1";

this.panel1.Size = new System.Drawing.Size(671, 743);

this.panel1.TabIndex = 0;

this.panel1.Paint += new System.Windows.Forms.PaintEventHandler(this.panel1_Paint);

this.panel1.Resize += new System.EventHandler(this.panel1_Resize);

//

// FormChart

//

this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);

this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;

this.ClientSize = new System.Drawing.Size(671, 743);

this.Controls.Add(this.panel1);

this.Margin = new System.Windows.Forms.Padding(2);

this.Name = "FormChart";

this.Text = "Временная диаграмма";

this.Activated += new System.EventHandler(this.FormChart_Activated);

this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FormChart_FormClosing);

this.ResumeLayout(false);

}

#endregion

private System.Windows.Forms.Panel panel1;

}

}

Приложение 16

FormHelp.cs

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

namespace Automata {

public partial class FormHelp : Form {

public FormHelp(string i_title, string i_text) {

InitializeComponent();

this.Text = i_title;

textBox1.Text = i_text;

textBox1.Select(0, 0);

}

static MultyLanguage ml = MultyLanguage.get_MultyLanguage();

static void help(string p_title, string p_text) {

FormHelp frmhelp = new FormHelp(p_title,p_text);

frmhelp.Show();

}

public static void help_about(string i_build_id) {

help(ml["about_program"]/*"О программе"*/,

ml["program_implements_trda"]+" (build="+i_build_id+")"

/*@"Программа реализует систему временных конечных автоматов"*/

);

}

public static void help_bnf() {

help(ml["model_description_language"]/*"Язык описания модели"*/,

ml["bnf"]/*@"Описание модели с помощью формализма

БНФ

<Описание модели> ::= model(<название модели>)

<системная сеть>

<автоматный слой>

<начальная разметка>

<системная сеть> ::=

[<определение вершины системного слоя>, … ]

[<определение дуги системного слоя>, … ]

<определение вершины системного слоя> ::= place(<название вершины>)

<определение дуги системного слоя> ::=

<определение входящей дуги> | <определение исходящей дуги>

<определение входящей дуги> ::=

arc_in(<вершина приемник>, <вершина источник>, <название порта>)

<определение исходящей дуги> ::=

arc_out(<вершина источник>, <вершина приемник>, <название порта>)

<автоматный слой> ::= [<определение типа>, … ]

<определение типа> ::= type(<имя типа>)

[<определение элемента типа>, … ]

[<обозначение состояния на графике>, … ]

[<определение перехода>, … ]

<определение элемента типа> ::= <определение состояния> | < определение порта>

| < определение константы> | < определение переменной>

<определение состояния> ::= state(<имя состояния>)

<определение переменной> ::= var(<имя переменной>)

<определение константы> ::= const(<имя константы>)

<определение порта> ::= port(<имя порта>)

<обозначение состояния на графике> ::=

state_chart_name(<имя состояния>, <имя состояния на графике>)

<определение перехода> ::=

trans(<имя исходного состояния>, <имя итогового состояния> [, <название перехода>])

[<атрибут перехода>, … ]

[<определение преобразования ресурсов>, … ]

<атрибут перехода> ::= <продолжительность перехода>

| <обозначение перехода на графике>

| <вероятность перехода>

<ожидание начала работы перехода> ::=

wait(<минимальное время ожидания перехода>[, <максимальное время ожидания перехода>])

<продолжительность перехода> ::=

time(<минимальное время длительности работы перехода>[, <максимальное время длительности работы перехода>])

<вероятность перехода> ::=

priority(<приоритет перехода>)

<обозначение перехода на графике> ::=

trans_chart_name(<имя перехода на графике>)

<определение преобразования ресурсов> ::=

<определение потребления ресурсов> | <определение производства ресурсов>

<определение потребления ресурсов> ::=

term_in(<имя порта>, <имя ресурса>[, <состояние потребляемого ресурса>])

<определение производства ресурсов> ::=

term_out(<имя порта>, <имя ресурса>[, <состояние производимого ресурса>])

<имя ресурса> ::= <имя константы> | <имя переменной>

"*/

);

}

}

}

Приложение 17

FormHelp.Designer.cs

namespace Automata {

partial class FormHelp {

/// <summary>

/// Требуется переменная конструктора.

/// </summary>

private System.ComponentModel.IContainer components = null;

/// <summary>

/// Освободить все используемые ресурсы.

/// </summary>

/// <param name="disposing">истинно, если управляемый ресурс должен быть удален; иначе ложно.</param>

protected override void Dispose(bool disposing) {

if(disposing && (components != null)) {

components.Dispose();

}

base.Dispose(disposing);

}

#region Код, автоматически созданный конструктором форм Windows

/// <summary>

/// Обязательный метод для поддержки конструктора - не изменяйте

/// содержимое данного метода при помощи редактора кода.

/// </summary>

private void InitializeComponent() {

this.textBox1 = new System.Windows.Forms.TextBox();

this.SuspendLayout();

//

// textBox1

//

this.textBox1.Dock = System.Windows.Forms.DockStyle.Fill;

this.textBox1.Location = new System.Drawing.Point(0, 0);

this.textBox1.Multiline = true;

this.textBox1.Name = "textBox1";

this.textBox1.ReadOnly = true;

this.textBox1.ScrollBars = System.Windows.Forms.ScrollBars.Both;

this.textBox1.Size = new System.Drawing.Size(365, 313);

this.textBox1.TabIndex = 0;

//

// FormHelp

//

this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F);

this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;

this.ClientSize = new System.Drawing.Size(365, 313);

this.Controls.Add(this.textBox1);

this.Name = "FormHelp";

this.Text = "frmHelp";

this.ResumeLayout(false);

this.PerformLayout();

}

#endregion

private System.Windows.Forms.TextBox textBox1;

}

}

18 FormLog.cs

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

namespace Automata {

public partial class FormLog : Form {

Form1 main_form;

public FormLog(Form1 i_form) {

main_form = i_form;

InitializeComponent();

}

public void log(string ss) {

textBox1.AppendText(ss+"\r\n");

}

private void FormLog_FormClosing(object sender, FormClosingEventArgs e) {

main_form.log_visible(false);

// this.Visible = false;

e.Cancel = true;

}

}

}

19 FormLog.Designer.cs

namespace Automata {

partial class FormLog {

/// <summary>

/// Требуется переменная конструктора.

/// </summary>

private System.ComponentModel.IContainer components = null;

/// <summary>

/// Освободить все используемые ресурсы.

/// </summary>

/// <param name="disposing">истинно, если управляемый ресурс должен быть удален; иначе ложно.</param>

protected override void Dispose(bool disposing) {

if(disposing && (components != null)) {

components.Dispose();

}

base.Dispose(disposing);

}

#region Код, автоматически созданный конструктором форм Windows

/// <summary>

/// Обязательный метод для поддержки конструктора - не изменяйте

/// содержимое данного метода при помощи редактора кода.

/// </summary>

private void InitializeComponent() {

this.textBox1 = new System.Windows.Forms.TextBox();

this.SuspendLayout();

//

// textBox1

//

this.textBox1.Dock = System.Windows.Forms.DockStyle.Fill;

this.textBox1.Font = new System.Drawing.Font("Courier New", 7.8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));

this.textBox1.Location = new System.Drawing.Point(0, 0);

this.textBox1.Multiline = true;

this.textBox1.Name = "textBox1";

this.textBox1.ScrollBars = System.Windows.Forms.ScrollBars.Both;

this.textBox1.Size = new System.Drawing.Size(292, 260);

this.textBox1.TabIndex = 0;

this.textBox1.WordWrap = false;

//

// FormLog

//

this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F);

this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;

this.ClientSize = new System.Drawing.Size(292, 260);

this.Controls.Add(this.textBox1);

this.Name = "FormLog";

this.Text = "FormLog";

this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FormLog_FormClosing);

this.ResumeLayout(false);

this.PerformLayout();

}

#endregion

private System.Windows.Forms.TextBox textBox1;

}

}

20 FormRezult.cs

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using System.IO;

namespace Automata {

public partial class FormRezult : Form {

string file_name;

static MultyLanguage ml = MultyLanguage.get_MultyLanguage();

public FormRezult(string fname) {

InitializeComponent();

file_name = fname + ".rez";

textBox2.Text = file_name;

this.Text = ml["title_FormRezults"];

btn_save.Text = ml["save"];

}

public void log_begin() {

textBox1.Text = "";

}

public void log(string ss){

textBox1.AppendText(ss+"\r\n");

}

private void btn_save_Click(object sender, EventArgs e) {

SaveFileDialog d = new SaveFileDialog();

d.FileName = file_name;

if(d.ShowDialog() != DialogResult.OK) {

return;

}

using(StreamWriter sw = File.CreateText(d.FileName)) {

sw.Write(textBox1.Text);

}

}

}

}

21 FormRezult.Designer.cs

namespace Automata {

partial class FormRezult {

/// <summary>

/// Требуется переменная конструктора.

/// </summary>

private System.ComponentModel.IContainer components = null;

/// <summary>

/// Освободить все используемые ресурсы.

/// </summary>

/// <param name="disposing">истинно, если управляемый ресурс должен быть удален; иначе ложно.</param>

protected override void Dispose(bool disposing) {

if(disposing && (components != null)) {

components.Dispose();

}

base.Dispose(disposing);

}

#region Код, автоматически созданный конструктором форм Windows

/// <summary>

/// Обязательный метод для поддержки конструктора - не изменяйте

/// содержимое данного метода при помощи редактора кода.

/// </summary>

private void InitializeComponent() {

this.panel1 = new System.Windows.Forms.Panel();

this.textBox2 = new System.Windows.Forms.TextBox();

this.btn_save = new System.Windows.Forms.Button();

this.textBox1 = new System.Windows.Forms.TextBox();

this.panel1.SuspendLayout();

this.SuspendLayout();

//

// panel1

//

this.panel1.Controls.Add(this.textBox2);

this.panel1.Controls.Add(this.btn_save);

this.panel1.Dock = System.Windows.Forms.DockStyle.Bottom;

this.panel1.Location = new System.Drawing.Point(0, 500);

this.panel1.Name = "panel1";

this.panel1.Size = new System.Drawing.Size(646, 63);

this.panel1.TabIndex = 0;

//

// textBox2

//

this.textBox2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)

| System.Windows.Forms.AnchorStyles.Right)));

this.textBox2.Location = new System.Drawing.Point(12, 23);

this.textBox2.Name = "textBox2";

this.textBox2.Size = new System.Drawing.Size(516, 22);

this.textBox2.TabIndex = 1;

//

// btn_save

//

this.btn_save.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));

this.btn_save.Location = new System.Drawing.Point(544, 17);

this.btn_save.Name = "btn_save";

this.btn_save.Size = new System.Drawing.Size(90, 34);

this.btn_save.TabIndex = 0;

this.btn_save.Text = "Сохранить";

this.btn_save.UseVisualStyleBackColor = true;

this.btn_save.Click += new System.EventHandler(this.btn_save_Click);

//

// textBox1

//

this.textBox1.Dock = System.Windows.Forms.DockStyle.Fill;

this.textBox1.Location = new System.Drawing.Point(0, 0);

this.textBox1.Multiline = true;

this.textBox1.Name = "textBox1";

this.textBox1.ScrollBars = System.Windows.Forms.ScrollBars.Both;

this.textBox1.Size = new System.Drawing.Size(646, 500);

this.textBox1.TabIndex = 1;

//

// FormRezult

//

this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F);

this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;

this.ClientSize = new System.Drawing.Size(646, 563);

this.Controls.Add(this.textBox1);

this.Controls.Add(this.panel1);

this.Name = "FormRezult";

this.Text = "Результаты анализа";

this.panel1.ResumeLayout(false);

this.panel1.PerformLayout();

this.ResumeLayout(false);

this.PerformLayout();

}

#endregion

private System.Windows.Forms.Panel panel1;

private System.Windows.Forms.Button btn_save;

private System.Windows.Forms.TextBox textBox1;

private System.Windows.Forms.TextBox textBox2;

}

}

22 FormVisual.cs

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.IO;

using System.Windows.Forms;

namespace Automata {

public partial class FormVisual : Form {

string dot_file_name;

Form1 main_form;

VisualNet net;

static MultyLanguage ml = MultyLanguage.get_MultyLanguage();

public FormVisual(Form1 i_form1, VisualNet i_net) {

InitializeComponent();

net = i_net;

set_text();

this.main_form = i_form1;

}

void set_text() {

if (net == VisualNet.system_net) {

this.Text = ml["title_SystemNet"];

}

if (net == VisualNet.automata_net) {

this.Text = ml["title_AutomataNet"];

}

btn_save_dot.Text = ml["save"];

}

public void new_dot(string i_file_name) {

dot_file_name = i_file_name + ".dot";

textBox2.Text = dot_file_name;

textBox1.Text = "";

}

public void write_dot(string ss){

textBox1.AppendText(ss + "\r\n");

}

private void btn_save_dot_Click(object sender, EventArgs e) {

SaveFileDialog d = new SaveFileDialog();

d.FileName = textBox2.Text;

if(d.ShowDialog() != DialogResult.OK) {

return;

}

dot_file_name = d.FileName;

textBox2.Text = dot_file_name;

save_dot_file();

}

void save_dot_file() {

using(StreamWriter sw = File.CreateText(dot_file_name)) {

sw.Write(textBox1.Text);

}

}

private void log(string ss){

toolStripStatusLabel1.Text = ss;

Form1.log(ss);

}

private void tabVisual_Enter(object sender, EventArgs e) {

log("tab_Visual_Enter fire at " + System.DateTime.Now);

draw_graph();

}

public void draw_graph() {

log("save_dot_file");

save_dot_file();

string jpg_file_name = dot_file_name + ".jpg";

log("jpg_file_name=" + jpg_file_name);

if(pictureBox1.Image != null) {

log("pictureBox1.Image.Dispose()");

pictureBox1.Image.Dispose();

}

try {

log("do delete_dot_file");

File.Delete(jpg_file_name);

log("posle delete_dot_file");

} catch(Exception e) {

log("Error while delete old jpg file " + jpg_file_name

+": "+e.Message

);

}

try {

string ss = "dot.exe -Tjpg -o\"" + jpg_file_name + "\" \"" + dot_file_name + "\"";

log("try begin. ss=" + ss);

System.Diagnostics.Process p = System.Diagnostics.Process.Start("dot.exe", ss);

log("in try. p=" + p);

p.WaitForExit();

int exit_code = p.ExitCode;

log("in try. p exit. exit_code="+exit_code);

p.Close();

} catch(Exception e) {

log("on run e=" + e.Message);

}

Image mem;

try{

Stream stream = File.Open(jpg_file_name, FileMode.Open);

// mem = Image.FromFile(jpg_file_name);

mem = Image.FromStream(stream);

stream.Close();

pictureBox1.Image = mem;

log("mem size = " + mem.Size

+" pbi size = " + pictureBox1.Image.Size

);

pictureBox1.Size = mem.Size;

// log("image size = " + pictureBox1.Size);

} catch(Exception e) {

log("on load e=" + e.Message);

}

}

private void FormVisual_FormClosing(object sender, FormClosingEventArgs e) {

main_form.set_visual(false, net);

e.Cancel = true;

}

private void FormVisual_Activated(object sender, EventArgs e) {

set_text();

}

}

}

23 FormVisual.Designer.cs

namespace Automata {

partial class FormVisual {

/// <summary>

/// Требуется переменная конструктора.

/// </summary>

private System.ComponentModel.IContainer components = null;

/// <summary>

/// Освободить все используемые ресурсы.

/// </summary>

/// <param name="disposing">истинно, если управляемый ресурс должен быть удален; иначе ложно.</param>

protected override void Dispose(bool disposing) {

if(disposing && (components != null)) {

components.Dispose();

}

base.Dispose(disposing);

}

#region Код, автоматически созданный конструктором форм Windows

/// <summary>

/// Обязательный метод для поддержки конструктора - не изменяйте

/// содержимое данного метода при помощи редактора кода.

/// </summary>

private void InitializeComponent() {

this.tabControl1 = new System.Windows.Forms.TabControl();

this.tabVisual = new System.Windows.Forms.TabPage();

this.panel2 = new System.Windows.Forms.Panel();

this.pictureBox1 = new System.Windows.Forms.PictureBox();

this.tabDot = new System.Windows.Forms.TabPage();

this.textBox1 = new System.Windows.Forms.TextBox();

this.panel1 = new System.Windows.Forms.Panel();

this.btn_save_dot = new System.Windows.Forms.Button();

this.textBox2 = new System.Windows.Forms.TextBox();

this.statusStrip1 = new System.Windows.Forms.StatusStrip();

this.toolStripStatusLabel1 = new System.Windows.Forms.ToolStripStatusLabel();

this.tabControl1.SuspendLayout();

this.tabVisual.SuspendLayout();

this.panel2.SuspendLayout();

((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();

this.tabDot.SuspendLayout();

this.panel1.SuspendLayout();

this.statusStrip1.SuspendLayout();

this.SuspendLayout();

//

// tabControl1

//

this.tabControl1.Controls.Add(this.tabVisual);

this.tabControl1.Controls.Add(this.tabDot);

this.tabControl1.Dock = System.Windows.Forms.DockStyle.Fill;

this.tabControl1.Location = new System.Drawing.Point(0, 0);

this.tabControl1.Name = "tabControl1";

this.tabControl1.SelectedIndex = 0;

this.tabControl1.Size = new System.Drawing.Size(430, 300);

this.tabControl1.TabIndex = 0;

//

// tabVisual

//

this.tabVisual.Controls.Add(this.panel2);

this.tabVisual.Location = new System.Drawing.Point(4, 25);

this.tabVisual.Name = "tabVisual";

this.tabVisual.Padding = new System.Windows.Forms.Padding(3);

this.tabVisual.Size = new System.Drawing.Size(422, 271);

this.tabVisual.TabIndex = 1;

this.tabVisual.Text = "visual";

this.tabVisual.UseVisualStyleBackColor = true;

this.tabVisual.Enter += new System.EventHandler(this.tabVisual_Enter);

//

// panel2

//

this.panel2.AutoScroll = true;

this.panel2.Controls.Add(this.pictureBox1);

this.panel2.Dock = System.Windows.Forms.DockStyle.Fill;

this.panel2.Location = new System.Drawing.Point(3, 3);

this.panel2.Name = "panel2";

this.panel2.Size = new System.Drawing.Size(416, 265);

this.panel2.TabIndex = 1;

//

// pictureBox1

//

this.pictureBox1.Location = new System.Drawing.Point(0, 0);

this.pictureBox1.Name = "pictureBox1";

this.pictureBox1.Size = new System.Drawing.Size(0, 0);

this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize;

this.pictureBox1.TabIndex = 0;

this.pictureBox1.TabStop = false;

//

// tabDot

//

this.tabDot.Controls.Add(this.textBox1);

this.tabDot.Controls.Add(this.panel1);

this.tabDot.Location = new System.Drawing.Point(4, 25);

this.tabDot.Name = "tabDot";

this.tabDot.Padding = new System.Windows.Forms.Padding(3);

this.tabDot.Size = new System.Drawing.Size(422, 271);

this.tabDot.TabIndex = 0;

this.tabDot.Text = "dot";

this.tabDot.UseVisualStyleBackColor = true;

//

// textBox1

//

this.textBox1.Dock = System.Windows.Forms.DockStyle.Fill;

this.textBox1.Location = new System.Drawing.Point(3, 3);

this.textBox1.Multiline = true;

this.textBox1.Name = "textBox1";

this.textBox1.ScrollBars = System.Windows.Forms.ScrollBars.Both;

this.textBox1.Size = new System.Drawing.Size(416, 223);

this.textBox1.TabIndex = 0;

//

// panel1

//

this.panel1.Controls.Add(this.btn_save_dot);

this.panel1.Controls.Add(this.textBox2);

this.panel1.Dock = System.Windows.Forms.DockStyle.Bottom;

this.panel1.Location = new System.Drawing.Point(3, 226);

this.panel1.Name = "panel1";

this.panel1.Size = new System.Drawing.Size(416, 42);

this.panel1.TabIndex = 1;

//

// btn_save_dot

//

this.btn_save_dot.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));

this.btn_save_dot.Location = new System.Drawing.Point(307, 14);

this.btn_save_dot.Name = "btn_save_dot";

this.btn_save_dot.Size = new System.Drawing.Size(104, 23);

this.btn_save_dot.TabIndex = 1;

this.btn_save_dot.Text = "Save";

this.btn_save_dot.UseVisualStyleBackColor = true;

this.btn_save_dot.Click += new System.EventHandler(this.btn_save_dot_Click);

//

// textBox2

//

this.textBox2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)

| System.Windows.Forms.AnchorStyles.Right)));

this.textBox2.Location = new System.Drawing.Point(5, 15);

this.textBox2.Name = "textBox2";

this.textBox2.Size = new System.Drawing.Size(296, 22);

this.textBox2.TabIndex = 0;

//

// statusStrip1

//

this.statusStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {

this.toolStripStatusLabel1});

this.statusStrip1.Location = new System.Drawing.Point(0, 300);

this.statusStrip1.Name = "statusStrip1";

this.statusStrip1.Size = new System.Drawing.Size(430, 23);

this.statusStrip1.TabIndex = 0;

this.statusStrip1.Text = "statusStrip1";

//

// toolStripStatusLabel1

//

this.toolStripStatusLabel1.Name = "toolStripStatusLabel1";

this.toolStripStatusLabel1.Size = new System.Drawing.Size(141, 18);

this.toolStripStatusLabel1.Text = "toolStripStatusLabel1";

//

// FormVisual

//

this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F);

this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;

this.ClientSize = new System.Drawing.Size(430, 323);

this.Controls.Add(this.tabControl1);

this.Controls.Add(this.statusStrip1);

this.Name = "FormVisual";

this.Text = "FormVisual";

this.Activated += new System.EventHandler(this.FormVisual_Activated);

this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FormVisual_FormClosing);

this.tabControl1.ResumeLayout(false);

this.tabVisual.ResumeLayout(false);

this.panel2.ResumeLayout(false);

this.panel2.PerformLayout();

((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();

this.tabDot.ResumeLayout(false);

this.tabDot.PerformLayout();

this.panel1.ResumeLayout(false);

this.panel1.PerformLayout();

this.statusStrip1.ResumeLayout(false);

this.statusStrip1.PerformLayout();

this.ResumeLayout(false);

this.PerformLayout();

}

#endregion

private System.Windows.Forms.TabControl tabControl1;

private System.Windows.Forms.TabPage tabDot;

private System.Windows.Forms.TextBox textBox1;

private System.Windows.Forms.TabPage tabVisual;

private System.Windows.Forms.Panel panel1;

private System.Windows.Forms.Button btn_save_dot;

private System.Windows.Forms.TextBox textBox2;

private System.Windows.Forms.StatusStrip statusStrip1;

private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel1;

private System.Windows.Forms.PictureBox pictureBox1;

private System.Windows.Forms.Panel panel2;

}

}

24 Lib.cs

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using System.Xml;

namespace Automata {

public class Lib {

static Random r = new Random();

public static double get_random_from_interval(double min, double max) {

int N = 100000;

int i = r.Next(N);

double x = min + (max - min) * i / N;

x = Math.Round(x, 2);

return x;

}

public static void alarm(string ss) {

MessageBox.Show(ss, "Сообщение");

}

public static bool confirm(string ss) {

DialogResult result =

MessageBox.Show(ss, "Подтверждение", MessageBoxButtons.YesNo);

return (result == DialogResult.Yes);

}

public static int nvl_int(String value, int default_value) {

int rez = default_value;

try {

rez = int.Parse(value);

} catch(Exception e) {

Lib.alarm("nvl_int e=" + e.Message);

}

return rez;

}

public static void form_attr_read(XmlElement e, Form f) {

String ss = e.GetAttribute("window_state");

FormWindowState st = FormWindowState.Normal;

if(ss.Equals("Maximized")) st = FormWindowState.Maximized;

if(ss.Equals("Minimized")) st = FormWindowState.Minimized;

f.Top = nvl_int(e.GetAttribute("top"), f.Top);

f.Left = nvl_int(e.GetAttribute("left"), f.Left);

f.Width = nvl_int(e.GetAttribute("width"), f.Width);

f.Height = nvl_int(e.GetAttribute("height"), f.Height);

f.WindowState = st;

}

public static void form_attr_write(XmlElement e, Form f) {

FormWindowState s = f.WindowState;

if(f.WindowState != FormWindowState.Normal) {

f.WindowState = FormWindowState.Normal;

}

e.SetAttribute("top", "" + f.Top);

e.SetAttribute("left", "" + f.Left);

e.SetAttribute("width", "" + f.Width);

e.SetAttribute("height", "" + f.Height);

e.SetAttribute("window_state", "" + s);

f.WindowState = s;

}

}

}

25 Model.cs

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Collections;

using System.Text.RegularExpressions;

namespace Automata {

partial class Model {

enum Context { nil, type, trans, place, marking, marking_place };

Context context = Context.nil;

//

Hashtable Places = new Hashtable();

Place current_place;

public List<Place> p_list = new List<Place>();

//

Hashtable Types = new Hashtable();

Type current_type;

Transition current_transition;

public List<Type> t_list = new List<Type>();

//

Hashtable Constants = new Hashtable();

//

Hashtable Vars = new Hashtable();

//

Hashtable Ports = new Hashtable();

public List<Port> port_list = new List<Port>();

//

List<Instance> inst_list = new List<Instance>();

//

Hashtable markings = new Hashtable();

Marking current_marking;

//

List<Bound> bound_list = new List<Bound>();

//

public string name;

static Model m = null;

public Model(string i_name) {

name = i_name;

m = this;

}

public static Model get_model() {

return m;

}

static void log(string ss) {

Form1.log(ss);

}

static void rez(string ss) {

Form1.rez(ss);

}

static void log_t(string ss) {

Form1.log_t(ss);

}

static void error(string ss) {

Form1.log("error: " + ss);

Exception e = new Exception(ss);

throw e;

}

public void model(string ss) {

this.name = ss;

}

public Type type(string i_name) {

context = Context.type;

if(Types.Contains(i_name)) {

current_type = (Type)Types[i_name];

return current_type;

} else {

Type t = new Type(i_name);

current_type = t;

Types.Add(i_name, t);

t.id = Types.Count;

t_list.Add(t);

return t;

}

}

public Port port(string i_name) {

Port p;

if(Ports.Contains(i_name)) {

p = (Port)Ports[i_name];

} else {

p = new Port(i_name);

Ports.Add(i_name, p);

port_list.Add(p);

}

if(context == Context.type) {

if(p.type == null){

p.type = current_type;

current_type.list_port.Add(p);

}else{

if(current_type != p.type) {

Exception e = new Exception("Разные типы для порта " + i_name

+ ". Был " + p.type.name + ", определяется " + current_type.name);

throw e;

}

}

}

return p;

}

public void dconst(string i_name) {

Const c;

if(Constants.Contains(i_name)) {

c = (Const)Constants[i_name];

if(current_type != c.type) {

Exception e = new Exception("Разные типы для константы " + i_name

+ ". Был " + c.type.name + ", определяется " + current_type.name);

throw e;

}

} else {

c = new Const(i_name);

c.type = current_type;

Constants.Add(i_name, c);

c.id = Constants.Count - 1;

current_type.list_const.Add(c);

}

}

public void dvar(string i_name) {

Var v;

if(Vars.Contains(i_name)) {

v = (Var)Vars[i_name];

if(current_type != v.type) {

error("Разные типы для переменной " + i_name

+ ". Был " + v.type.name + ", определяется " + current_type.name);

}

} else {

v = new Var(i_name);

v.type = current_type;

Vars.Add(i_name, v);

current_type.list_var.Add(v);

}

}

public Place place(string i_name){

if (context == Context.marking

|| context == Context.marking_place

) {

context = Context.marking_place;

if (Places.Contains(i_name)) {

if (current_marking.places.Contains(i_name)) {

error("marking " + current_marking.name + ": place"

+ i_name + " already present in marking");

}

Place p = (Place)Places[i_name];

Place place = new Place(i_name);

place.id = p.id;

//current_marking.current_place = place;

current_place = place;

current_marking.places.Add(i_name,place);

} else {

error("marking "+current_marking.name +": place"

+ i_name + " not found");

}

return null;

} else {

context = Context.place;

if (Places.Contains(i_name)) {

current_place = (Place)Places[i_name];

return current_place;

} else {

Place p = new Place(i_name);

current_place = p;

Places.Add(i_name, p);

p_list.Add(p);

p.id = p_list.Count - 1;

return p;

}

}

}

public void arc_in(string i_place_to, string i_place_from, string i_port_name) {

Place p_to = this.place(i_place_to);

Place p_from = this.place(i_place_from);

Port port_ = port(i_port_name);

Arc arc = new Arc(p_from, port_);

arc.p0 = p_to;

arc.in_out = Arc.IN;

p_to.list_in.Add(arc);

}

public void arc_out(string i_place_from, string i_place_to, string i_port_name) {

Place p_to = this.place(i_place_to);

Place p_from = this.place(i_place_from);

Port port_ = port(i_port_name);

Arc arc = new Arc(p_to, port_);

arc.p0 = p_from;

arc.in_out = Arc.OUT;

p_from.list_out.Add(arc);

}

public State state(string i_name) {

return state(i_name, null);

}

public State state(string i_name,string i_symbol) {

if(context != Context.type && context != Context.trans) {

error("При определении состояния " + i_name + " не определен контекст типа. "+context);

}

Type type = current_type;

State s;

Form1.log("->state " + i_name);

if(type.States.Contains(i_name)) {

Form1.log("-->old state " + i_name);

s = (State)type.States[i_name];

}else{

Form1.log("-->new state " + i_name);

s = new State(i_name, type);

type.States.Add(i_name,s);

type.list_states.Add(s);

s.id = type.list_states.Count -1;

}

if(i_symbol != null) s.symbol = i_symbol[0];

if(type.initial_state == null) {

type.initial_state = s;

}

return s;

}

public Register timer(string i_name) {

return register(i_name, RegType.rt_timer);

}

public Register register(string i_name, RegType i_reg_type){

if(context != Context.type && context != Context.trans) {

error("При определении регистра " + i_name + " не определен контекст типа. " + context);

}

Type type = current_type;

Register reg;

if(type.Registers.Contains(i_name)) {

Form1.log("-->old register " + i_name);

reg = (Register)type.Registers[i_name];

if(reg.reg_type != i_reg_type) {

error("Регистр " + i_name + " уже определен с другим типом в типе " + type.name);

}

} else {

Form1.log("-->new register " + i_name);

reg = new Register(i_name, i_reg_type);

type.Registers.Add(i_name, reg);

type.list_regs.Add(reg);

reg.id = type.list_regs.Count - 1;

}

return reg;

}

public void reset(string i_timer) {

if(context != Context.trans) {

error("reset timer=" + i_timer + ": контекст не переход");

}

Type type = current_type;

Transition trans = current_transition;

Register t_reg;

if(type.Registers.Contains(i_timer)) {

t_reg = (Register)type.Registers[i_timer];

if(t_reg.reg_type != RegType.rt_timer) {

error("Тип регистра " + i_timer + " в типе " + type.name + " не Timer");

}

} else {

t_reg = timer(i_timer);

}

trans.list_reset.Add(t_reg);

}

public void constr(string i_text){

if(context != Context.trans) {

error("constraint=" + i_text + ": контекст не переход");

}

Type type = current_type;

Transition trans = current_transition;

log("constr=" + i_text);

Regex rx = new Regex(@"^([a-zA-Z]*)\s*([+|-]*)\s*([a-zA-Z]*)(>=|<=|>|<|=)(\d+)");

Match match = rx.Match(i_text);

if(match.Success) {

log("constr ----> match");

} else {

log("constr ----> not match");

error("Error in constraint " + i_text + ". Constraint must look like X + Y < 10");

}

GroupCollection gc = match.Groups;

/*

foreach(Group g in gc) {

log("g=" + g.Value);

}

*/

int[] gn = rx.GetGroupNumbers();

foreach(int i in gn) {

log("group i[" + i + "]="+gc[i].Value);

}

if(gc[1].Value == "") {

error("Error in constraint " + i_text + ": first variable is null");

}

Constraint constr = new Constraint();

constr.r1 = timer(gc[1].Value);

constr.a = 1;

if(gc[2].Value == ""){

constr.r2 = null;

constr.b = 0;

}else {

if(gc[3].Value == "") {

error("Error in constraint " + i_text + ": sign found, but second variable is null");

}

constr.r2 = timer(gc[3].Value);

if(gc[2].Value == "+"){

constr.b = 1;

} else if(gc[2].Value == "-"){

constr.b = -1;

}

}

if(gc[4].Value == ">=") {

constr.rel = ConstraintRelation.ge;

} else if(gc[4].Value == "<=") {

constr.rel = ConstraintRelation.le;

} else if(gc[4].Value == "<") {

constr.rel = ConstraintRelation.lt;

} else if(gc[4].Value == ">") {

constr.rel = ConstraintRelation.gt;

} else if(gc[4].Value == "=") {

constr.rel = ConstraintRelation.eq;

}

constr.c = stoi(gc[5].Value);

trans.list_constr.Add(constr);

log("a=" + constr.a + " b=" + constr.b + " c=" + constr.c);

}

public void trans_symbol(string i_symbol) {

if(context != Context.trans) {

error("trans_symbol=" + i_symbol

+ ": контекст не переход");

}

if(i_symbol.Length > 0) current_transition.symbol = i_symbol[0];

}

public void trans(string i_state_from, string i_state_to) {

trans(i_state_from, i_state_to, null);

}

public void trans(string i_state_from, string i_state_to, string i_name) {

Form1.log("trans " + i_state_from + " -> " + i_state_to);

if(context != Context.type && context != Context.trans) {

error("При определении перехода " + i_state_from + "->"+i_state_to

+ " не определен контекст типа. "+context);

}

State s_from = state(i_state_from);

State s_to = state(i_state_to);

Transition trans = new Transition(s_from,s_to);

if(i_name != null) {

trans.name = i_name;

trans.chart_name = i_name;

}

current_type.list_trans.Add(trans);

s_from.list_trans.Add(trans);

trans.id = s_from.list_trans.Count()-1;

// trans.name += "(" + trans.id + ")";

context = Context.trans;

current_transition = trans;

}

int stoi(string i_ss) {

return stoi(i_ss, 0);

}

int stoi(string i_ss, int i_default) {

int rez = i_default;

rez = Int32.Parse(i_ss);

return rez;

}

double stod(string i_ss) {

return stod(i_ss, 0);

}

double stod(string i_ss, double i_default) {

double rez = i_default;

rez = double.Parse(i_ss);

return rez;

}

public void wait(string i_time) {

wait(i_time, i_time);

}

public void wait(string time_from, string time_to) {

if(context != Context.trans) {

error("wait time_from=" + time_from

+ " time_to=" + time_to

+ ": контекст не переход");

}

double time1 = stod(time_from, Transition.default_wait);

double time2 = stod(time_to, time1);

current_transition.wait_min = time1;

current_transition.wait_max = time2;

}

public void duration(string i_time) {

duration(i_time, i_time);

}

public void duration(string time_from, string time_to) {

if(context != Context.trans) {

error("duration time_from=" + time_from

+ " time_to="+ time_to

+ ": контекст не переход");

}

double time1 = stod(time_from, Transition.default_duration);

double time2 = stod(time_to, time1);

current_transition.duration_min = time1;

current_transition.duration_max = time2;

}

public void priority(string i_prty) {

if(context != Context.trans) {

error("priority=" + i_prty

+ ": контекст не переход");

}

int prty = stoi(i_prty, 1);

current_transition.priority = prty;

}

public void term_in(string i_port_name, string i_con_var, string i_state) {

term("in", i_port_name, i_con_var, i_state);

}

public void term_in(string i_port_name, string i_con_var) {

term("in", i_port_name,i_con_var, null);

}

public void term_out(string i_port_name, string i_con_var, string i_state) {

term("out", i_port_name, i_con_var, i_state);

}

public void term_out(string i_port_name, string i_con_var) {

term("out", i_port_name,i_con_var, null);

}

public void term(string i_dir, string i_port_name, string i_cv, string i_state) {

if(context != Context.trans) {

error("term_" + i_dir + "=" + i_port_name + "," + i_cv

+ ": контекст не переход");

}

Transition trans = current_transition;

if(!Ports.Contains(i_port_name)) {

error("term_" + i_dir + "=" + i_port_name + "," + i_cv

+ "порт не найден");

}

Port port = (Port)Ports[i_port_name];

Term term = null;

Res res = null;

if(Constants.Contains(i_cv)) {

Const c = (Const)Constants[i_cv];

if(c.type != port.type) {

error("term_" + i_dir + "=" + i_port_name + "," + i_cv

+ ": не совпадают типы! type(" + i_port_name + ")=" + port.type.name

+ ", type(" + i_cv + ")=" + c.type.name

);

}

term = new Term(port, c);

res = c;

} else if(Vars.Contains(i_cv)) {

Var v = (Var)Vars[i_cv];

if(port.type == null) {

error("term_" + i_dir + "=" + i_port_name + "," + i_cv

+ ": не определен тип порта");

}

log("1: v.type="+v.type.name

//+ " port.type="+port.type.name

);

if(v.type != port.type) {

error("term_" + i_dir + "=" + i_port_name + "," + i_cv

+ ": не совпадают типы! type(" + i_port_name + ")=" + port.type.name

+ ", type(" + i_cv + ")=" + v.type.name

);

}

log("2");

term = new Term(port, v);

log("3");

res = v;

/*

if(i_state != null) {

log("111: term_" + i_dir + "=" + i_port_name + "," +...


Подобные документы

  • Обзор средств компьютерного имитационного моделирования по созданию веб-приложения для визуализации имитационных моделей. Система имитационного моделирования AnyLogic, Arena, SimuLab. Серверная, клиентская часть. Модель работы отдела банка и участка цеха.

    дипломная работа [3,3 M], добавлен 25.05.2015

  • Проектирование и реализация модели, которая будет имитировать автозаправочную станцию с постоплатой. Подбор оптимальных параметров модели с учетом требований к сети массового обслуживания. Разработка модели в среде имитационного моделирования GPSS World.

    контрольная работа [279,5 K], добавлен 16.03.2014

  • Создание систем имитационного моделирования AnyLogic, Arena, SimuLab, Simbigraph и Forio. Серверная и клиентская часть. Разработка модели работы отдела банка, участка цеха, движения автобуса по маршруту и социальной сети. Описание web-приложения.

    дипломная работа [3,4 M], добавлен 25.05.2015

  • Разработка имитационной модели "Перекресток" для анализа бизнес-процессов предприятия и принятия решения в сложных условиях. Алгоритм построения имитационной модели на основе CASE-средств. Обзор программного обеспечения для имитационного моделирования.

    дипломная работа [2,6 M], добавлен 22.11.2015

  • Описание комплекса программных модулей, предназначенного для повышения эффективности аппаратных ресурсов компьютера. Характеристика компонентов сетевых и распределенных операционных систем. Модели сетевых служб. Способы разделения приложений на части.

    презентация [1,4 M], добавлен 10.11.2013

  • Роль гидродинамических процессов в современной технике и технологиях. Необходимость использования компьютерных методов при моделировании. Обзор дискретных моделей решетчатых газов. Соответствие реальных величин параметрам модели. Программное обеспечение.

    дипломная работа [1,6 M], добавлен 22.04.2012

  • Понятие компьютерной и информационной модели. Задачи компьютерного моделирования. Дедуктивный и индуктивный принципы построения моделей, технология их построения. Этапы разработки и исследования моделей на компьютере. Метод имитационного моделирования.

    реферат [29,6 K], добавлен 23.03.2010

  • Центральные магистрали передачи данных. Улучшение параметров мультисервисной сети за счет использования имитационного моделирования. Сети с трансляцией ячеек и с установлением соединения. Коммутация в сети Ethernet. Многоуровневая модель протоколов.

    курсовая работа [2,3 M], добавлен 25.06.2014

  • Значение вербальных и знаковых информационных моделей для исследования объектов, процессов, явлений. Роль метода формализации в процессе создания компьютерной модели. Использование программы AutoCAD для трехмерного моделирования и визуализации объекта.

    курсовая работа [866,5 K], добавлен 08.01.2015

  • Обзор пакетов программ, предназначенных для визуализации и анализа данных. Обоснование выбора среды программирования. Организация аварийного буфера. Передача данных от нижнего уровня к верхнему и сохранение данных. Отображение данных в графической форме.

    дипломная работа [512,4 K], добавлен 28.08.2012

  • Характеристики распределенных систем баз данных, формируемые путем "интеграции" разнородных аппаратных и программных средств. Концепция дифференциального файла для различных приложений. Сравнение разных технологий файлового сервера и "клиент-сервера".

    курсовая работа [411,9 K], добавлен 28.05.2015

  • Основы технологии моделирования Arena. Построение простой имитационной модели. Моделирование работы системы обслуживания покупателей на кассе супермаркета. Построение модели IDEF3. Анализ результатов имитационного моделирования и аналитического решения.

    курсовая работа [659,1 K], добавлен 24.03.2012

  • Сущность концептуального и физического моделирования. Описание графической среды AnyLogic как единственного инструмента имитационного моделирования. Основные этапы создания модели, позволяющей наглядно проанализировать влияние рекламы на покупателей.

    курсовая работа [690,2 K], добавлен 30.05.2014

  • Построение, исследование описательных и формальных информационных моделей. Применение электронных обучающих средств в современной системе образования. Обусловленность выбора средств разработки и языков программирования. Обзор пользовательского интерфейса.

    дипломная работа [7,3 M], добавлен 09.02.2017

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

    курсовая работа [1,4 M], добавлен 15.03.2012

  • Особенности систем массового обслуживания и сущность имитационного моделирования с использованием GPSS. Структурная схема модели системы и временная диаграмма. Сравнение результатов имитационного моделирования и аналитического расчета характеристик.

    курсовая работа [214,2 K], добавлен 23.06.2011

  • Основные характеристики и алгоритмы настройки виртуальной локальной вычислительной сети VLAN, протоколов маршрутизации, системы доменных имен и трансляции сетевых адресов с целью разработки корпоративной сети в среде имитационного моделирования.

    курсовая работа [556,1 K], добавлен 23.04.2011

  • Математическое описание имитационной модели. Описание блок-схемы алгоритма. Анализ полученных результатов имитационного моделирования. Сопоставление полученных результатов для разработанных моделей. Математическое описание аналитического моделирования.

    курсовая работа [306,5 K], добавлен 25.03.2015

  • Особенности моделирования биологических систем с использованием программы "AnyLogic". Влияние различных факторов на популяции жертв и хищников. Принципы имитационного моделирования и его общий алгоритм с помощью ЭВМ. Анализ результатов моделирования.

    курсовая работа [922,2 K], добавлен 30.01.2016

  • Характеристика функций имитационного моделирования. Знакомство с особенностями имитационного моделирования агрегированной системы массового обслуживания. Анализ программы GPSSWorld: рассмотрение возможностей, способы составления имитационной модели.

    курсовая работа [1,6 M], добавлен 27.05.2013

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.