s7 300 data blok soru

tolga_o

Üye
Katılım
17 Ocak 2007
Mesajlar
62
Puanları
1
Yaş
39
arkadaşlar db1.dbd 0 a bir veri kaydettim daha sonra yeni veri kaydetmek istedigimde bu veriyi db1.dbd4 de kaydırmasını istiyorum db1.dbd160 a kadar.bunu s7 300de nasıl yapabilirim

herkese iyi çalışmalar
 
KNX Standardı, küçük bir rezidansın içerisindeki aydınlatma, perde panjur, klima kontrolünden, Dünya’nın en büyük havalimanlarındaki aydınlatma otomasyonu gibi çözümler için tercih edilen bir Dünya standardıdır.
Yazımızda endüstrinin can damarı sayılabilecek PLC’yi inceleyeceğiz.
soruyu tam anlamadım ama bir bilgiyi move komutu ile istediğin adrese taşıyabilirsin.
 
arkadaşım move komutu ile cok uzun oluyor ben db1 de ilk kaydettigimin üzerine yazınca ilk kaydettigimi ikinci sıraya taşımasını istiyorum.
 
Aşağıda verdiğim STL kodlarını Simatic Manager projende Source kısmında yeni STL Source oluştur ve aşağıdaki DB ve FC için ayrı ayrı kaydet ve Compile yap. OB1 de FC15 i çağır ve DB kısmına 15 gir. Fonksiyonu bir bitin çıkan kenarıyla Enable et. Datablokda
DB15 DBD0 (ARRAY0) = 0
DB15 DBD4(ARRAY1) = 1
DB15 DBD8 (ARRAY2)= 2
DB15 DBD12 (ARRAY3)= 3
.
.
DB15 DBD392(ARRAY98)= 98

şeklinde dolduracak. Sende fonksiyon içerisinde döngüde istediğin değişiklikleri yaparak uygulamana göre şekillendirebilirsin.

Data Blok STL Kodu
DATA_BLOCK DB 15
TITLE =
VERSION : 0.1


STRUCT
sayi : ARRAY [0 .. 100 ] OF //Temporary placeholder variable
REAL := 0.000000e+000;
END_STRUCT ;
BEGIN
sayi[0] := 0.000000e+000;
sayi[1] := 0.000000e+000;
sayi[2] := 0.000000e+000;
sayi[3] := 0.000000e+000;
sayi[4] := 0.000000e+000;
sayi[5] := 0.000000e+000;
sayi[6] := 0.000000e+000;
sayi[7] := 0.000000e+000;
sayi[8] := 0.000000e+000;
sayi[9] := 0.000000e+000;
sayi[10] := 0.000000e+000;
sayi[11] := 0.000000e+000;
sayi[12] := 0.000000e+000;
sayi[13] := 0.000000e+000;
sayi[14] := 0.000000e+000;
sayi[15] := 0.000000e+000;
sayi[16] := 0.000000e+000;
sayi[17] := 0.000000e+000;
sayi[18] := 0.000000e+000;
sayi[19] := 0.000000e+000;
sayi[20] := 0.000000e+000;
sayi[21] := 0.000000e+000;
sayi[22] := 0.000000e+000;
sayi[23] := 0.000000e+000;
sayi[24] := 0.000000e+000;
sayi[25] := 0.000000e+000;
sayi[26] := 0.000000e+000;
sayi[27] := 0.000000e+000;
sayi[28] := 0.000000e+000;
sayi[29] := 0.000000e+000;
sayi[30] := 0.000000e+000;
sayi[31] := 0.000000e+000;
sayi[32] := 0.000000e+000;
sayi[33] := 0.000000e+000;
sayi[34] := 0.000000e+000;
sayi[35] := 0.000000e+000;
sayi[36] := 0.000000e+000;
sayi[37] := 0.000000e+000;
sayi[38] := 0.000000e+000;
sayi[39] := 0.000000e+000;
sayi[40] := 0.000000e+000;
sayi[41] := 0.000000e+000;
sayi[42] := 0.000000e+000;
sayi[43] := 0.000000e+000;
sayi[44] := 0.000000e+000;
sayi[45] := 0.000000e+000;
sayi[46] := 0.000000e+000;
sayi[47] := 0.000000e+000;
sayi[48] := 0.000000e+000;
sayi[49] := 0.000000e+000;
sayi[50] := 0.000000e+000;
sayi[51] := 0.000000e+000;
sayi[52] := 0.000000e+000;
sayi[53] := 0.000000e+000;
sayi[54] := 0.000000e+000;
sayi[55] := 0.000000e+000;
sayi[56] := 0.000000e+000;
sayi[57] := 0.000000e+000;
sayi[58] := 0.000000e+000;
sayi[59] := 0.000000e+000;
sayi[60] := 0.000000e+000;
sayi[61] := 0.000000e+000;
sayi[62] := 0.000000e+000;
sayi[63] := 0.000000e+000;
sayi[64] := 0.000000e+000;
sayi[65] := 0.000000e+000;
sayi[66] := 0.000000e+000;
sayi[67] := 0.000000e+000;
sayi[68] := 0.000000e+000;
sayi[69] := 0.000000e+000;
sayi[70] := 0.000000e+000;
sayi[71] := 0.000000e+000;
sayi[72] := 0.000000e+000;
sayi[73] := 0.000000e+000;
sayi[74] := 0.000000e+000;
sayi[75] := 0.000000e+000;
sayi[76] := 0.000000e+000;
sayi[77] := 0.000000e+000;
sayi[78] := 0.000000e+000;
sayi[79] := 0.000000e+000;
sayi[80] := 0.000000e+000;
sayi[81] := 0.000000e+000;
sayi[82] := 0.000000e+000;
sayi[83] := 0.000000e+000;
sayi[84] := 0.000000e+000;
sayi[85] := 0.000000e+000;
sayi[86] := 0.000000e+000;
sayi[87] := 0.000000e+000;
sayi[88] := 0.000000e+000;
sayi[89] := 0.000000e+000;
sayi[90] := 0.000000e+000;
sayi[91] := 0.000000e+000;
sayi[92] := 0.000000e+000;
sayi[93] := 0.000000e+000;
sayi[94] := 0.000000e+000;
sayi[95] := 0.000000e+000;
sayi[96] := 0.000000e+000;
sayi[97] := 0.000000e+000;
sayi[98] := 0.000000e+000;
sayi[99] := 0.000000e+000;
sayi[100] := 0.000000e+000;
END_DATA_BLOCK


Fonksiyon Blok STL Kodu

FUNCTION FC 15 : VOID
TITLE =
VERSION : 0.1


VAR_INPUT
dbno_in : INT ;
END_VAR
VAR_TEMP
dbno_temp : INT ;
sayi : REAL ;
END_VAR
BEGIN
NETWORK
TITLE =

NETWORK
TITLE =

L #dbno_in;
T #dbno_temp;
OPN DB [#dbno_temp];

L 0.000000e+000;
T #sayi;
LAR1 P#0.0;
T DBD [AR1,P#0.0];


L 99;
next: T MB 80;
L #sayi;
T DBD [AR1,P#0.0];
+AR1 P#4.0;
L #sayi;
L 1.000000e+000;
+R ;
T #sayi;

L MB 80;
LOOP next;
END_FUNCTION
 
tolga_o ' Alıntı:
arkadaşlar db1.dbd 0 a bir veri kaydettim daha sonra yeni veri kaydetmek istedigimde bu veriyi db1.dbd4 de kaydırmasını istiyorum db1.dbd160 a kadar.bunu s7 300de nasıl yapabilirim

Slm

Anlatmak istediğiniz bu mudur...(SAYILAR ÖRNEK OLARAK VERİLMİŞTİR)
Kod:
1234 --> DB1.DBD0=1234
5678 --> DB1.DBD0=5678
    DB1.DBD4=1234
9ABC --> DB1.DBD0=9ABC
   DB1.DBD4=5678
   DB1.DBD8=1234

Eğer anlatılmak istenen yukarıdaki gibi ise Erol kardeşimizin çözümü ile sonuca ulaşamayız.Sorunuzu net sorarsanız insanların vaktini de fazla almamış olursunuz.

Saygılar
 
Kod:
Slm

Anlatmak istediğiniz bu mudur...(SAYILAR ÖRNEK OLARAK VERİLMİŞTİR)

Kod:
1234 --> DB1.DBD0=1234
5678 --> DB1.DBD0=5678
DB1.DBD4=1234
9ABC --> DB1.DBD0=9ABC
DB1.DBD4=5678
DB1.DBD8=1234

HansAndersen evet arkadaşım ögrenmek istedigim bu.nasıl yapabilirim bu işlemi
iyi calışmalar
 
Ben sadece yol göstermesi açısından bu örneği vermiştim. Tabiki problemin çözümü değil. Fazla vaktim yok deneme fırsatımda olmadı. Ekte çözüm amaçlı birşeyler yaptım. İnşallah çalışır.
 

Ekli dosyalar

  • Tolga_o_.zip
    280.5 KB · Görüntüleme: 20
Boş bir proje açın.Aşağıda yazılan kodu source kısmında yeni oluşturacağınız stl source içine kopyalayın.Daha sonra derleyin.Önce md 0 dan datayı girip, daha sonra da i0.0 a basmanız yeterli.

selamlar

Kod:
data_block db 1
title =
version : 0.1


 struct
 r_fifo_sayi : array [1 .. 100 ] of dword ;
 end_struct ;
begin
 r_fifo_sayi[1] := dw#16#0; 
 r_fifo_sayi[2] := dw#16#0; 
 r_fifo_sayi[3] := dw#16#0; 
 r_fifo_sayi[4] := dw#16#0; 
 r_fifo_sayi[5] := dw#16#0; 
 r_fifo_sayi[6] := dw#16#0; 
 r_fifo_sayi[7] := dw#16#0; 
 r_fifo_sayi[8] := dw#16#0; 
 r_fifo_sayi[9] := dw#16#0; 
 r_fifo_sayi[10] := dw#16#0; 
 r_fifo_sayi[11] := dw#16#0; 
 r_fifo_sayi[12] := dw#16#0; 
 r_fifo_sayi[13] := dw#16#0; 
 r_fifo_sayi[14] := dw#16#0; 
 r_fifo_sayi[15] := dw#16#0; 
 r_fifo_sayi[16] := dw#16#0; 
 r_fifo_sayi[17] := dw#16#0; 
 r_fifo_sayi[18] := dw#16#0; 
 r_fifo_sayi[19] := dw#16#0; 
 r_fifo_sayi[20] := dw#16#0; 
 r_fifo_sayi[21] := dw#16#0; 
 r_fifo_sayi[22] := dw#16#0; 
 r_fifo_sayi[23] := dw#16#0; 
 r_fifo_sayi[24] := dw#16#0; 
 r_fifo_sayi[25] := dw#16#0; 
 r_fifo_sayi[26] := dw#16#0; 
 r_fifo_sayi[27] := dw#16#0; 
 r_fifo_sayi[28] := dw#16#0; 
 r_fifo_sayi[29] := dw#16#0; 
 r_fifo_sayi[30] := dw#16#0; 
 r_fifo_sayi[31] := dw#16#0; 
 r_fifo_sayi[32] := dw#16#0; 
 r_fifo_sayi[33] := dw#16#0; 
 r_fifo_sayi[34] := dw#16#0; 
 r_fifo_sayi[35] := dw#16#0; 
 r_fifo_sayi[36] := dw#16#0; 
 r_fifo_sayi[37] := dw#16#0; 
 r_fifo_sayi[38] := dw#16#0; 
 r_fifo_sayi[39] := dw#16#0; 
 r_fifo_sayi[40] := dw#16#0; 
 r_fifo_sayi[41] := dw#16#0; 
 r_fifo_sayi[42] := dw#16#0; 
 r_fifo_sayi[43] := dw#16#0; 
 r_fifo_sayi[44] := dw#16#0; 
 r_fifo_sayi[45] := dw#16#0; 
 r_fifo_sayi[46] := dw#16#0; 
 r_fifo_sayi[47] := dw#16#0; 
 r_fifo_sayi[48] := dw#16#0; 
 r_fifo_sayi[49] := dw#16#0; 
 r_fifo_sayi[50] := dw#16#0; 
 r_fifo_sayi[51] := dw#16#0; 
 r_fifo_sayi[52] := dw#16#0; 
 r_fifo_sayi[53] := dw#16#0; 
 r_fifo_sayi[54] := dw#16#0; 
 r_fifo_sayi[55] := dw#16#0; 
 r_fifo_sayi[56] := dw#16#0; 
 r_fifo_sayi[57] := dw#16#0; 
 r_fifo_sayi[58] := dw#16#0; 
 r_fifo_sayi[59] := dw#16#0; 
 r_fifo_sayi[60] := dw#16#0; 
 r_fifo_sayi[61] := dw#16#0; 
 r_fifo_sayi[62] := dw#16#0; 
 r_fifo_sayi[63] := dw#16#0; 
 r_fifo_sayi[64] := dw#16#0; 
 r_fifo_sayi[65] := dw#16#0; 
 r_fifo_sayi[66] := dw#16#0; 
 r_fifo_sayi[67] := dw#16#0; 
 r_fifo_sayi[68] := dw#16#0; 
 r_fifo_sayi[69] := dw#16#0; 
 r_fifo_sayi[70] := dw#16#0; 
 r_fifo_sayi[71] := dw#16#0; 
 r_fifo_sayi[72] := dw#16#0; 
 r_fifo_sayi[73] := dw#16#0; 
 r_fifo_sayi[74] := dw#16#0; 
 r_fifo_sayi[75] := dw#16#0; 
 r_fifo_sayi[76] := dw#16#0; 
 r_fifo_sayi[77] := dw#16#0; 
 r_fifo_sayi[78] := dw#16#0; 
 r_fifo_sayi[79] := dw#16#0; 
 r_fifo_sayi[80] := dw#16#0; 
 r_fifo_sayi[81] := dw#16#0; 
 r_fifo_sayi[82] := dw#16#0; 
 r_fifo_sayi[83] := dw#16#0; 
 r_fifo_sayi[84] := dw#16#0; 
 r_fifo_sayi[85] := dw#16#0; 
 r_fifo_sayi[86] := dw#16#0; 
 r_fifo_sayi[87] := dw#16#0; 
 r_fifo_sayi[88] := dw#16#0; 
 r_fifo_sayi[89] := dw#16#0; 
 r_fifo_sayi[90] := dw#16#0; 
 r_fifo_sayi[91] := dw#16#0; 
 r_fifo_sayi[92] := dw#16#0; 
 r_fifo_sayi[93] := dw#16#0; 
 r_fifo_sayi[94] := dw#16#0; 
 r_fifo_sayi[95] := dw#16#0; 
 r_fifo_sayi[96] := dw#16#0; 
 r_fifo_sayi[97] := dw#16#0; 
 r_fifo_sayi[98] := dw#16#0; 
 r_fifo_sayi[99] := dw#16#0; 
 r_fifo_sayi[100] := dw#16#0; 
end_data_block

function fc 1 : void
title =
version : 0.1


var_input
 dwdatagir : dword ;
 ififosize : int ;
 dbno : block_db ;
end_var
var_temp
 iloopsay : int ;
 dwpointerdec : dword ;
end_var
begin
network
title =

   l  p#4.0; 
   negd ; 
   t  #dwpointerdec; 
   l  #ififosize; 
   +  -2; 
   l  p#4.0; 
   *d  ; 
   lar1 ; 
   opn #dbno; 
   l  #ififosize; 
   +  -2; 
shuf: t  #iloopsay; 
   l  dbd [ar1,p#0.0]; 
   t  dbd [ar1,p#4.0]; 
   l  #dwpointerdec; 
   +ar1 ; 
   l  #iloopsay; 
   loop shuf; 
   l  dbd [ar1,p#0.0]; 
   t  dbd [ar1,p#4.0]; 
   l  #dwdatagir; 
   t  dbd [ar1,p#0.0]; 
   set ; 
   save ; 
end_function

organization_block ob 1
title = "main program sweep (cycle)"
version : 0.1


var_temp
 ob1_ev_class : byte ;//bits 0-3 = 1 (coming event), bits 4-7 = 1 (event class 1)
 ob1_scan_1 : byte ;//1 (cold restart scan 1 of ob 1), 3 (scan 2-n of ob 1)
 ob1_priority : byte ;//priority of ob execution
 ob1_ob_numbr : byte ;//1 (organization block 1, ob1)
 ob1_reserved_1 : byte ;//reserved for system
 ob1_reserved_2 : byte ;//reserved for system
 ob1_prev_cycle : int ;//cycle time of previous ob1 scan (milliseconds)
 ob1_min_cycle : int ;//minimum cycle time of ob1 (milliseconds)
 ob1_max_cycle : int ;//maximum cycle time of ob1 (milliseconds)
 ob1_date_time : date_and_time ;//date and time ob1 started
end_var
begin
network
title =

   a  i   0.0; 
   fp  m  100.0; 
   jnb _001; 
   call fc  1 (
     dwdatagir        := md  0,
     ififosize        := 20,
     dbno          := db  1);
_001: nop 0; 
end_organization_block

organization_block ob 121
title = "programming error"
version : 0.1


var_temp
 ob121_ev_class : byte ;//16#25, event class 2, entering event state, internal fault event
 ob121_sw_flt : byte ;//16#xx software programming fault
 ob121_priority : byte ;//priority of ob execution
 ob121_ob_numbr : byte ;//121 (organization block 121, ob121)
 ob121_blk_type : byte ;//16#88/8a/8b/8c/8e type of block fault occured in
 ob121_reserved_1 : byte ;//reserved for system
 ob121_flt_reg : word ;//16#xx specific register that caused fault
 ob121_blk_num : word ;//number of block that programming fault occured in
 ob121_prg_addr : word ;//address in block where programming fault occured
 ob121_date_time : date_and_time ;//date and time ob121 started
end_var
begin
network
title =

end_organization_block

organization_block ob 122
title = "module access error"
version : 0.1


var_temp
 ob122_ev_class : byte ;//16#25, event class 2, entering event state, internal fault event
 ob122_sw_flt : byte ;//16#xx software error code
 ob122_priority : byte ;//priority of ob execution
 ob122_ob_numbr : byte ;//122 (organization block 122, ob122)
 ob122_blk_type : byte ;//16#88/8a/8b/8c/8e type of block fault occured in
 ob122_mem_area : byte ;//memory area where access error occured
 ob122_mem_addr : word ;//memory address where access error occured
 ob122_blk_num : word ;//block number in which error occured
 ob122_prg_addr : word ;//program address where error occured
 ob122_date_time : date_and_time ;//date and time ob1 started
end_var
begin
network
title =

end_organization_block

Kod:
L +pop
T HansAndersen
 
sevgili üstad HansAndersen daha öncede yorumlarınızı ilgiyle okuduğumu size yazmıştım,benimde bir sualim olacak size ve forumdaki diğer arkadaşlara,
örneğin yukarıda yaptığınız gibi I0.0 bitinin yükselen kenarını alarak MD0 daki datayı DB1içine kopyalamak istiyorum ancak I0.0 bitinin her 1 oluşunda data, DB1.DBD0 dan başlayarak bir sonraki adrese kopyalanmalı.

yorumlarınız için şimdiden teşekkür ediyorum tüm katılımcı arkadaşlara.
 
s.inal ' Alıntı:
sevgili üstad HansAndersen daha öncede yorumlarınızı ilgiyle okuduğumu size yazmıştım,benimde bir sualim olacak size ve forumdaki diğer arkadaşlara,
örneğin yukarıda yaptığınız gibi I0.0 bitinin yükselen kenarını alarak MD0 daki datayı DB1içine kopyalamak istiyorum ancak I0.0 bitinin her 1 oluşunda data, DB1.DBD0 dan başlayarak bir sonraki adrese kopyalanmalı.

yorumlarınız için şimdiden teşekkür ediyorum tüm katılımcı arkadaşlara.

Yukarıdaki proje istediğiniz işlemi yürütmektedir.
 

Forum istatistikleri

Konular
128,354
Mesajlar
916,964
Kullanıcılar
450,213
Son üye
qrsath06

Yeni konular

Geri
Üst