• Proop Builder Makro Yardımcısı

  • Proop ile ilgili tüm teknik dökümanlar...
Proop ile ilgili tüm teknik dökümanlar...
 #52  gönderen Murat
 Cum May 25, 2018 3:48 pm
Makro Yardımcısı, makro komutlarının listelendiği yardımcı bir penceredir.
Komutların açıklamaları ve örnekleri de yer almaktadır.
Pencere kullanılarak komutun formatna uygun kod parçası oluşturulabilir ve makroya eklenebilir.

Aritmetik Komutlar:
+ Komutu
- Komutu
* Komutu
/ Komutu
% Komutu
SQRT

Karşılaştırma Komutları:
IF, ELSE, ENDIF

Döngü Komutları:
FOR TO/DOWNTO, ENDFOR
WHILE, ENDW

Değişkenler & Fonksiyonlar:
GLOBAL
LOCAL
FUNC MAIN
FUNC
CALL FUNC

Veri Transferi:
= Komutu
WRITEONCE, GETONCE
WRITEBUF, WRITEBUFSYNC, PUTBUF
LOADRECIPE

Diğer:
SLEEP
GETSYSTICK
GETSYSTIME
GETSYSTOUCH
RESETCOMM
 #53  gönderen Murat
 Cum May 25, 2018 3:53 pm
Var1 = Var2 + Var3;

"+" komudu, iki değişkeni toplamak için kullanılır.

Örnekte $0 adresine, $1 adresindeki 20 değeri ile 10 değerinin toplamı atanmıştır.
$0 adresindeki değer 30 olacaktır.
Kod: Tümünü seç
Örnek kod:
	$1 = 20;
	$0 = $1 + 10;

Var1 = Var2 - Var3;

"-" komudu, iki değişkenin farkını bir değişkene atar.

Örnekte $0 adresine, $1 adresindeki 20 değeri ile 10 değerinin farkı atanmıştır.
$0 adresindeki değer 10 olacaktır.
Kod: Tümünü seç
Örnek kod:
	$1 = 20;
	$0 = $1 - 10;

Var1 = Var2 * Var3;

"*" komudu, iki değişkenin değerlerini çarpıp bir değişkene atar.

Örnekte $0 adresine, $1 adresindeki 10 değeri ile 5 değerinin çarpımı atanmıştır.
$0 adresindeki değer 50 olacaktır.
Kod: Tümünü seç
Örnek kod:
	$1 = 10;
	$0 = $1 * 5;

Var1 = Var2 / Var3;

"/" komudu, iki değişkenin değerlerini bölüp bir değişkene atar.

Örnekte $0 adresine, $1 adresindeki 10 değeri ile 5 değerinin bölümü atanmıştır.
$0 adresindeki değer 2 olacaktır.
Kod: Tümünü seç
Örnek kod:
	$1 = 10;
	$0 = $1 / 5;

Var1 = Var2 % Var3;

"%" komudu, bir değişkenin başka bir değişkene bölündükten arta kalan sayı verir.

Örnekte $0 adresine, $1 adresindeki 10 değerinin 3 değerine bölümünden kalan değer atanmıştır.
$0 adresindeki değer 1 olacaktır.
Kod: Tümünü seç
Örnek kod:
	$1 = 10;
	$0 = $1 % 3;

Var1 = sqrt(Var2);

"sqrt" komudu, bir değişkenin karekök değerini bulmak için kullanılır.

Örnekte $0 adresine, $1 adresindeki 81 değerinin karekökü atanmıştır.
$0 adresindeki değer 9 olacaktır.
Kod: Tümünü seç
Örnek kod:
	$1 = 81;
	$0 = sqrt($1);

IF

 #54  gönderen Murat
 Cum May 25, 2018 3:55 pm
if
/* if TRUE ise buradaki kodları yürüt */
else if
/* ilk if FALSE ise bu if TRUE ise buradaki kodları yürüt */
else
/* her iki if FALSE ise buradaki kodları yürüt */
endif;


"IF" komudu değerler arasında mantıksal karşılaştırmalar yapmayı sağlar.
"ELSE" komudu karşılaştırmanın FALSE (yanlış) döndüğü durumlarda çalışır.
"ELSE IF" komudu önceki karşılaştırmanın FALSE (yanlış) dönmesi durumunda karşılaştırma yapar.
"ENDIF" komudu if yapısını sonlandığını gösterir.

İlişkisel Operatörler:

"==" eşittir 5 == 5 true (doğru)
"!=" eşit değil 5 != 4 true (doğru)
"<" küçüktür 5 < 6 true (doğru)
"<=" küçük eşit 3 <= 4 true (doğru)
">" büyüktür 5 > 4 true (doğru)
">=" büyük eşit 5 >= 3 true (doğru)

Örnekte $0'ın değeri ile 1'in eşitliği karşılaştırılıyor ve eğer true (doğru) ise $1 10'a eşitlenir.
True (doğru) değil ise $0'ın değeri ile 2'nin küçük eşitliği karşılaştırılıyor ve eğer true (doğru) ise $1 20'ye eşitlenir.
Her iki karşılaştırma da false (yanlış) ise $1 30'a eşitlenir.
Kod: Tümünü seç
Örnek kod:
	func main()
		if $0 == 1
			$1 = 10;
		else if $0 >= 2
			$1 = 20;
		else
			$1 = 30;
		endif;
		endif;
	endf
	endp
 #55  gönderen Murat
 Cum May 25, 2018 3:57 pm
for Var1 = Var2 to/downto Var3 do

/* döngü ile buradaki kodları yürüt */

endfor;


"FOR TO" komudu bir değişkeni bir değere eşitleyip belli bir değere kadar 1'er arttırarak döngü halinde kodları yürütmeyi sağlar.
"FOR DOWNTO" komudu bir değişkeni bir değere eşitleyip belli bir değere kadar 1'er azaltarak döngü halinde kodları yürütmeyi sağlar.
"ENDFOR" komudu for döngüsünün sonunu temsil eder.

1. örnekte global a değişkeninin değeri 1'den başlayıp 10'a kadar 1'er arttırılır ve her arttırmada endfor ile arasındaki kod kolonu işlenir.
Global b değişkeninin değeri a değişkeninin değeriyle toplanır ve bu işlem a değişkeninin değeri 10 olana kadar devam eder.
Döngü sonunda b değişkeninin değeri 1+2+3+4+5+6+7+8+9+10 = 55 olur.

Örnek kod 1: global a, b; func main() ... endf endp

2. örnekte global b değişkeninin değeri 100'dür. Global a değişkeninin değeri 10'dan başlayıp 1'e kadar 1'er azaltılır ve her azaltmada endfor ile arasındaki kod kolonu işlenir.
Global b değişkeninin değerinden a değişkeninin değeri çıkarılır ve bu işlem a değişkeninin değeri 1 olana kadar devam eder.
Döngü sonunda b değişkeninin değeri 100-1-2-3-4-5-6-7-8-9-10 = 45 olur.
Kod: Tümünü seç
Örnek kod 2:
	global a, b;
	func main()
		b = 100;
		for a = 10 downto 1 do
			b = b - a;
		endfor;
	endf
	endp

while

/* karşılaştırma TRUE (doğru) olduğunca buradaki kodları yürüt */

endw;


"WHILE" komudu mantıksal karşılaştırma TRUE (doğru) olduğu sürece kod kolonunu yürütür.
"ENDW" komudu while yapısını sonlandığını gösterir.

İlişkisel Operatörler:

"==" eşittir 5 == 5 true (doğru)
"!=" eşit değil 5 != 4 true (doğru)
"<" küçüktür 5 < 6 true (doğru)
"<=" küçük eşit 3 <= 4 true (doğru)
">" büyüktür 5 > 4 true (doğru)
">=" büyük eşit 5 >= 3 true (doğru)

Örnekte global a değeri başta 1'e eşitlenir ve while döngüsü a değişkeninin 10'a eşit olmama koşulunu kontrol eder.
Döngüde global b değişkeninin değeri her seferinde 10, global a değişkeninin değeri de 1 arttırılır.
Döngü sonunda b değişkeninin değeri 100 olur.
Kod: Tümünü seç
Örnek kod:
	global a, b;
	func main()
		a = 1;
		while a != 10
			b = b + 10;
			a = a + 1;
		endw;
	endf
	endp
 #56  gönderen Murat
 Cum May 25, 2018 4:04 pm
global Var1;

"GLOBAL" komudu fonksiyonlar dışında türetilmiş genel bir değişken tanımlar ve tüm fonksiyonlardan erişilebilir.

Örnekte global a değişkeni hem func_1 isimli fonksiyondan hem de ana fonksiyondan ulaşılabilir durumdadır.
Kod: Tümünü seç
Örnek kod:
	global a;
	func func_1()
		a = 1;
	endf
	func main()
		a = 2;
	endf
	endp

local Var1;

"LOCAL" komudu fonksiyon içinde türetilmiş özel bir değişken tanımlar ve sadece türetildiği fonksiyonda erişilebilir.

Örnekte local a değişkeni sadece ana fonksiyondan ulaşılabilir durumdadır.
Kod: Tümünü seç
Örnek kod:
	func main()
		local a;
		a = 2;
	endf
	endp

func main()

"FUNC MAIN" komudu ana fonksiyondur ve script bu fonksiyondan yürütülür.

Örnekte ana fonksiyonun yapısı verilmiştir.
Kod: Tümünü seç
Örnek kod:
	func main()
		  
	endf
	endp

func func_name()

"FUNC" komudu yeni bir fonksiyon türetmek için kullanılır.

Örnekte func_1 isimli bir fonksiyon $0 adresinin değerini 1'e eşitlemek için tanımlanmıştır.
Kod: Tümünü seç
Örnek kod:
	func func_1()
		$0 = 1;
	endf

call func_name();

"CALL" komudu, bir fonksiyonu çağırmak ve yürütmek için kullanılır.

Örnekte func_1 fonksiyonu $0 adresinin değerini 1'e eşitler.
Bu fonksiyon çağırıldığında $0 adresindeki değer 1 olacaktır.
Kod: Tümünü seç
Örnek kod:
	func func_1()
		$0 = 1;
	endf
	func main()
		call func_1();
	endf
	endp
 #57  gönderen Murat
 Cum May 25, 2018 4:10 pm
Var1 = Var2;

"=" komudu, bir değişkenin değerini diğer bir değişkene atar.

Örnekte $0 adresine, $1 adresindeki 10 değeri atanmıştır.
$0 adresindeki değer 10 olacaktır.
Kod: Tümünü seç
Örnek kod:
	$1 = 10;
	$0 = $1;

writeonce(Var1, Var2) = Var3;

Var1 = getonce(Var1, Var2);


"WRITEONCE" komudu adres öteleyip yazma işlemi için kullanılır.
"GETONCE" komudu adres öteleyip okuma işlemi için kullanılır.

Örnekte getonce komudu ile ilk for döngüsünde $20 adresinden okunan değer writeonce komudu ile $10 adresine yazılır.
Sonraki her döngüde adresler i değeri kadar yani birer ötelenerek okunur ve yazılır.
Sonuç olarak:
$10 = $20
$11 = $21
$12 = $22 olur.
Kod: Tümünü seç
Örnek kod:
	func main()
		local i;
		for i = 0 to 2 do
			writeonce($10, i) = getonce($20, i);
		endfor;
	endf
	endp

Var1 = writesync("Var1", Var2);

"WRITESYNC" komutu senkron şekilde yazma işlemi için kullanılır. Bu komutla string bir değer de yazılabilir.

Örnekte, isimleri "modbus1" ve "modbus2" olan iki cihaz tanımlanmıştır.
modbus1'in bağlı, modbus2'nin bağlı olmadığını varsayalım.
varMod1 değişkeninin değeri 1 olacaktır.
varMod2 değişkeninin değeri -1 olacaktır.
Bu sonuç göstermektedir ki modbus1'e yazma işlemi başarılı fakat modbus2'ye yazma işlemi başarısız olmuştur.

Kod: Tümünü seç
Örnek kod:
	func main()
		local varMod1;
		local varMod2;
		varMod1 = writesync("modbus1@40001", 1);
		varMod2 = writesync("modbus2@40001", "Merhaba");
	endf
	endp

Var1 = mw_putbuf("Var2", Var3);

Var4 = mw_writebuf();
Var4 = mw_writebufsync();


"PUTBUF" komutu yazılacak olan değeri bir kümede toplamak için kullanılır.
"WRITEBUF" komudu hazırlanan kümeyi yazmak için gönderir ve başarılı gönderdiyse 1 gönderemediyse -1 döner.
"WRITEBUFSYNC" komudu hazırlanan kümeyi yazar ve başarılı şekilde yazdıysa 1 yazamadıysa -1 döner.
Bu komutlar genel olarak çoklu yazma işlemi için kullanılır.

Örnekte, isimleri "modbus1" ve "modbus2" olan iki cihaz tanımlanmıştır.
Buffer (küme) modbus1 için hazırlanıp writebuf komudu ile gönderilir ve varMod1 değişkeni değeri 1 olarak döner.
Buffer tekrar modbus2 için hazırlanıp yazılır ve eğer başarılı yazıldıysa varMod2 değişkeni değeri 1 yazılamadıysa -1 döner.

Kod: Tümünü seç
Örnek kod:
	func main()
		local varBuf;
		local varMod1;
		local varMod2;
		
		varBuf = mw_putbuf("modbus1@40001", $1);
		varBuf = mw_putbuf("modbus1@40002", $2);
		
		varMod1 = mw_writebuf();
		
		varBuf = mw_putbuf("modbus2@40001", $1);
		varBuf = mw_putbuf("modbus2@40002", $2);
		
		varMod2 = mw_writebufsync();
	endf
	endp

loadrecipe("Var1", "Var2");

"LOADRECIPE" komudu önceden hazırlanmış reçeteleri çağırmak/yürütmek için kullanılır.

Örnekte bir fırın işlemi tanımlanmıştır. "hamur" isimli reçete ve "simit" isimli reçete verisi oluşturulmuştur.
Reçete girdisi olarak da "Sıcaklık" tanımlanmış, adresi ve veri tipi atanmıştır.
Bu reçete kod tarafında örnekte olduğu gibi kolaylıkla çağırılabilir ve yürütülebilir.

Kod: Tümünü seç
Örnek kod:
	func main()
		
		loadrecipe("Hamur","simit");
		
	endf
	endp
 #58  gönderen Murat
 Cum May 25, 2018 4:14 pm
sleep(Var1);

"SLEEP" komutu programı belirli bir süre duraksatmak veya bekletmek için kullanılır.

Örnekte sleep komudu 1000 ms (1 saniye) programı bekletip $0'ın değerini 1'e eşitler.
Kod: Tümünü seç
Örnek kod:
	func main()
		sleep(1000);
		$0 = 1;
	endf
	endp

Var1 = getsystick();

"GETSYSTICK" komutu sistem başlatıldığından bu yana geçen milisaniye sayısını verir ve zamansal işlemler için kullanılır.

Örnekte $0 adresine anlık milisaniye değeri atanır.
Kod: Tümünü seç
Örnek kod:
	func main()
		$0 = getsystick();
	endf
	endp

Var1 = getsystime();

"GETSYSTIME" komudu sistem zaman bilgisini verir.

Örnekte $0 adresine sistem zamanı bilgisi atanmıştır.
Kod: Tümünü seç
Örnek kod:
	func main()
		$0 = getsystime();
	endf
	endp

Var1 = getsystouch();

"GETSYSTOUCH" komutu ekran ile son etkileşimden itibaren geçen süreyi verir. Ekran koruyucu seçeneği için kullanılabilir.

Örnekte bir ekran koruyucu örneği kodlandırılmıştır. Ekran koruyucu süresi 5000 ms (5 sn) olarak ayarlanmıştır.
Proje yürütüldüğünde ana sayfa açılır ve ekrana son dokunuştan itibaren 5 saniye geçerse ekran koruyucu sayfası ekrana gelir.
Ekrana dokunulduğunda ise tekrar ana sayfaya dönülür.
Kod: Tümünü seç
Örnek kod:
	global lastPage,
	ss_indx, ss_time;
	
	func screenSaver()
		ss_indx = 0;			// ekran koruyucu sayfası indeksi
		ss_time = 5000;			// ekran koruyucu süresi
		if getsystouch() > ss_time		// son dokunuştan beri geçen süre
			if lastPage == 0		// lastPage ilk değeri 0
				lastPage = $S2;	// aktif sayfa indeksi 
				$S2 = ss_indx;	// aktif sayfayı ekran koruyucu sayfası yap
			endif;
		else
			if lastPage != 0		// ekran koruyucu aktif mi kontrol et
				$S2 = lastPage;	// aktif sayfayı son aktif sayfa yap
				lastPage = 0;	// lastPage ilk değeri olan 0 yap
			endif;
		endif;
	endf
	
	func main()
		call screenSaver();		// screenSaver fonksiyonunu çağır
	endf
	endp

Son Konular

Default Avatar C İle Hafıza İşlemleri

gönderen İSMAİL468

Prş Eki 31, 2019 2:15 pm

Default Avatar PWM

gönderen erol.canli

Çrş Eki 30, 2019 11:19 pm

Default Avatar Fonksiyon Oluşturma ve Çağırma

gönderen İSMAİL468

Pzt Eki 28, 2019 1:53 pm

Default Avatar Modbus RTU Input Registers

gönderen İSMAİL468

Sal Eki 08, 2019 10:08 am

Default Avatar HMI Panel ID Kod Alma

gönderen İSMAİL468

Sal Eki 08, 2019 9:59 am

Twıtter

Hakkımızda

EMKO ELEKTRONİK A.Ş , 1986 yılından beri Ölçü Kontrol Cihazlarının, Sıcaklık , Nem Sensörlerinin ve Jeneratör Kontrol Cihazlarının tasarımı , üretimi , pazarlaması , satış öncesi ve sonrası teknik hizmetlerini yürütmektedir. TS ISO EN 9001 Kalite Sistem Belgesine sahip olan firmamızda kalite politikası ve prosedürler ile; ARGE, ÜRGE, üretim, satış sonrası servis faaliyetlerimizde müşteri memnuniyetinin eksiksiz sağlanabilmesi garanti altına alınmıştır. Aynı zamanda, yeni tasarım ürünlere firmamız bünyesindeki test laborotuvarında EMI, ESD, EFT, PQF, Surge, LVD ve Çevre şartları testleri uygulanarak; "CE markası" kapsamındaki direktiflere uygun kontrol cihazlarının tasarım ve üretimi gerçekleştirilmektedir.

www.emkoelektronik.com.tr

EMKO