DOP-107EV

Kullanıcı avatarı
okannet
Mesajlar: 12
Kayıt: 09 Ara 2019, 16:43
İletişim:

Re: DOP-107EV

Mesaj gönderen okannet »

Virgülden önceki hane arttıkça boşluk sayısı azalıyor. Aşağıda iki farklı veri için sizin anlattığınız formatta örnekledim. Veri sayısı değişmiyor ama boşluk sayısı değişiyor.

"SUI 87.981 g " verisi için
SUI (3) + Boşluk (6) + 87.981 (6) + Boşluk (1) + g (1) + Boşluk (2) + Enter (1) = 20 karakter dizisi
"SUI 123.309 g " verisi için
SUI (3) + Boşluk (5) + 123.309 (7) + Boşluk (1) + g (1) + Boşluk (2) + Enter (1) = 20 karakter dizisi
Kullanıcı avatarı
Turhan
Mesajlar: 2615
Kayıt: 07 Mar 2018, 16:06
Konum: İstanbul
İletişim:

Re: DOP-107EV

Mesaj gönderen Turhan »

HMI üzerinde TOBYTE ve TOWORD makro komutları ile okunan 4 ile 11. karakter aralıklarında boşluk karakteri var ise bu boşlukları önce 0 sayısı ile doldurup 4. karakterden 15. karaktere kadar olan tüm diziyi PLC içerisine göndermelisiniz AS PLC içerisinde $FVAL komutu 00000123.309 karakter dizisini doğrudan 123.309 floating point tabanına konvert edecektir. daha kısa bir çözüme ulaşırsam bu başlık altında paylaşıyor olacağım.
Karakter.jpg
$FVAL_Komutu.jpg
Bu mesaja eklenen dosyaları görüntülemek için gerekli izinlere sahip değilsiniz.
Kullanıcı avatarı
Turhan
Mesajlar: 2615
Kayıt: 07 Mar 2018, 16:06
Konum: İstanbul
İletişim:

Re: DOP-107EV

Mesaj gönderen Turhan »

Merhaba,

Okunan 20 karakterin tamamını AS200 PLC'ye göndererek sayıyı flotaing point tabanda okuyabilirsiniz. DTM ve $FVAL komutları kullanılarak yapılan konvert işlemi ektedir.

Karakter dizisinde 0~9 arasındaki tüm karakter değerlerini sıfır'a eşitliyerek diziyi doğrudan 32Bit Floating Point tabana çevirebilirsiniz.
Terazi_Karakter_İsleme.zip
Bu mesaja eklenen dosyaları görüntülemek için gerekli izinlere sahip değilsiniz.
Kullanıcı avatarı
okannet
Mesajlar: 12
Kayıt: 09 Ara 2019, 16:43
İletişim:

Re: DOP-107EV

Mesaj gönderen okannet »

Soylediginizi yapmaya çalışıyorum ancak ekrandaki ve adreslerdeki veriler sağa sola kaydığı için uygun yerleri 0 'la dolduramıyorum.
Veriyi direk as228t plc ile okuyabilirmiyim. Çıkış uçlarında rs485 için uygun olan d+ d- uçları var. Oradan rs232 ile haberleşip tartıyı okuyabilirmiyim. Ekran uzerinden haberleşmede bilgiyi kaçırma durumu oluyor diye tahmin ediyorum.
Kullanıcı avatarı
Turhan
Mesajlar: 2615
Kayıt: 07 Mar 2018, 16:06
Konum: İstanbul
İletişim:

Re: DOP-107EV

Mesaj gönderen Turhan »

AS200 CPU üzerinde yalnzıca seri port modbus haberleşme üzerinden RS-485 arabirimini desteklemektedir. RS-232 portu, AS00SCM-A ilave modülü üzerinden AS-F232 fonksiyon kartı ile desteklenmektedir.

Gönderdiğim örnek komut satırlarında HMI üzerinde 20 uzunlukta karakter okuma başarılı ise veriler BMOV komutu ile D100 datasına taşıdığınızda DTM ve $FVAL komutları yardımı ile okunan veri D400 (sonuc tag adresi) datasına floating point tabanda yazılıyor olmalı.

Eğer bu örnek komut satırları ile veri düzgün okunamıyor ise Aygıt görüntüleme penceresinden D100 datasından itibaren ardışık 10 Word datayı ASCII formatta görüntüleyip bu ekran görüntüsünü mesaja ekleyebilirimisiniz?
AS200_karakter.png
Bu mesaja eklenen dosyaları görüntülemek için gerekli izinlere sahip değilsiniz.
Kullanıcı avatarı
okannet
Mesajlar: 12
Kayıt: 09 Ara 2019, 16:43
İletişim:

Re: DOP-107EV

Mesaj gönderen okannet »

Merhaba;
Söylediğinizi yapmak için

Kod: Tümünü seç

BMOV(({EtherLink1}1@D100), $200, $20)
kodu ile verileri gönderdim.
PLC online modda izler iken alınan dizi sürekli oynuyor. dizinin içerisi veri paketini bazen tam düzgün alıyor bazen de veri sağa sola kaymış olarak geliyor. Sonuç değişkeninde de 0 görünüyor. Makro kodlarının tamamı da aşağıdaki gibidir.
Verileri kontrol edip boşluk olanları 0 atacağım ancak 2 adet if koşulunu AND ile bağlayamadım. IF ($10==1 && $100=='0') gibi bir karşılaştırmayı nasıl yaparım.

Kod: Tümünü seç

$0 = INITCOM(0, 0, 1, 0, 0, 6, 0)
SELECTCOM(0)
$10 = GETCHARS($100, 20, 400)
IF $10==1
BMOV($200, $100, 20)
BMOV(({EtherLink1}1@D100), $200, $20)
CLEARCOMBUFFER(0, 0)
$10 = 0
$20 = $20 + 1
ENDIF
END
Bu mesaja eklenen dosyaları görüntülemek için gerekli izinlere sahip değilsiniz.
Kullanıcı avatarı
Turhan
Mesajlar: 2615
Kayıt: 07 Mar 2018, 16:06
Konum: İstanbul
İletişim:

Re: DOP-107EV

Mesaj gönderen Turhan »

Merhaba,

Verinin eksik yada fazla okunmasının önüne geçmek için GETCHARS makro komutu ile okunan verinin boyutu yalnızca 20 uzunluğunda ise okunan karakter dizisini PLC'ye göndermiştik. Bu durumda verinin sağa yada sola kesinlikle kaymaması gerekirdi.

Eğer birden fazla karşılaştırma şartına göre HMI içerisinde bir işlemi gerçekleştirmek isterseniz aşağıdaki gibi örnek komutu kullanabilirsiniz. Açıklamalar komut satırlarında yer almaktadır.

===============================

# $0 datasının değeri 1'e eşit ise $100.0 SET, 0'a eşit ise $100.0 RESET

IF $0 == 1
BITON $100.0
ELSE
BITOFF $100.0
ENDIF

# $1 datasının değeri 1'e eşit ise $100.0 SET, 0'a eşit ise $100.0 RESET

IF $1 == 1
BITON $100.1
ELSE
BITOFF $100.1
ENDIF


#$100 3'e eşit ise (Aslında $0 ve $1 datalarının her ikiside 1 ise)
#$50 datasını Block Move komutu ile D100 datasına taşır. n:10 word

IF $100 == 3

BMOV(({Link2}1@D100), $50, 10)

ENDIF

END

===============================
Kullanıcı avatarı
okannet
Mesajlar: 12
Kayıt: 09 Ara 2019, 16:43
İletişim:

Re: DOP-107EV

Mesaj gönderen okannet »

Merhaba;
Veride kayma olmadığı anlarda da sonuç değişkeni hep 0 kalıyor.
Verideki kaymayı önlemek için seri porttan gelen verinin ilkinin S harfi olduğunu ve $10 adresine gelen "Bilgi başarılı olarak alındı" şartlarına göre verileri bir diziye almak istiyorum. Örneğin aşağıdaki gibi bir kod yazıyorum ama IF bloğunun olduğu satırda syntax hatası veriyor. IF (($10==1) && ($100=='S')) yazdığımda da aynı hatayı alıyorum. C dilindeki gibi şartları & ile bağlama yapılamıyor mu acaba.

Kod: Tümünü seç

IF ($10==1 && $100=='S') 
BMOV($200, $100, 20)
BMOV(({EtherLink1}1@D100), $200, $20)
ENDIF
Kullanıcı avatarı
okannet
Mesajlar: 12
Kayıt: 09 Ara 2019, 16:43
İletişim:

Re: DOP-107EV

Mesaj gönderen okannet »

Merhaba;
Verinin sağa sola kayma problemi baud hızını artırdıktan sonra çok nadir olmaya başladı ve bu şekilde idare edebiliriz ancak gönderdiğiniz plc programında sayıya dönüştürme işlemi bir kez çalışıp bir daha çalışmıyor, bazen de hiç çevirmiyor.
PLCdeki çevirme işlemini yapmanın başka bir yolu var mıdır.
Gönderdiğim ekran görüntüsünde de gördüğünüz gibi D100 nolu adrese SU karakterleri yanyana görünüyor. Sanki bir veri tipi uyuşmazlığı var gibi ama çözemedim.
Kullanıcı avatarı
Turhan
Mesajlar: 2615
Kayıt: 07 Mar 2018, 16:06
Konum: İstanbul
İletişim:

Re: DOP-107EV

Mesaj gönderen Turhan »

DTM ve $FVAL komutları ile konvert işlemi sorunsuz gerçekleştirilebiliyor. Desteklenen diğer komutlar için AS Series Programming Manual başlığını ziyaret edebilirsiniz.

Seri portdan gelen ilk iki karakterin SU olduğunu teyid etmek istiyorsanız bunu S ve U harflerine karşılık gelen ASCII HEX değerini referans almalısınız.

$100 => SU => H5553 => 21843

=======================

IF $100 == 21843
BITON $500.0
ELSE
BITOFF $500.0
ENDIF
END

=======================
Cevapla

“HMI Forum” sayfasına dön