String tipi veriden gerekli olan verileri maskeleyerek alma?

elektronikmuh

Yönetici
Yönetici
Yönetici
Katılım
13 Ocak 2007
Mesajlar
2,287
Puanları
1,866
Yaş
47
QR_Code(String):= 'DimX:303.0; DimY:1233.0; DimZ:4.0; S1234561'

Yukarıda string tipindeki içeriğinde basamak sayıları değişen QR kod çıkışı verisinden, PLC de oluşturduğum X(Real), Y(Real), Z(Real), Serial(String) değişkenlerime aşağıdaki gibi verileri çekip almak istiyorum yazılımda izleyeceğim yöntem veya algoritmalar nelerdir?
Not: QR verisini her okumada string boyutu X, Y, Z ölçülerinin basamak değeri değiştikçe değişmekte(örneğin veride binler, yüzler veya onlar basamağı değiştiğinde string boyutu değişir, DimX: DimY: DimZ, Serial S: sabit şekilde gelmekte).
PLC ye çekmek istediğim veriler:
X := 303.0;
Y := 1233.0;
Z := 4.0;
Serial:= 'S1234561';
 
Son düzenleme:
Sorunu çözdüm, çözüm algoritması aşağıdaki gibi düşündüm;
QR= 'DimX:303.0; DimY:1233.0; DimZ:4.0; S1234561'
QR stringinde ilk noktalı virgüle kadar olan kısmı parça1 şeklinde(FIND komutu) 'DimX:303.0;' string komutlarıyla algılayıp, QR verisinden silerek, geri kalan kısımlarada aynı yöntemi uygulayarak, böylece QR verisini 4 parçaya ayırdım.
Parca1 := 'DimX:303.0;'
Parca2 := 'DimY:1233.0;'
Parca3 := 'DimZ:4.0;'
Parca4 := 'S1234561'
Herbir parçada : (iki noktanın) yerini hesapladım.
Basamak değeri değişse bile istediğim veriler, iki nokta ile noktalı virgül karekterleri arasında olduğundan
Parça içindeki bu aradaki verileri string komutlarıyla maskeledim ve istediğim verilere ulaştım :)
X:= '303.0'
Y:= '1233.0'
Z:= '4.0'
S:= 'S1234561'
 
Son düzenleme:
Önceden görmemiştim bende söyle birşey yaptım. Belki işinize yarayabilir.
Kod:
IF M1 THEN
    M1 := FALSE;
    str_1 := 'DimX:303.0; DimY:1233.0; DimZ:4.0; Serial:S1234561;';
    adim := 1;
END_IF;

CASE adim OF
    1:
        _index := 0;
        adim := 5;
        
    5:
        _index := _index + 1;
        IF _index > 4 THEN
            adim := 6;
        ELSE
            adim := 10;
        END_IF;
        
    10:
        konum := FIND_E(TRUE, eno_1, str_1, ':');    //find :

        IF eno_1 THEN
            adim := 20;
        END_IF;
        
    20:
        str_2 := RIGHT_E(TRUE, eno_2, str_1, LEN(str_1) - konum);

        IF eno_2 THEN
            adim := 30;
        END_IF;
        
    30:
        konum := FIND_E(TRUE, eno_1, str_2, ';');    //find ;

        IF eno_1 THEN
            adim := 40;
        END_IF;
        
    40:
        sayi[_index] := LEFT_E(TRUE, eno_2, str_2, konum - 1);

        IF eno_2 THEN
            adim := 5;
            
            str_1 := str_2;
        END_IF;
        
END_CASE;

Değişkenler şu şekilde:
Kod:
str_1    String(128)   
str_2    String(128)   
konum    Word [Signed]   
eno_1    Bit   
eno_2    Bit   
sayi    String(128)(1..4)   
adim    Word [Signed]   
_index    Word [Signed]

Kodlar GxWorks3 ile yazıldı. Basit string komutlarını kullanarak yapmaya çalıştım. Sizin plc'niz daha iyi string komutları destekliyorsa daha farklı şeylerde yapılabilir.
 
1649911016862.png
 
Merhabalar; Aynı konuyla bende ilgileniyorum. QR barkodu PLC den okumak için piyasada satılan RS232 kablolu herhangi bir okuyucu kullanabilir miyiz ve daha önce bir çalışma yapan varsa bana ekonomik bir barkod okuyucu tavsiye edebilirmi? Yada usb haberleşmeli barkod okuyucuları plc ile haberleştirebilirmiyiz?
 
Son düzenleme:

Forum istatistikleri

Konular
129,903
Mesajlar
931,168
Kullanıcılar
452,787
Son üye
Azemm333
Geri
Üst