Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 05.02.2014, 12:23
Fransuz_F Fransuz_F вне форума
Прохожий
 
Регистрация: 05.02.2014
Сообщения: 12
Версия Delphi: Delphi 6
Репутация: 10
По умолчанию Построение программы

Есть код программы, нужно реализовать эту программу в реальность. Форумчане помогите новичку
Код:
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
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
unit U_Main;
  
interface
  
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls,strUtils, iniFiles, Buttons;
  
type
  TReadThread = class(TThread)
     private
     protected
     procedure Execute; override;
     end;
  
  
  
  
  
type
  TFm_Main = class(TForm)
    Panel1: TPanel;
    Ed_Ch1: TEdit;
    Label1: TLabel;
    Ed_Ch2: TEdit;
    Label2: TLabel;
    Tm_Reg: TTimer;
    Panel2: TPanel;
    SpeedButton1: TSpeedButton;
    Tm_Read: TTimer;
    ComboBox1: TComboBox;
    Label8: TLabel;
    Label7: TLabel;
    Label6: TLabel;
    Bevel1: TBevel;
    Label9: TLabel;
    Tm_Screen: TTimer;
    Label10: TLabel;
    Ed_Ch3: TEdit;
    Bevel2: TBevel;
    Bevel3: TBevel;
    SpeedButton2: TSpeedButton;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Ed_Ch4: TEdit;
    Ed_Ch5: TEdit;
    Ed_Ch6: TEdit;
    procedure FormCreate(Sender: TObject);
    procedure Tm_RegTimer(Sender: TObject);
    procedure SpeedButton1Click(Sender: TObject);
    procedure Tm_ReadTimer(Sender: TObject);
    procedure ComboBox1Change(Sender: TObject);
    procedure Tm_ScreenTimer(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
  
const
Count_Ch=6;
Time_delay=50;
  
  
var
  Fm_Main: TFm_Main;
  DCB   : TDCB;
  CT:  TCommTimeouts;
  hPort : THandle;
  RegFile:TFileStream;
  ReadThread:TReadThread;
  NamePatch:String;
  ByteWritten,ByteReaded:dword;
  RegStart:boolean=false;
  ReadByte:array [0..255] of char;
  Value:array[0..16] of string;
  RegFileName,StrFile:string;
  str,s:string;
  tick:integer=0;
  tick_reg:integer=0;
  INI:TIniFile;
  Path:string;
  RSPort:string;
  Cycle:integer;
  
  
implementation
  
{$R *.dfm}
  
function parse_date_time(str:string):string;
  begin
  if(length(str) = 1) then
    result:='0'+ str
   else
    result:=str;
  end;
  
  
  
function DeleteLineBreaks(const S: string): string;
var
  Source, SourceEnd: PChar;
begin
  Source := Pointer(S);
  SourceEnd := Source + Length(S);
  while Source < SourceEnd do
  begin
    case Source^ of
      #10: Source^ :=#32;
      #13: Source^ :=#32;
    end;
    Inc(Source);
  end;
  Result := S;
end;
  
Function DeleteProbel(s: string): string;
var
  i, n, L : integer;
  st:string;
begin
  for i := 1 To length(s) do
  begin
    n:=pos('  ',s);
    If n<>0 Then
     begin
      Delete(s,n,2);
      n:=0;
     end;
    n:=pos(' ',s);
    If n<>0 Then
     begin
      Delete(s,n,1);
      n:=0;
     end;
   end;
   Result:=s;
end;
  
  
procedure StartRead;
begin
ReadThread:=TReadThread.Create(True);
 with ReadThread do begin
  Priority:=tpNormal;
  FreeOnTerminate:=True;
  Resume;
 end
end;
  
Procedure Create_RegFile;
begin
RegFileName:='Micron_'+datetostr(now)+'.csv';
if FileExists(RegFileName) Then
  begin
     RegFile := TFileStream.Create(RegFileName,fmOpenWrite or fmShareDenyRead);
     RegFile.Seek(0,soFromEnd);
  end
  else
  begin
   RegFile:=TFileStream.Create(RegFileName, fmCreate or fmOpenReadWrite or fmShareDenyNone);
   StrFile:=StrFile+'Время;SW;LW;RTO;WT;Alarm;Dtemp;';
   //          SW    LW    RTO   WT   Alarm   Dtemp
   StrFile:= StrFile +#13+#10;
   RegFile.Write(PChar(StrFile)^, Length(StrFile));
  end;
end;
  
  
  
Procedure Write_RegFile;
var
str:string;
i:integer;
Min, Hour, Sec, Msec: word;
begin
DecodeTime(Now, Hour, Min, Sec,Msec);
StrFile:='';
StrFile:=StrFile+parse_date_time(IntToStr(Hour))+':'+parse_date_time(IntToStr(Min))+':'+parse_date_time(IntToStr(Sec))+'.'+parse_date_time(IntToStr(Msec))+';'
+Value[1]+';'+Value[2]+';'+Value[3]+';'+Value[4]+';'+Value[5]+';'+Value[6]+';';
StrFile:= StrFile +#13;
RegFile.Write(PChar(StrFile)^, Length(StrFile));
end;
  
procedure clr_com;
begin
{PurgeComm(hPort,PURGE_TXCLEAR);
PurgeComm(hPort,PURGE_RXCLEAR);
PurgeComm(hPort,PURGE_RXABORT);
PurgeComm(hPort,PURGE_TXABORT);}
PurgeComm(hPort, PURGE_TXABORT or PURGE_RXABORT or PURGE_TXCLEAR or PURGE_RXCLEAR);
str:='';
s:='';
end;
  
Function Init_Device():boolean;
begin
 NamePatch:=ExtractFilePath('..\');
 hPort := CreateFile(PChar(RSPort),GENERIC_READ + GENERIC_WRITE,0, nil,OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
 if hPort = INVALID_HANDLE_VALUE then
 begin
 exit;
 end;
 if not GetCommState(hPort, DCB) then ShowMessage('Ошибка чтения настроек порта') else
  begin
  DCB.BaudRate :=CBR_19200;
  DCB.ByteSize :=8;
  DCB.StopBits :=ONESTOPBIT;
  DCB.Parity   :=0;
  
  
  
   if not SetCommState(hPort, DCB) then  ShowMessage('Ошибка записи настроек порта');
   CT.ReadTotalTimeoutConstant:=80;
   CT.ReadIntervalTimeout := 80;
   CT.ReadTotalTimeoutMultiplier :=80;
   CT.WriteTotalTimeoutMultiplier := 80;
   CT.WriteTotalTimeoutConstant := 80;
   If Not SetCommTimeouts(hPort, CT) Then ShowMessage('Ошибка конфигурации таймаутов !!!');
   if not SetupComm(hPort, 2048, 2048) then ShowMessage('Ошибка записи настроек буферов порта');
   if PurgeComm(hPort, PURGE_TXABORT or PURGE_RXABORT or PURGE_TXCLEAR or PURGE_RXCLEAR) then  ;
  end;
  
  
  
  
  
Result:=True;
Fm_Main.Tm_Read.Interval:=Cycle;
Fm_Main.Tm_Read.Enabled:=True;
  
end;
  
Procedure TReadThread.Execute;
var
index:integer;
i:integer;
s1:string;
ch:byte;
begin
  
     clr_com;
     str:='';
     str:='яяM01R001'+#13; // Получить данные со всех каналов с устройства с адресом 01
     WriteFile(hPort,pchar(str)^,Length(Str),ByteWritten,Nil);
     ReadFile(hport,ReadByte,SizeOf(ReadByte),ByteReaded,Nil);
     s:=ReadByte;
     s:=DeleteLineBreaks(s);
     s:=DeleteProbel(s);
  
  
  
     Value[1]:=MidStr(s,7,5);
     Value[2]:=MidStr(s,12,5);
     Value[3]:=MidStr(s,17,5);
     Value[4]:=MidStr(s,22,5);
     Value[5]:=MidStr(s,27,5);
     Value[6]:=MidStr(s,33,5);
  
//яяM01R001 -запрос
//01R001100001000000982000000000000020 - ответ
//01 R001 10000 10000 00982 00000 00000  00020
//          SW    LW    RTO   WT   Alarm   Dtemp
  
  
end;
  
  
procedure TFm_Main.FormCreate(Sender: TObject);
begin
Path:=GetCurrentDir;
INI := TIniFile.Create(Path+'\Settings.ini');
RSPort:=INI.ReadString('Main','Rsport','COM1');
Cycle:=INI.ReadInteger('Main','Cycle',1000);
Init_Device;
Create_RegFile;
SpeedButton1.Caption:='ЗАПУСТИТЬ'+#13+#10+'РЕГИСТРАЦИЮ';
Label10.Caption:='Период регистрации';
end;
  
procedure TFm_Main.Tm_RegTimer(Sender: TObject);
begin
If RegStart Then
begin
Write_RegFile;
inc(tick_reg);
Label8.Caption:='Регистрация: '+IntToStr(tick_reg);
end;
  
end;
  
procedure TFm_Main.SpeedButton1Click(Sender: TObject);
begin
If SpeedButton1.Down Then
begin
RegStart:=True;
SpeedButton1.Font.Color:=clRed;
SpeedButton1.Caption:='ОСТАНОВИТЬ'+#13+#10+'РЕГИСТРАЦИЮ';
end
Else
begin
RegStart:=False;
SpeedButton1.Font.Color:=clGreen;
SpeedButton1.Caption:='ЗАПУСТИТЬ'+#13+#10+'РЕГИСТРАЦИЮ';
end;
end;
  
procedure TFm_Main.Tm_ReadTimer(Sender: TObject);
begin
inc(tick);
Label7.Caption:='Опрос Micron: '+IntToStr(tick);
StartRead;
end;
  
procedure TFm_Main.ComboBox1Change(Sender: TObject);
begin
Case ComboBox1.ItemIndex Of
0: Tm_Reg.Interval:=100;
1: Tm_Reg.Interval:=500;
2: Tm_Reg.Interval:=1000;
3: Tm_Reg.Interval:=5000;
4: Tm_Reg.Interval:=10000;
5: Tm_Reg.Interval:=30000;
6: Tm_Reg.Interval:=60000;
7: Tm_Reg.Interval:=300000;
8: Tm_Reg.Interval:=1000000;
  
end;
end;
  
function after(const Search, Find: string): string;
var
  
  index: byte;
begin
  
  index := Pos(Find, Search);
  if index = 0 then
    Result := ''
  else
    Result := Copy(Search, index + Length(Find), 255);
end;
  
  
procedure TFm_Main.Tm_ScreenTimer(Sender: TObject);
begin
Fm_Main.Ed_Ch1.Text:=Value[1];
Fm_Main.Ed_Ch2.Text:=Value[2];
Fm_Main.Ed_Ch3.Text:=Value[3];
Fm_Main.Ed_Ch4.Text:=Value[4];
Fm_Main.Ed_Ch5.Text:=Value[5];
Fm_Main.Ed_Ch6.Text:=Value[6];
end;
  
end.

Последний раз редактировалось Admin, 05.02.2014 в 19:36.
Ответить с цитированием
  #2  
Старый 05.02.2014, 12:48
Аватар для Mrak
Mrak Mrak вне форума
Местный
 
Регистрация: 26.01.2013
Адрес: МО
Сообщения: 438
Версия Delphi: XE2
Репутация: 17
По умолчанию

а че не получается-то?
__________________
Я за здоровый экстрим!
Спасибо за "спасибо")
Ответить с цитированием
  #3  
Старый 05.02.2014, 13:11
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Кнопку с зеленой стрелочкой (на которой красный жучок) не видит.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #4  
Старый 05.02.2014, 13:21
Fransuz_F Fransuz_F вне форума
Прохожий
 
Регистрация: 05.02.2014
Сообщения: 12
Версия Delphi: Delphi 6
Репутация: 10
По умолчанию

Форму не удается построить мне((,
Ответить с цитированием
  #5  
Старый 05.02.2014, 13:37
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от Fransuz_F
Форму не удается построить мне((,
К этому исходнику нужен ещё dfm-файл - именно в этом файле описаны компоненты лежащие на форме, их местоположение и другие свойства. Без dfm-файл воссоздать в точности форму невозможно. Но можно попытаться воссоздать приблизительно: создаёшь новый проект, бросаешь на форму компоненты которые перечислены в классе TFm_Main и даёшь им указанные имена, так же и саму форму переименовываешь из "Form1" в "Fm_Main", потом создай обработчики событий перечисленные в классе TFm_Main и наконец замени исходник в редакторе кода.
Ответить с цитированием
  #6  
Старый 05.02.2014, 15:20
Fransuz_F Fransuz_F вне форума
Прохожий
 
Регистрация: 05.02.2014
Сообщения: 12
Версия Delphi: Delphi 6
Репутация: 10
По умолчанию

Я даже компонентов таких не нашел таких как например Ed_ch1...Ed_ch6,
Tm_reg, Tm_read((
Ответить с цитированием
  #7  
Старый 05.02.2014, 15:33
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Это их имена в программе, а сами копоненты
Код:
1
Ed_Ch1: TEdit;// Это едит, поле для ввода
Ответить с цитированием
  #8  
Старый 06.02.2014, 09:27
Fransuz_F Fransuz_F вне форума
Прохожий
 
Регистрация: 05.02.2014
Сообщения: 12
Версия Delphi: Delphi 6
Репутация: 10
По умолчанию

Я поставил все кнопки панели и т.д, но все равно ничего не получается, выдает все время ошибку. Помогите с написанием этой программы((.
Ответить с цитированием
  #9  
Старый 06.02.2014, 10:05
Аватар для wladimir_object
wladimir_object wladimir_object вне форума
Прохожий
 
Регистрация: 31.08.2013
Адрес: ст. Отрадная, Краснодарский край
Сообщения: 12
Версия Delphi: Delphi 7.0
Репутация: 10
Злость

Цитата:
Сообщение от Fransuz_F
Помогите с написанием этой программы.
Где ты увидел здесь написание программы?
Цитата:
Сообщение от Fransuz_F
Я поставил все кнопки панели и т.д, но все равно ничего не получается, выдает все время ошибку
То, что ты хочешь - делается элементарно. Какую хоть ошибку выдает?
Ответить с цитированием
  #10  
Старый 06.02.2014, 12:00
Fransuz_F Fransuz_F вне форума
Прохожий
 
Регистрация: 05.02.2014
Сообщения: 12
Версия Delphi: Delphi 6
Репутация: 10
По умолчанию

Error in module : Declaration of class TForm1 is missing or incorrect
Ответить с цитированием
  #11  
Старый 06.02.2014, 12:01
Fransuz_F Fransuz_F вне форума
Прохожий
 
Регистрация: 05.02.2014
Сообщения: 12
Версия Delphi: Delphi 6
Репутация: 10
По умолчанию

Ну форму построить же можно?? Как это сделать
Ответить с цитированием
  #12  
Старый 06.02.2014, 12:55
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от Fransuz_F
Error in module : Declaration of class TForm1 is missing or incorrect
А откуда у тебя в проекте взялся класс "TForm1"? Я же писал, что нужно изменить имя формы с "Form1" на "Fm_Main" - не выполнил всю последовательность что я написал вот и получил ошибку.
Ответить с цитированием
  #13  
Старый 06.02.2014, 13:33
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

А вы кстати комбобокс заполнили? На всякий случай, нужно 9 строчек добавить - нажать на items и набрать их плюс записать в Text дефолтное значение интервала - иначе не будет у таймера выбора
Ответить с цитированием
  #14  
Старый 06.02.2014, 13:37
Fransuz_F Fransuz_F вне форума
Прохожий
 
Регистрация: 05.02.2014
Сообщения: 12
Версия Delphi: Delphi 6
Репутация: 10
Печаль

Сейчас попробую заново сделать
Ответить с цитированием
  #15  
Старый 07.02.2014, 13:39
Fransuz_F Fransuz_F вне форума
Прохожий
 
Регистрация: 05.02.2014
Сообщения: 12
Версия Delphi: Delphi 6
Репутация: 10
По умолчанию

Да ну нафиг, ничего не получается!
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 20:48.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025