S7-1200 / 1500 için yeni veri türleri
S7-1200 / 1500 kontrolörleri, programlamayı daha kolay hale getirmek için yeni veri türlerini destekler. Yeni 64 bit veri türleriyle, çok daha büyük ve daha kesin değerler kullanılabilir.
Not
Daha fazla bilgi aşağıdaki girişte bulunabilir:
STEP 7'de (TIA Portal), S7-1200 / 1500 için veri türlerini nasıl dönüştürürsünüz?
https://support.industry.siemens.com/cs/ww/en/view/48711306
Temel veri türleri
Tablo 1 : Integer veri türleri
Tip |
Boyut |
Değer aralığı |
USint |
8 bit |
0 .. 255 |
SInt |
8 bit |
-128 .. 127 |
UInt |
16 bit |
0 .. 65535 |
UDInt |
32 bit |
0 … 4.3 Mio |
ULInt* |
64 bit |
0 … 18.4 Trio (1018) |
LInt |
64 bit |
-9.2 Trio ... 9.2 Trio |
LWord |
64 bit |
16#0000 0000 0000 0000 … 16# FFFF FFFF FFFF FFFF |
* sadece S7-1500 için
Tablo 2 : Float point veri türleri
Tip |
Boyut |
Değer aralığı |
Real |
32 bit (1 bit önek, 8 bit üs, 23 bit mantis), virgülden sonra 7 basamak
hassas |
-3.40e + 38 .. 3.40e + 38 |
LReal |
64 bit (1 bit önek, 11 bit üs, 52 bit mantis), virgülden sonra 15 basamak
hassasiyeti |
-1.79e + 308 .. 1.79e + 308 |
Not
Daha fazla bilgi aşağıdaki girişlerde bulunabilir:
STEP 7'de (TIA Portalı), SCL'deki DInt Eklemesinin sonucu neden düzgün görüntülenmiyor?
https://support.industry.siemens.com/cs/ww/en/view/98278626
Veri türü Date_Time_Long
Tablo 3 : DTL'nin Yapısı (Date_Time_Long)
Yıl |
Ay |
Gün |
Hafta içi |
Saat |
Dakika |
Saniye |
Nanosaniye |
DTL daima geçerli sistem saatini okur. Tek tek değerlere erişim sembolik adlarla yapılır (örneğin, My_Timestamp.Hour)
Avantajları
• Tüm alt bölgeler (örneğin Yıl, Ay,…) sembolik olarak adreslenebilir.Öneri
LDT yerine yeni DTL veri türünü kullanın ve sembolik olarak adresleyin (örneğin, My_Timestamp.Hour).
Not
Daha fazla bilgi aşağıdaki girişlerde bulunabilir:
STEP 7'de (TIA Portal), S7-300 / S7-400 / S7-1200 / S7-1500'ün CPU modülleri için tarih ve saati nasıl girebilir, okuyabilir ve düzenleyebilirsiniz?
https://support.industry.siemens.com/cs/ww/en/view/43566349
DT ve DTL veri türlerini işlemek için STEP 7 V5.5 ve TIA Portal'da hangi işlevler bulunur?
https://support.industry.siemens.com/cs/ww/en/view/63900229
Diğer zaman veri türleri
Tablo 4 : Zaman veri türleri (sadece S7-1500)
Tip |
Boyut |
Değer aralığı |
LTime |
64 bit |
LT#-106751d23h47m16s854ms775us808ns … LT#+106751d23h47m16s854ms775us807ns |
LTIME_OF_DAY |
64 bit |
LTOD#00:00:00.000000000 … LTOD#23:59:59.999999999 |
Unicode veri türleri
WCHAR ve WSTRING veri türlerinin yardımıyla Unicode karakterler işlenebilir.
Tablo 5 : Zaman veri türleri (sadece S7-1500)
Tip |
Boyut |
Değer aralığı |
WCHAR |
2 Byte |
- |
WSTRING |
(4 + 2*n) Byte |
Ön ayar değeri: 0 ..254 karakter Maks. Değer: 0 ..16382 |
n = ipin uzunluğu
Özellikleri
• Latin, Çince veya diğer dillerdeki karakterlerin işlenmesi.Misal
• WCHAR # ‘a‘
• WSTRING # ‘Hello World!‘
VARIANT Veri tipi (FW4.1'den S7-1500 ve S7-1200)
VARIANT türündeki bir parametre, farklı veri türlerinin etiketini gösterebilen bir işaretçi. HERHANGİ bir işaretçinin aksine, VARIANT tip testine sahip bir işaretçidir. Bu, hedef yapının ve kaynak yapının çalışma zamanında kontrol edildiği ve aynı olması gerektiği anlamına gelir.
Örneğin VARIANT, giriş olarak iletişim blokları (TSEND_C) için kullanılır.
Şekil 1 : TSEND_C talimatı için giriş parametreleri olarak VARIANT veri türü
Avantajları
• Entegre tip testi hatalı erişimi önler.Özellikleri
ANY ve VARIANT arasında bir karşılaştırma yapıldığında, özellikler görülebilir.
Tablo 6 : ANY ve VARIANT karşılaştırılması
ANY |
Variant |
Tanımlanmış yapıya sahip 10 bayt bellek gerektirir |
Kullanıcı için ana bellek gerektirmez |
Veri alanının atanmasıyla veya ANY yapısının doldurulmasıyla başlatma |
Veri alanını veya sistem talimatını atayarak başlatma |
Yazılmamış - birbirine bağlı bir yapının türü tanınamıyor |
Yazılı - birbirine bağlı tip ve diziler için uzunluk da belirlenebilir |
Kısmen yazılmıştır - diziler için uzunluk da belirlenebilir |
VARIANT sistem talimatları ile değerlendirilebilir ve oluşturulabilir |
Öneri
• ANY pointerini kullanmadan önce nerede olduğunu kontrol edin. Çoğu durumda bir işaretçi artık gerekli değildir (aşağıdaki tabloya bakın).Tablo 7 : Karşılaştırma ANY pointer ve basitleştirmeler
ANY pointerları ne
için kullanılır? |
|
S7-1200 / 1500 ile
basitleştirme |
Farklı veri türlerini
işleyebilen programlama fonksiyonları |
|
Bloklar için InOut
parametresi olarak varyant göstergeli işlevler (aşağıdaki örneğe bakın)
|
Dizilerin işlenmesi ·
örneğin,
aynı tip elemanların okunması, başlatılması, kopyalanması |
|
Varsayılan dizi işlevleri ·
#MyArray
[#index] ile okuma ve yazma (bkz. Bölüm 3.6.2 ARRAY veri türü ve dolaylı alan
erişimi) ·
MOVE_BLK
ile kopyalama (bkz. Bölüm 2.9.1 MOVE talimatları) |
·
Mutlak
adresleme yoluyla yapıların aktarılması ve performans işleme
örneğin, kullanıcı tanımlı yapıları ANY pointer
aracılığıyla işlevlere aktarma |
|
Yapıları InOut
parametreleri olarak aktarma ·
bkz.
Bölüm 3.3.2 Referans yoluyla arama |
Not
Yapısal olmayan VARIANT etiketlerinin değerleri kopyalanacaksa, MOVE_BLK_VARIANT yerine VariantGet'i de kullanabilirsiniz (bölüm 2.9.2 VARIANT talimatları).
Misal
VARIANT veri tipiyle kullanıcı programındaki veri tiplerini tanımlamak ve bunlara uygun şekilde cevap vermek mümkündür. Aşağıdaki “MoveVariant” FC kodları olası bir programlamayı gösterir.
• InOut resmi parametresi “InVar” (veri türü VARIANT), veri türünden bağımsız bir etiketi göstermek için kullanılır.
• Gerçek parametrenin veri türü “Type_Of” komutu ile algılanır
• Veri türüne bağlı olarak, etiket değeri “MOVE_BLK_VARIANT” komutu ile farklı çıktı biçimsel parametrelerine kopyalanır.
• Gerçek parametrenin veri türü algılanmazsa, blok bir hata kodu verir.
Şekil 2 : FC “MoveVariant” ın resmi parametresi
CASE TypeOf(#inOutVariant) OF
// Check datatypes
Int: // Move Integer
#MoveVariant := MOVE_BLK_VARIANT(SRC := #inOutVariant,
COUNT := 1,
SRC_INDEX := 0,
DEST_INDEX := 0,
DEST => #outInteger);
Real: // Move Real
#MoveVariant := MOVE_BLK_VARIANT(SRC := #inOutVariant,
COUNT := 1,
SRC_INDEX := 0,
DEST_INDEX := 0,
DEST => #outReal);
typeCustom: // Move outTypeCustom
#MoveVariant := MOVE_BLK_VARIANT(SRC := #inOutVariant,
COUNT := 1,
SRC_INDEX := 0,
DEST_INDEX := 0,
DEST => #outTypeCustom);
ELSE // Error, no sufficient datatype
#MoveVariant := WORD_TO_INT(#NO_CORRECT_DATA_TYPE);
// 80B4: Error-Code of MOVE_BLK_VARIANT: Data types do not correspond
END_CASE;