S7-300 ile donanımsal kesme

kontrolog

Üye
Katılım
12 Eki 2010
Mesajlar
20
Puanları
1
Yaş
38
Merhaba arkadaslar

S7-300 ile donanımsal kesmeleri nasıl yapabileceğimi öğrenmek istiyorum.
Daha açıklayıcı olması için bir örnekle açıklamaya çalışayım sorumu

benim yazdığım program çalışırken gelen özel bir input ile programın kesmeye geçmesini istiyorum yaptığım araştırmalar sonucu bunun için ob40-47 (ki bunlar içinde önceliği en yüksek olan ob40 bu nedenle onu kullanmak istiyorum) organizasyon bloklarının kullanıldığını öğrendim ancak nasıl aktifleştireceğimi ve ob40 serisini hangi inputların tetikleyeceğini bilmiyorum.

istediğim herhangi bir girişi ob40 için kullanabilir miyim? veya her donanımsal kesme için belirli bir giriş otomatik olarak atanmış mıdır? (i10.0 ob40 için gibi)

yardımınız için şimdiden teşekkür ederim.
 
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.
OB40 ile çalışırken i0.0 şeklinde okursan olmaz piw0 şeklinde okursan hardware kesme oluşturabilirsin.

örnek siemensin sitesin de var ama kısa bir kodu var yazayım.

link:
https://www.automation.siemens.com/...how.aspx?PageIndex=1&PostID=80226&Language=en

https://www.automation.siemens.com/...how.aspx?PageIndex=1&PostID=79805&Language=en

Kod:
//i0.0 değişirse bunları sayarak mw40 kaydediyor.
//----------------------------
L piw0   //input okunur input word 0
T MW0
A M0.0  //input wordun 0. biti
jcn Inc  // jump cond.
L MW40
L 1
+I         // 1 artır
T MW40  // mw40 a transfer et
Inc: nop 0
//------------------------------------

iyi çalışmalar.
 
Moderatör tarafında düzenlendi:
konuyla ılgılı bır basıt bır ornek plcsımde hardware tetıgı tıkla cıkan pencerede ust kısma modulun teshıs adresı 1022 yaz alt kısma modulun yerlestırıldıgı slot numarasını 4 yaz ve ok le plcsımde ob40 bu sekılde denenıyor normalde cpu yuklu olsa dırek ılgılı gırısten tetıkler ayarlar kolay kesme ozellıgı olan gırıs modulunun ozellıkler kısmında ayarları goreceksın ayrıca donanım kesmesını aktıf edecek ozel sfc ler de var
 

Ekli dosyalar

  • ob40.rar
    201 KB · Görüntüleme: 159
OB40 ile çalışırken i0.0 şeklinde okursan olmaz piw0 şeklinde okursan hardware kesme oluşturabilirsin.

i0.0 değişirse bunları sayarak mw40 kaydediyor.
----------------------------
L piw0 //input okunur input word 0
T MW0
A M0.0 //input wordun 0. biti
jcn Inc // jump cond.
L MW40
L 1
+I // 1 artır
T MW40 // mw40 a transfer et
Inc: nop 0
------------------------------------

iyi çalışmalar.

Yardımınız için teşekkür ederim ancak sanırım ben anlamadım bu yazdığınız program i0.0 değiştiğinde i0.0 1 kaldığı surece mw 40 da tutulan degeri 1 arttırıyor. ancak hangi kısımda ob40 a geçip ob40 daki şlemleri yaptığını anlayamadım simulasyonda da denedim ancak 0b40 içindeki hicbir veri değişime ugramadı ben mi yanlış anlattım acaba derdimi bilemiyorum ancak tam olarak ne yaptığınızı anlayamadım.

Benim tam olarak istediğim makinenin bir sensöründen 1 işareti geldiğinde ob1 deki işini bıraksın ob40 a atlasın ob 40 daki işlem bittiğinde ob1 de kaldığı yerden devam etsin.
 
Son düzenleme:
konuyla ılgılı bır basıt bır ornek plcsımde hardware tetıgı tıkla cıkan pencerede ust kısma modulun teshıs adresı 1022 yaz alt kısma modulun yerlestırıldıgı slot numarasını 4 yaz ve ok le plcsımde ob40 bu sekılde denenıyor

plcsim de bahsettiginiz "hardware tetiği" ni bulamadım programı oldugu gibi yuklediğimde de kesme aktif olmadı sanırım cünkü istediğim çıkışları alamadım

ayrıca "WR PARM" fonksiyonu hazır bir fonksiyon mu içini görebilme sansım var mı?


yardımınız için teşekkür ederim
 
linkte pdf in appendices C bölümünde plcsim in nasıl OB40 ile çalıştırılacağı anlatılmıştır.
sorun simulatorun IO configurasyonlarında 315-2dp ile çalışacak şekilde ayarlanmış olmasında.
Testing Your S7 Programs with S7-PLCSIM User Manual

https://www.kontrolkalemi.com/forum/attachments/s7wsmanb-pdf.25642/

Downloading System Data to S7-PLCSIM kısmında şu şekilde anlatılıyor.

"If you want to simulate interrupt OBs in S7-PLCSIM, you must first correctly
download your I/O configuration. If your project matches either of the following
descriptions, certain modifications are required to download your hardware
configuration to S7-PLCSIM:
An S7-300 project with any CPU other than the CPU 315-2 DP
An S7-400 project that uses DP I/O with a CP instead of using a CPU model
that explicitly supports DP I/O
Note
Projects configured for a CPU 315-2 DP, or for an S7-400 CPU that explicitly
supports DP, do not require the modifications that are described in this appendix"

kısaca CPU 315-2 DP kullanın diyor plcsim ile.

ayrıca DI modulun de HW interrupt destekleyen bir modul olmalı.
ve ayrıca modul set edilmeli hangi inputlardan interrupt alınacak ve düşen ya da yükselen kenar da mı tetiklenecek şeklinde


iyi çalışmalar.
 

Ekli dosyalar

  • S7WSMANB.PDF
    583.3 KB · Görüntüleme: 53
donanım tetıgını execute menusunden trigger ob ac goreceksın sfc lerın ıcını malesef goremıyoruz
 
Arkadaşlar yardımlarınız için çok teşekkür ederim. Simülasyon için CPU 315-2 DP kullanıyorum

I/O modulunun de interrupt ayarlarını yaptım

PLCSIM de Execute - Trigger ob - Hardware Interrupt

Ayarlarından

Module address ve Module status un tan olarak ne oldugunu anlamadım ancak module idresin giriş adresi olduğunu düşünerek 0 yazdım Module statusa da 2 yazdım

Sonuç olarak apply dedğimde simülatör interrupt a bir kereye mahsus giriyo ve çıkışı yakıyor ancak plc calışmaya devam ettiği surece i0.0 ın girişlerini değiştirdiğimde bir değişim olmuyor.


Programda Kullandığım bloklarda yukardaki resimde mevcut sfc55 nasıl çalışıyor bilmiyorum.

Tahminimce ben hala i0.0 ile interrupt u tetiklelememekteyim.


Yardımınız için şimdiden teşekkürler.
 
SFC 55 Hakkında dah fazla bilgi için sfc blogu seçili iken F1'e basın ve orda SFC55 blogu ile yapılmış bir task var.


kullanımını ordan takip edebilirsiniz.

Kod:
An input channel of an S7-300 analog input module is to be switched from the measuring range ± 10 V to the measuring range ± 2.5 V. This means the accuracy can be increased for smaller measurement values. Switching is done manually using a pushbutton (I 0.0). If the measurement value is still greater than 2.5 V, the range cannot be switched over.
The SM*331; AI 8 x 12 Bit is to be used as the analog input module. The module is inserted in slot 10 (module start address 352). The analog input module cannot convert values while the parameters are being changed and outputs W#16#7FFF for the time this takes. No values are therefore read into the user program for 300 ms.

--------------------------

//***********************************************************************************

FUNCTION FC 1 : VOID
TITLE = 

VERSION : 0.1

VAR_TEMP

P_REQ	: BOOL ;
P_BUSY	: BOOL ;
P_IOID	: BYTE ;
P_LADDR	: WORD ;
P_RECNUM	: BYTE ;
P_RET_VAL	: INT ;
END_VAR

BEGIN
NETWORK
TITLE =
	AN	T 1 ;		//Value is only read in if no parameters
				//were changed for 300 ms
	JC	cont ;
	L	PIW 352 ;	//Read in analog input
	T	QW 16 ;		//and write to QW 16
cont:	A	I 0.0 ;		//Switch for input range;
	FP	M 10.1 ;		//once confirms 10-V range, second time
				//confirms 2.5-V range
	AN	M 10.0 ;	
	=	M 10.2 ;	 
	A	I 0.0 ;	
	FP	M 10.3 ;
	A	M 10.0 ;
	=	M 10.4 ;
	A	M 10.2 ;
	S	M 10.0 ;
	JC	m001 ;		//Jump to 2.5 V parameter assignment

A	M 10.4 ;
	R	M 10.0 ;
	JC	m002 ;		//Jump to 10 V parameter assignment
	BEU ;
m001:	L	PIW 352 ;	// Load the analog input value
	L	W#16#0B00 ;	//25% of maximum value = 2.5 V
	>I ;	    		//If the analog value is still over 2.5 V
	JC	end ;		//the parameters must not be changed.
	L	B#16#15 ;	//Input range parameter record 1,
				//set group 0 to 2.5 V
	T	DB55.DBB 2 ;
	JU	m003 ;
m002:	L	B#16#19 ;	//Input range parameter record 1,

T	DB55.DBB2 ;	//set group 0 to 10 V

m003:	 CLR ;	//Start parameter reassignment time

SD	T1 ;
	SET ;
	L	S5T#300MS ;
	SD	T1 ;
	AN	#P_REQ ;	//Activate block processing
	S	#P_REQ ;
	L	B#16#54 ;
	T	#P_IOID ;	//Load IOID number (ID whether peripheral input
				//or peripheral output)
	L	352 ;		//Load module base address
	T	#P_LADDR ;	//and transfer to variable
	L	1 ;		//Load data record number
	T	#P_RECNUM ;	//and transfer to variable
	CALL	SFC 55	// SFC 55 "WR_PARM" (transfer parameter to
				//module)
	  (REQ		:= #P_REQ,	//Request to write

   IOID		:= #P_IOID,
	   LADDR		:= #P_LADDR,	//Logical base address of module
	   RECNUM	:= #P_RECNUM,	//Data record number

   RECORD	:=P#DB55.DBX 0.0 Byte 14, //Data record

   RET_VAL	:= #P_RET_VAL,
	  BUSY		:= #P_BUSY) ;
	A	BR ;		//Error evaluation
	=	M 10.7 ;
end:	NOP 0 ; 
END_FUNCTION

//***********************************************************************************

DATA_BLOCK DB 55
TITLE = Data record 1 of the analog input module

STRUCT

EN_ALARM	: BYTE ;	// Enable alarms. Initial value B#16#00 

INT_TIME	: BYTE ;	// Integration time. Initial value B#16#FF 
	IN_GR0		: BYTE ;	// Input range group 0: ± 10 V. Initial value 
				//B#16#19
	IN_GR1		: BYTE ;	// Input range group 1: ± 10 V. Initial value 
				//B#16#19
	IN_GR2		: BYTE ;	// Input range group 2: ± 10 V. Initial value 
				//B#16#19
	IN_GR3		: BYTE ;	// Input range group 3: ± 10 V. Initial value 
				//B#16#19
	UL_CH0	: WORD ;	//Upper limit value channel 0. Initial value 

//W#16#7FFF
	LL_CH0	: WORD ;	//Lower limit value channel 0. Initial value 
				//W#16#8000
	UL_CH2	: WORD ;	//Upper limit value channel 2. Initial value 
				//W#16#7FFF
	LL_CH2	: WORD ;	//Lower limit value channel 2. Initial value 
				//W#16#8000
END_STRUCT ;

BEGIN

END_DATA_BLOCK

//***********************************************************************************

ORGANIZATION_BLOCK OB 1
TITLE = Call FC1
Version: 1.0 

VAR_TEMP

SYSTEM	: ARRAY [1..20] OF BYTE ;

END_VAR

BEGIN


CALL	FC 1;

END_ORGANIZATION_BLOCK


benim anladıgım kadarıyla plcsim sizin HWCONFIG deki interrupt ayarlarını görmüyor bu yüzden de ob40 devreye girmiyor.

yani gerçek hardware üzerinde daha önce verilen örnek çalışacaktır.

ayrıyetten s7300_module_data_manual_en-US_en-US.pdf (8MByte) in 475. sayfasına müracaat ediniz.
burada 6 byte DB nin 0. byte(C0) nın 6.ve 7.bitleri ON ise modulde interruptlar aktif olmaktadır
(DB1 ilk veri)

iyi çalışmalar.
 
Son düzenleme:

Forum istatistikleri

Konular
127,951
Mesajlar
913,867
Kullanıcılar
449,599
Son üye
Gksn

Yeni konular

Geri
Üst