Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.88/16: Рейтинг темы: голосов - 16, средняя оценка - 4.88
0 / 0 / 0
Регистрация: 06.01.2011
Сообщений: 9
1

Программа диагностики станков

06.01.2011, 18:49. Показов 3134. Ответов 18
Метки нет (Все метки)

Добрый день. Вообще то я не программист, а электроник. Обслуживаю санки с ЧПУ. Возникла идея написать программу диагностики станков.
Идея такова.
Выбираем модель станка, выбираем метод диагностики (по коду ошибки или по узлу). При выборе по коду ошибки в окошко edit я ввожу код ошибки, а в окошке едит1 выводится расшифровка этой ошибки и способы устранения. Ошибок более 100 штук, если прописываь ч/з оператор IF будет трудоемко и долго. Как сделать так, что бы программа брала данные из готовой заранее заполненной таблицы. Но и неиспользуя средства OFFICE, типа EXEL. Надеюсь задачу описал понятно.
Заранее спасибо.
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.01.2011, 18:49
Ответы с готовыми решениями:

Не запускается средство диагностики. Окно средств диагностики не поддерживает текущую конфигурацию отладки
При запуске отладки приложения должно появиться данное окошко: На данный момент при запуске...

Программа для диагностики ПК
Здравствуйте, есть программа для диагностики ПК При запуске на любых ОС появляется вот такая...

Программа диагностики ошибок
Тема курсовой работы: Программа диагностики ошибок. Программа обнаруживает в тексте программы на...

Программа диагностики СМА
Господа программисты! Неужели итальянские программисты лучше наших?! Имеется программа:...

18
2184 / 1254 / 143
Регистрация: 28.04.2010
Сообщений: 4,592
06.01.2011, 23:23 2
Цитата Сообщение от aalex_b Посмотреть сообщение
Но и неиспользуя средства OFFICE, типа EXEL
используй accese
0
0 / 0 / 0
Регистрация: 06.01.2011
Сообщений: 9
08.01.2011, 00:05  [ТС] 3
используй accese
- это внутренний ресурс Delphi. Хочу, что бы на другом компе не пришлось устанавливать другие программы.
И если не сложно подскажите, как можно реализовать запрос. Ввожу номер ошибки, а программа из заранее заполненной таблици выводит результат. Вкратце.
Я не профессионал, и не студент. Изучал в школе QBasic (даже на олимпиаду ездил), в универе Pascal.
Сейчас пришла мысль немного упорядочнить свой опыт в виде программки.
0
267 / 258 / 47
Регистрация: 08.10.2009
Сообщений: 554
08.01.2011, 01:29 4
Можно например так:
Создаем папку станки и там создаем текстовые файлы имена которых являются названиями моделей станков. Сами текстовые файлы имеюют такую структуру: первая строка - описание ошибки, вторая строка - как устранить эту ошибку, и так столько строк, сколько ошибок. Надеюсь понятно объяснил
Дальше читай комменты к программе)
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
var
  Form1: TForm1;
  FileErrors:text;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.FormCreate(Sender: TObject);
var
 Fi:TSearchRec;
begin
{тут при запуске программы считываются в comboBox названия моделей. 
Сколько файлов, столько моделей естественно))}
  if FindFirst('станки\'+'*.txt', faAnyFile, Fi)=0 then
    repeat
      Combobox1.Items.Add(copy(Fi.Name,1,length(Fi.Name)-4));
    until FindNext(Fi)<>0;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
  var
    i:integer;
    InfoErrors:string;
begin
{тут мы уже как бы выбрали какой то модель и код ошибки и теперь 
открываем выбранный файл для чтения}
  AssignFile(FileErrors,'Станки\'+ComboBox1.Items[ComboBox1.itemIndex]+'.txt');
  Reset(FileErrors);
{тут доходим до нашего описания ошибки,
 пропуская определенное количество строк }
  for i:= 1 to (StrToInt(Edit1.Text)-1)*2 do readln(FileErrors);
{и тут в мемо считываем описание ошибки, то есть первую строку...}
  readln(FileErrors,InfoErrors);
  Memo1.Lines.Add(InfoErrors);
 
{и считываем описание как его устранить, это уже вторая строка}
  readln(FileErrors,InfoErrors);
  Memo1.Lines.Add(InfoErrors);
end;
Ну вот, можешь взять такую идею, если нравится
1
Вложения
Тип файла: rar Станки.rar (5.9 Кб, 26 просмотров)
2670 / 1934 / 422
Регистрация: 11.09.2009
Сообщений: 7,159
08.01.2011, 13:12 5
aalex_b, в общем-то задача - сделать справочник.
Справочник под Windows легко сделать в формате справочной системы Windows.
Для упрощения создания справочников есть оболочки, в которых справочник создаётся практически как в Word'е. Например, программа "Help & Manual" фирмы EC Software www.helpandmanual.com.
1
902 / 663 / 132
Регистрация: 01.03.2010
Сообщений: 1,243
08.01.2011, 19:53 6
aalex_b,
Предложу Вам и свой вариант:
Вам необходимо
1) В процедуре TForm1.FormCreate в переменную WayFile указать путь, где будет храниться файл с описаниями ошибок
2) Запустить программу. По указанному пути автоматически создастся текстовой файл. В этом примере это будет файл AllErrors.txt.
3) Теперь откройте этот файл например блокнотом, и пишите данные по такому принципу:

#Error1#

Текст1

#End#


#Error2#

Текст2

#End#


Error1 и Error2 это ваши названия ошибок. Вы можете назвать их и по другому.
Далее идет текст произвольного размера.
#End# -это конец блока с данными. Его нужно писать именно так.

Принцип работы таков:
После ввода в Edit, в файле будет искаться строка, начинающаяся с названия ошибки + знаки # по краям. Эти знаки нужны, что бы не реагировать на поисковые слова, если они будут встречаться внутри текста. При вводе в Edit эти знаки ставить не надо.
Найдя нужное введенное слово, начнется считывание в memo1 всего, что написано ниже,
пока не встретится ближайшее слово #End#
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
 
type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Label1: TLabel;
    Edit1: TEdit;
    Button1: TButton;
    MemoBuffer: TMemo;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
  WayFile:string; // путь где лежит файл и его имя
 
implementation
 
{$R *.dfm}
 
// эта процедура(FormCreate) всегда выполняется первой , где бы не находилась в программе
procedure TForm1.FormCreate(Sender: TObject);
begin
 WayFile:='C:\AllErrors.txt';
 if not FileExists(WayFile) then Memo1.Lines.SaveToFile(WayFile); //создаем пустой файл, если его еще нет
 MemoBuffer.Hide;// спрячем MemoBuffer из формы, т.к. он нужен нам только как посредник в поиске нужного текста
end;
 
procedure TForm1.Button1Click(Sender: TObject);
var
  i:Integer;
  str:string;
  CopyBuffer:Boolean;
begin
   str:=Trim(Edit1.Text);// копируем edit в str. Заодно, при помощи Trim убираем крайние пробелы, если случайно их введут
   str:='#'+str+'#';// делаем поисковое слово таким, как оно выглядит в файле
 
   MemoBuffer.Clear;// очищаем
        Memo1.Clear;
 
//скачаем все содержимое файла AllErrors.txt в MemoBuffe
 MemoBuffer.Lines.LoadFromFile(WayFile);
 
   for i:=0 to MemoBuffer.Lines.Count-1 do // перебираем строки MemoBuffer начиная с первой
 begin
   if  Pos(str,MemoBuffer.Lines.Strings[i])<>0 then CopyBuffer:=True; //ищем начало нужного блока и даем разрешение на запись последующих строк
   if (CopyBuffer=True) and (MemoBuffer.Lines.Strings[i+1]<>'#End#')then Memo1.Lines.Add(MemoBuffer.Lines[i+1]); // пишем нужные строки
   if (CopyBuffer=True) and  (MemoBuffer.Lines.Strings[i]='#End#')
    then CopyBuffer:=False; // запрещаем дальнейшую запись из файла если дошли до  #End#
 end;
MemoBuffer.Clear;// очищаем буфер для работы со следующим поиском
end;
end.
Можно еще добавить возможность открывать файл для редактирования через пароль прямо из программы, сделать нечувствительность поиска к регистру букв в поисковом слове, ну и прочие радости
1
Вложения
Тип файла: rar Станки_Errors.rar (167.4 Кб, 23 просмотров)
0 / 0 / 0
Регистрация: 06.01.2011
Сообщений: 9
09.01.2011, 00:53  [ТС] 7
Евгений В - как говорится то, что дохтор прописал Сегодня помозгую, как переписать код подм свою формую Но есть вопросик.
Программа создала файл в корне диска с: allerrors. Я запустил твою программку, забил пару ошибок и ответ на них. Все заработало, но в конце результата пишет к примеру:
неисправен датчик S 61.6
#end#
Как этот #end# убрать?

Добавлено через 14 минут
Извиняюсь, не внимательно прочитал инструкцию создания текста ошибок: написал #end#, а нужно #End#. Разобрался.
Когда получится скину архив с кодом, если нужно.

Добавлено через 1 час 32 минуты
Уважаемый Евгений В. Посидел поломал голову. У меня была и раньше мысль поиска ч/з цикл, но не знал, как реализовать.
Переделал код под свою форму, но наткнулся на проблему: не создается файл, и не прячется MemoBuffer.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
unit MainUnit;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Menus, ExtCtrls, ComCtrls;
 
type
  TForm1 = class(TForm)
    MainMenu1: TMainMenu;
    N1: TMenuItem;
    N2: TMenuItem;
    N3: TMenuItem;
    N7: TMenuItem;
    pgc1: TPageControl;
    ts1: TTabSheet;
    ts2: TTabSheet;
    ts3: TTabSheet;
    pgc2: TPageControl;
    ts4: TTabSheet;
    ts5: TTabSheet;
    lbl1: TLabel;
    btn1: TButton;
    pb1: TProgressBar;
    grp1: TGroupBox;
    btn2: TButton;
    pnl1: TPanel;
    rb1: TRadioButton;
    rb2: TRadioButton;
    rb3: TRadioButton;
    rb4: TRadioButton;
    rb5: TRadioButton;
    rb6: TRadioButton;
    rb7: TRadioButton;
    lbl6: TLabel;
    lbl7: TLabel;
    lbl8: TLabel;
    lbl9: TLabel;
    btn3: TButton;
    MemoBuffer: TMemo;
    Edit1: TEdit;
    lbl2: TLabel;
    Memo1: TMemo;
    procedure FormCreate(Sender: TObject);
    procedure ClsoseClick(Sender: TObject);
    procedure AboutClick(Sender: TObject);
   // procedure Edit1Change(Sender: TObject);
    procedure btn1Click(Sender: TObject);
    procedure btn2Click(Sender: TObject);
    procedure btn3Click(Sender: TObject);
      private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
  WayFile:string; // путь где лежит файл и его имя
 
 
  implementation
 
uses AboutUnit;
 
{$R *.dfm}
 
procedure TForm1.FormCreate(Sender: TObject);
begin
 WayFile:='c:\ErrorsIS500.txt';
 if not FileExists(WayFile) then Memo1.Lines.SaveToFile(WayFile); //создаем пустой файл, если его еще нет
 MemoBuffer.Hide;// спрячем MemoBuffer из формы, т.к. он нужен нам только как посредник в поиске нужного текста
end;
 
 
procedure TForm1.ClsoseClick(Sender: TObject);
begin
 Close;
end;
 
procedure TForm1.AboutClick(Sender: TObject);
begin
 AboutForm.ShowModal;
end;
 
procedure TForm1.btn1Click(Sender: TObject);
 
 var
    i:Integer;
    str:string;
    CopyBuffer:Boolean;
 begin
   str:=Trim(Edit1.Text);// копируем edit в str. Заодно, при помощи Trim убираем крайние пробелы, если случайно их введут
   str:='#'+str+'#';// делаем поисковое слово таким, как оно выглядит в файле
 
   MemoBuffer.Clear;// очищаем
        Memo1.Clear;
 
     //скачаем все содержимое файла Errors.txt в MemoBuffe
  MemoBuffer.Lines.LoadFromFile(WayFile);
 
    for i:=0 to MemoBuffer.Lines.Count-1 do // перебираем строки MemoBuffer начиная с первой
    begin
      if  Pos(str,MemoBuffer.Lines.Strings[i])<>0 then CopyBuffer:=True; //ищем начало нужного блока и даем разрешение на запись последующих строк
        if (CopyBuffer=True) and (MemoBuffer.Lines.Strings[i+1]<>'#End#')then Memo1.Lines.Add(MemoBuffer.Lines[i+1]); // пишем нужные строки
       if (CopyBuffer=True) and  (MemoBuffer.Lines.Strings[i]='#End#') then CopyBuffer:=False; // запрещаем дальнейшую запись из файла если дошли до  #End#
    end;
  MemoBuffer.Clear;// очищаем буфер для работы со следующим поиском
 
 end;

Вы уж извините чайника
0
902 / 663 / 132
Регистрация: 01.03.2010
Сообщений: 1,243
09.01.2011, 02:30 8
aalex_b,
Другими словами не срабатывает процедура TForm1.FormCreate(Sender: TObject);.
Причины я не вижу.
Попробуй два раза подряд кликнуть по свободному месту формы (или в инспекторе формы кликни по OnCreate).
Если появится новая заготовка TForm1.FormCreate(Sender: TObject);, то старую удали, а данные перенеси в эту процедуру.

Если не поможет, то не знаю. Может что сделал с файлом проекта?

Попробуй вместо TForm1.FormCreate(Sender: TObject); использовать TForm1.FormShow(Sender: TObject);. Хотя, если заработает, то все равно остается вопрос с FormCreate.

Может скинешь архив проекта через расширенный режим диалогового окна форума (там, где пишешь сообщение)? В расширенном режиме есть кнопка Управление вложениями.
1
0 / 0 / 0
Регистрация: 06.01.2011
Сообщений: 9
09.01.2011, 16:27  [ТС] 9
Вроде заработало. Переделал проект заново шаг-за-шагом, сейчас вроде работает.
Сейчас работаю над процедурой поиска по узлу станка. Хочу использовать RadioButton. При выборе узла ( к примеру у RadioButton 1 Capture: Стол) выводятся выходные (на реле от УЧПУ) и входные (от датчиков В УЧПУ) сигналы.

Спасибо ещё раз.
0
902 / 663 / 132
Регистрация: 01.03.2010
Сообщений: 1,243
09.01.2011, 16:45 10
aalex_b,
Так не далеко и до программы управления станком
Кстати, если надо, могу объяснить как управлять LPT -портом. Задавать 1 или ноль на любом выходе

Добавлено через 6 минут
Цитата Сообщение от aalex_b Посмотреть сообщение
Сейчас работаю над процедурой поиска по узлу станка
Если нужна помощь, дай пример
0
0 / 0 / 0
Регистрация: 06.01.2011
Сообщений: 9
09.01.2011, 17:29  [ТС] 11
Так не далеко и до программы управления станком
- ну технологическое программирование (программа обработки детали) - это мы умеем. Электроник не просто тупо меняет платы, он ещё и анализирует причину сбоя и неисправности. Нередко ошибки бывают и в программе обработки.
Если нужна помощь, дай пример

Пример.
Вообще вся форма на основе вкладок PageControl: три модели стакков - три вкладки. Далее... В каждой вкладке по две вкладки: диагностика по коду ошибки - это мы разобрали - и по узлу.
Открываем вкладку "Поиск узлу". Там я сделал шесть радиобатонов с именами rb1-rb6, caption у них соответствует узлу (стол, магазин, шпиндель и т.д.). При выборе радиобатона и по нажатию на Button выводится диагностика. Как-то так.
0
902 / 663 / 132
Регистрация: 01.03.2010
Сообщений: 1,243
09.01.2011, 22:07 12
aalex_b,
Видимо ты все сделал, что хотел
0
0 / 0 / 0
Регистрация: 06.01.2011
Сообщений: 9
09.01.2011, 22:54  [ТС] 13
Сделать-то сделал, но как-то слишком массивно и примитивно:

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 procedure TForm1.btn2Click(Sender: TObject);   //  поиска диагностики по узлу
begin
 if rb1.Checked then lbl5.Caption:='hello';
 if rb1.Checked then lbl6.Caption:='hello2';
 if rb2.Checked then lbl5.Caption:='hello3';
 if rb2.Checked then lbl6.Caption:='hello4';
 if rb3.Checked then lbl5.Caption:='hello5';
 if rb3.Checked then lbl6.Caption:='hello22';
 if rb4.Checked then lbl5.Caption:='hello6';
 if rb4.Checked then lbl6.Caption:='hello26';
 if rb5.Checked then lbl5.Caption:='hello7';
 if rb5.Checked then lbl6.Caption:='hello27';
 if rb6.Checked then lbl5.Caption:='hello8';
 if rb6.Checked then lbl6.Caption:='hello28';
 if rb7.Checked then lbl5.Caption:='hello9';
 if rb7.Checked then lbl6.Caption:='hello29'
 
end;
hello - для того, что бы видеть результат.
ч/з цикл оно получится симпатишней, но как там завязать радиобатон - не придумал. Уже от книг в глазах рябит.
Но как говорится главное процесс.
0
902 / 663 / 132
Регистрация: 01.03.2010
Сообщений: 1,243
09.01.2011, 23:21 14
Цитата Сообщение от aalex_b Посмотреть сообщение
if rb1.Checked then lbl5.Caption:='hello';
if rb1.Checked then lbl6.Caption:='hello2';
почему повторяются rb?
1
0 / 0 / 0
Регистрация: 06.01.2011
Сообщений: 9
09.01.2011, 23:33  [ТС] 15
почему повторяются rb?
- приходит запрос к rb1 - один узел -, а выводит на lbl5 (вых. сигналы) и на lbl6 (вх. сигналы).
Пытался прописать ч/з and - чего-то не получилось
Delphi
1
if rb1.Checked then lbl5.Caption:='hello' and lbl6.Caption:='hello2';
0
902 / 663 / 132
Регистрация: 01.03.2010
Сообщений: 1,243
10.01.2011, 02:49 16
Цитата Сообщение от aalex_b Посмотреть сообщение
1
if rb1.Checked then lbl5.Caption:='hello' and lbl6.Caption:='hello2';
Delphi
1
2
3
4
5
6
7
8
9
10
if rb1.Checked then lbl5.Caption:='hello' else lbl6.Caption:='hello2';
// если так то, иначе (else) так
 
// или вариант нескольких присвоений
 
if rb1.Checked then 
begin
 lbl5.Caption:='hello';
 lbl6.Caption:='hello2';
end;
Я так понимаю, что вместо lbl5.Caption:='hello' (и т.п.) будет какое то действие? Или вывод текста?


Добавлено через 1 час 50 минут
aalex_b,

Не дождался от тебя, что последует после выбора RadioButton, действие или вывод информации.

Написал цикл для вывода информации исходя из состояния одного из 7 rb
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
for i:=1 to 7 do
  if TRadioButton(FindComponent('rb'+intToStr(i))).Checked then
   begin
   case i of
   1: begin lbl5.Caption:='hello'; lbl6.Caption:='hello2' end;
   2: begin lbl5.Caption:='hello3'; lbl6.Caption:='hello4' end;
   3:
   4:
   5:
   6:
   7:
   end;
   end;
При помощи FindComponent мы можем обратиться к компоненту, указав не сам компонент, а его имя в виде строки ( в нашем случае ('rb'+intToStr(i)). intToStr преобразует Integer в String ) и указав так же тип компонента (в нашем случае это TRadioButton).
ПолучилосьTRadioButton(FindComponent('rb'+intToStr(i))).

Допустим в цикле i=1. Тогда получится
TRadioButton(FindComponent('rb1')) . Это выражение полностью аналогично тому, если бы мы написали на прямую сам компонент rb1.
Т.е. команды
if TRadioButton(FindComponent('rb1')).Checked then
и
if rb1.Checked then
полностью аналогичны.

Так можно работать и с другими компонентами, указывая не сам компонент, а его имя и тип

Но если такого компонента не существует - выскочит ошибка.



Предложу еще вариант. Данные для rb хранить в том же файле, что и описание ошибок

#Error1#

Текст1

#End#


#Error2#

Текст2

#End#

==========================
сообщения , исходя из состояния rb

#rb1#
hello
hello2

#rb2#
hello3
hello4


В этих блоках #End# уже не нужен. Ведь мы знаем, что нужно считать две строки
Комментарии в файле тоже не помешают.
Если файл будет большим, то можно нужное искать поисковиком блокнота, или организовать поиск и редактирование прямо из программы.
Сама программа
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
procedure TForm1.btn1Click(Sender: TObject);
var
  i,j:Integer;
  str:string;
begin
 MemoBuffer.Clear;
 MemoBuffer.Lines.LoadFromFile('C:\AllErrors.txt');
 
 for i:=1 to 7 do
 if TRadioButton(FindComponent('rb'+intToStr(i))).Checked then
 begin
  str:='#'+'rb'+IntToStr(i)+'#' ;
   for j:=0 to MemoBuffer.Lines.Count-1 do // перебираем строки MemoBuffer начиная с первой
   if  Pos(str,MemoBuffer.Lines.Strings[j])<>0 then
    begin
      lbl5.Caption:=MemoBuffer.Lines.Strings[j+1];
      lbl6.Caption:=MemoBuffer.Lines.Strings[j+2];
      Break;
    end;
 end;
end;
1
0 / 0 / 0
Регистрация: 06.01.2011
Сообщений: 9
10.01.2011, 22:49  [ТС] 17
Доброе время суток.
Вчера голова разболелась и жинка разругалась - пошёл спать. Извиняюсь.
Сегодня после работы попытался переписать код под себя:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
procedure TForm1.btn2Click(Sender: TObject);   //  поиска по узлу
var
  i,j:Integer;
  str:string;
  CopyBuffer:Boolean;
begin
 MemoBuffer.Clear;
 MemoBuffer.Lines.LoadFromFile('C:\Станки\ErrorsIS500.txt');
 
 for i:=1 to 7 do
 if TRadioButton(FindComponent('rb'+intToStr(i))).Checked then
 begin
  str:='#'+'rb'+IntToStr(i)+'#' ;
   for j:=0 to MemoBuffer.Lines.Count-1 do // перебираем строки MemoBuffer начиная с первой
   if  Pos(str,MemoBuffer.Lines.Strings[j])<>0 then CopyBuffer:=True;
     if (CopyBuffer=True) and (MemoBuffer.Lines.Strings[j+1]<>'#End#')then
    begin
      lbl3.Caption:=MemoBuffer.Lines.Strings[j+1];
    End;
    if (CopyBuffer=True) and  (MemoBuffer.Lines.Strings[i]='#End#') then CopyBuffer:=False;
 end;
end;
Решил объеденить Labelы в один, а вых/вх писать в файле ошибок.
Структура файла ошибок:
#rb1#
Входные сигналы
Стол разжат 32.1
Стол зажат 32.2
"0" стола 33.2

Выходные сигналы
Разжим стола 3.2
Зажим стола 3.3
#End#

#rb2#
Входные сигналы
Магазин зажат 25.1
//-//- 25.2
//-//- 25.3

Выходные сигналы
Зажим магазина 5.2
//-///- 5.2
//-//- 2.5
#End#
Ничего в итоге не в lbl3 выводит
Сейчас ловлю ошибку.

Добавлено через 3 часа 17 минут
Ч/з lbl сделать не получилось. Сделал ч/з Memo:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
procedure TForm1.btn2Click(Sender: TObject);   //  поиска диагностики по узлу
var
  i,j:Integer;
  str:string;
  CopyBuffer:Boolean;
begin
 MemoBuffer.Clear;
 MemoBuffer.Lines.LoadFromFile('C:\Станки\ErrorsIS500.txt');
 
 for i:=1 to 7 do
 if TRadioButton(FindComponent('rb'+intToStr(i))).Checked then
 begin
  str:='#'+'rb'+IntToStr(i)+'#';
   for j:=0 to MemoBuffer.Lines.Count-1 do // перебираем строки MemoBuffer начиная с первой
  begin
   if  Pos(str,MemoBuffer.Lines.Strings[j])<>0 then CopyBuffer:=True;
     if (CopyBuffer=True) and (MemoBuffer.Lines.Strings[j+1]<>'#End#') then Memo3.Lines.Add(MemoBuffer.Lines[j+1]);
   if (CopyBuffer=True) and (MemoBuffer.Lines.Strings[j+1]='#End#') then CopyBuffer:=False;
  end;
 
 end;
 MemoBuffer.Clear;
end;
 
procedure TForm1.btn4Click(Sender: TObject);
begin
 Memo3.Lines.Clear;
end;
0
902 / 663 / 132
Регистрация: 01.03.2010
Сообщений: 1,243
11.01.2011, 00:09 18
Цитата Сообщение от aalex_b Посмотреть сообщение
жинка разругалась
Это мне знакомо
А если по делу. Можно и через Label. Но в коде есть неточности.

Цитата Сообщение от aalex_b Посмотреть сообщение
for j:=0 to MemoBuffer.Lines.Count-1 do // перебираем строки MemoBuffer начиная с первой if Pos(str,MemoBuffer.Lines.Strings[j])<>0 then CopyBuffer:=True;
Так у тебя будут выполнятся только эти две строчки. Будет постоянно происходить CopyBuffer:=True. Если нужно выполнение какого блока, то необходимо ставить операторные скобки Begin и End. Внутри них и делать задуманное.
Delphi
1
2
3
4
for j:=0 to MemoBuffer.Lines.Count-1 do 
begin
 
end;

Цитата Сообщение от aalex_b Посмотреть сообщение
if (CopyBuffer=True) and (MemoBuffer.Lines.Strings[i]='#End#') then CopyBuffer:=False;
Здесь нужно ставить j, т.к. i - это номер rb а не строка.

В Label обычно пишется одна строка. Но можно писать и несколько, если в конце каждой строки добавлять знак конца строки (#10) и перевод каретки (#13)

Вот твой вариант, с учетом сказанного
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
procedure TForm1.btn2Click(Sender: TObject);   //  поиска по узлу
var
  i,j:Integer;
  str:string;
  CopyBuffer:Boolean;
begin
 
 MemoBuffer.Clear;
 MemoBuffer.Lines.LoadFromFile('C:\Станки\ErrorsIS500.txt');
 
 lbl3.Caption:=''; // очищаем lbl3
 
 for i:=1 to 7 do
  if TRadioButton(FindComponent('rb'+intToStr(i))).Checked then
  begin
     str:='#'+'rb'+IntToStr(i)+'#' ;
   for j:=0 to MemoBuffer.Lines.Count-1 do // перебираем строки MemoBuffer начиная с первой
   begin
    if  Pos(str,MemoBuffer.Lines.Strings[j])<>0 then CopyBuffer:=True;
      if (CopyBuffer=True) and (MemoBuffer.Lines.Strings[j+1]<>'#End#')then
       lbl3.Caption:=lbl3.Caption+#10#13+MemoBuffer.Lines.Strings[j+1];
    if (CopyBuffer=True) and  (MemoBuffer.Lines.Strings[j]='#End#') then CopyBuffer:=False;
   end;{for j:=0}
 end;{if TRadioButton}
end;
Удачи! Если что - пиши.
1
0 / 0 / 0
Регистрация: 06.01.2011
Сообщений: 9
11.01.2011, 11:28  [ТС] 19
Добрый день. Сейчас на работе, обеденный перерыв - решил отписаться.
Ошибку выловил: стала выводить в lbl, но так как не знал об
В Label обычно пишется одна строка. Но можно писать и несколько, если в конце каждой строки добавлять знак конца строки (#10) и перевод каретки (#13)
- переписал под Memo. После работы подредактирую.
Сейчас изучаю документацию на системы управления: способы увязать станок с ПК. Хотя технологические программы вводим ч\з ПК, при помощи спец. программы, а вот про чтение вх\вых сигналов не знаю. Буду искать.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.01.2011, 11:28

Программа диагностики заболеваний
Хочу написать программу на плюсах, которая по симптомам ставит диагноз. Думаю создать класс...

Программа диагностики рентабельности предприятия
тема: Программа диагностики рентабельности предприятия. Исходные данные и основные требования:...

Программа для диагностики HDD
Подскажите программу для диагностики HDD и устранение их , проблемы ужасные , на другом таком-же...

Программа для диагностики системы
Доброго времени суток, Господа! Пожалуйста, помогите создать программу диагностирующая систему ПК...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.