S7-300 de Register İçeriğini Adres Olarak Kullanmak

AÇIKEL

Üye
Katılım
21 Ağu 2007
Mesajlar
49
Puanları
1
Yaş
39
S7-300 de Register İçeriğini Adres Olarak Kulnamak İstiyorum . Bu konuda bana yardım cı olacak bir bilgi veya örnek varsa paylşımcı arkadaşlaraa şimdiden teşekkürler...
Bu konu index diye komutla bir şekilde yapılabiliyormuş sanırım.
 
Yazımızda endüstrinin can damarı sayılabilecek PLC’yi inceleyeceğiz.
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.
elektronikmühendisi kardeş bu konu ile ilgili daha açıklayıcı bir dökümanın varsa veya örnek program paylaşabilirsen sevinirim....
 
Elektronikmühendisi kardeş verdiğin bilgi için teşekkürler ama sanırm benim aradığım bu değil yada ben bunu kullanmayı başaramdım.
Ben direk bir veya birkaç wordü çindeki sayıları adres olrak kullanmak istiyorum.
Bunula ilgili bir cevap verebilirseniz iyi olur.
İyi çalışmalar.
 

Bu kullanmak istediğiniz adresleri nerede kullanacaksınız. yada nerede ve nasıl kullanmak istiyorsunuz.

Aslında tam olarak yapmak istediğiniz şeyi daha detaylandırsanız çok daha iyi olur kanaatindeyim.
 
Bu kullanmak istediğiniz adresleri nerede kullanacaksınız. yada nerede ve nasıl kullanmak istiyorsunuz.

Aslında tam olarak yapmak istediğiniz şeyi daha detaylandırsanız çok daha iyi olur kanaatindeyim.

Ben tam olarak S7-300 içerisinde data boloklrada bir reçete oluşturmak istiyorum. Yani ben reçetenenin numarasını değiştiğim zaman atıyorum 10wordlük bir reçete bilgim varsa ve bu bilgiler DB...DBW0 başaldığını düşünürsem reçete numarasını 1 girdiğim zaman DB..DBW0...DBW20 ye kadar 2 girdiğim zaman DBW20 den DBW40 arası çalışmalı ve bu çok sayıda olduğundan PLC nin çalışma hafızasını dolduruyor Dolayısıyla bir adresisn içeriğinmi kullanmayı başarırsam PLC nin work memorisini doldurmadan reçeteyi yapabilirim.
Teşekkürler
 
Aslında plc içinde ciddi bir recete yazmak bira mesekatli bir iş HMI içinde cok basit ve fonksiyonel bir sekilde olusturuluyor.

Ama illa yazıcam diyorsanız Array seklinde kendiniz mantıgı olusturmak zorundasınız
Yada blokmove komutları ile gigebilirsiniz.

Atıyorum




Kod:
FUNCTION_BLOCK FB 4
TITLE =
VERSION : 0.1

VAR
  recete : ARRAY  [1 .. 40 ] OF word ; 
  recete sırası  :word ;
  Set_deger:ARRAY  [1 .. 20 ] OF word


 

END_VAR
Begin
IF recete sırası=1 THEN
Set_deger[1..20]:= recete[1..20];
ENDIF

IF recete sırası=20 THEN
Set_deger[1..20]:= recete[20..40];
ENDIF
Gibi Daha sonra bu adresleri blok move komutu ile gercek DB lara atabilirsin
programda hata işaretci hataları olabilir mantıgı anlatmak için basit bir örnektir
 
Moderatör tarafında düzenlendi:
Verdiğiniz bilgi için teşekkürler. Ben de zaten blokmove bloğunu kallanarak yaptım ama her reçete numarası için ayrıca yazdım. Benim amacım blokmove u bir defa kullanmak blokmove adreslerine istediğim gibi değişerek bir blokmove ile işi çözmek yoksa PLC min work memorsisi doluyor.
hasanzincir bey birazdaha açıklayıcı anlatabilirmisiniz.
 
heryeni recete girişinde eski receleri silmek istemiyorsun ama bu mantık olarak imkansız receleri bir alanda tutmak zorundasınız yada eski recete üzerine yazmak zorundasınız ki dogrusu budur atıyorum 50 recetelik alan ayırmıssanız bu alanı gecmemeniz lazım.

Yada sistemde panel varsa en güzeli panelden recete yapmaktır.

Konuyu tam ayrıntılandırın ki yardım edebilecegim bir konu olursa bakayım.
Saygılar
 
Merhabalar,

Anladığım kadarıyla yapmak istediğin sey;

Operator Panelinden Reçete numarasını seçeceksin.
Operator panelinde recete oluşturacaksın.
Operator panelinden Receteyi bir tampon DB'ye yazacaksın.
Kullanmak istediğin Receteyi seçip Reçete yaz dediğinde istediğin bir DB'ye Reçeteyi aktaracaksın.

Bunu yapabilen SCL kodları;

Kod:
FUNCTION_BLOCK FB10
TITLE = 'recete'

VAR_INPUT
    Recete_no:INT;//Recete Numarasi Belirlenir
    Recete_Adimi:INT;//Recetenin Kac Adimdan Olusacagi Belirlenir
    Recete_Kaydet:BOOL;//Recete Tampon_DB'ye yazilir
    Recete_Yaz:BOOL;//Receteyi Out_DB'ye yazar

END_VAR


VAR
    n:INT;
    x:INT;
    Adim:INT;
END_VAR




BEGIN
IF Recete_Adimi=0 THEN
    Adim:=2;
ELSE
    Adim:=Recete_Adimi;
END_IF;
  
IF Recete_Kaydet THEN
    FOR n:=0 TO  Adim-2 BY 2 DO
        DB3.DW[(Recete_no*Adim)+n]:=DB2.DW[n];
    END_FOR;
END_IF;

IF Recete_Yaz THEN
    FOR x:=0 TO Adim-2 BY 2 DO
       DB4.DW[x]:=DB3.Dw[(Recete_no*Adim)+x];
    END_FOR;
END_IF;
       
END_FUNCTION_BLOCK


Projede MW20 ile reçete numarasını seçiyorsun.
Operator panelinden DB2'ye reçeteni yazabilirsin.
DB3 Tampon DB'dir.
M22.0 1 olduğunda;
MW20 ile belirlediğin adres ve reçete adımına göre tampon DB'ye yazılır.
DB4 Output DB'dir.
M22.1 1 olduğunda MW20 ile belirlediğin reçete numarası Output DB'ye yazılır.


Kolay Gelsin
 
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için onları kabul etmelisiniz. Daha fazla bilgi edin…