FabyaVisionKullanım Kılavuzu
/

C betikleri

5 dk okumaBetikler

C betiğinin yapısı (Proje işlevleri, Aksiyon, Başlık dosyası), desteklenen ANSI-C alt kümesi, tag ve nesne işlevleri ve dilin desteklenmeyen yanları.

Dilin kapsamı

C betikleri, ürünün kendi ANSI-C motorunda çalışır. Gerçek derleyici ya da DLL yüklenmez: C kaynağı ön işlenir, ayrıştırılır ve çalıştırılır. Motor, gerçek bir derleyiciyle (MSVC) yan yana sınanmıştır (tam sayı ve ondalıklı işlemler, işaretçi ve dizi, yapı, dizgi, printf, akış denetimi, ön işlemci, başlatıcılar, işlevler, standart kitaplık, sscanf, ctype, zaman).

  • Bellek tek bir bellek alanıdır; ölçüler 32 bitlik düzene göredir: char 1, short 2, int 4, long 4, float 4, double 8, işaretçi 4 bayt.
  • Metinler bellekte tek baytlıdır (Windows-1254): Türkçe harfler 1 bayttır, strlen("Karıştırıcı") 11 verir. Türkçe ve Batı Avrupa harfleri dışındaki karakterler ? olur.
  • Desteklenenler: struct, union, enum, typedef, diziler, işaretçiler, switch, for / while / do, goto, parametreli makro dahil #define, #include, #ifdef / #ifndef, #pragma code.
  • Hazır başlıklar: apdefap.h, ap_glob.h, ap_pbib.h, stdio.h, stdlib.h, string.h, math.h, ctype.h, time.h, memory.h, malloc.h, stddef.h, stdarg.h, limits.h, float.h, errno.h, windows.h. Yeni betikler #include "apdefap.h" ile başlar; Live işlevleri (GetTagFloat gibi) bu başlıkla gelir.

Desteklenmeyen yanlar

Aşağıdakiler derleme hatası verir:

  • bit alanları (int a : 3)
  • __int64 / long long (64 bit tam sayı)
  • eski biçim (K&R) parametre bildirimi
  • iç bloktaki etikete goto
  • adlandırılmış başlatıcı ({ .a = 1 })

Ayrıca printf için %a ve %n, scanf, gets, getchar, fscanf, freopen, tmpfile gibi işlevler yoktur. Gerçek bir DLL dosyası yüklenemez; yalnızca DLL karşılıkları listesindeki işlevler çalışır (aşağıda).

Betik türleri

Proje işlevleri
İşlevleri ve dosya düzeyindeki değişkenleri barındırır. static olmayan işlevler ve değişkenler bütün C kodlarında ortaktır; iki betikte aynı adlı işlev Studio'da hata verir (yalnız o dosyada kullanılacaksa başına static yazın). Olayda ya da görevde işlev seçilmezse betikle aynı adlı işlev çalışır. Dosya düzeyi değişkenler çağrılar arasında değerini korur; Live kapanınca sıfırlanır.
Aksiyon
Her çağrıda çalışan koddur. Giriş işlevi sırayla: gscAction, adı On ile başlayan işlev (ör. OnClick), _main, main; hiçbiri yoksa ve kaynakta tek işlev varsa o; hiç işlev yoksa kodun tamamı gövde sayılır. Birden çok işlev var ve giriş işlevi belli değilse Studio hata verir.
Başlık dosyası
Ortak sabit ve tipler içindir: #include "Ad.h" ya da #include "Ad" ile alınır. Çalıştırılamaz.
C proje işlevleri: araç satırında işlev listesi ve İşlev düğmesi bulunur.123
C proje işlevleri: araç satırında işlev listesi ve İşlev düğmesi bulunur.
  1. C — dil rozeti; tür: Proje işlevleri.
  2. İşlev — kodun sonuna boş bir C işlevi ekler.
  3. Durum şeridi — işlev sayısı ve söz dizimi sonucu.

Olaydan çalışan işlev üç metin parametresi alır: void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName). İlki olayın sayfasını, ikincisi olayın nesnesini verir; üçüncüsü olaylarda boştur. Tag tetikli görevde tag'in yeni değeri işlevin ilk parametresine verilir.

Örnekler

Proje işlevi (Tanıtım_Tesisi'ndeki Aroma_Dozaj_Denetimi):

#include "apdefap.h"

#define SEVIYE_ALT 42.0f

// Aroma tankı seviyesi alt sınırın altına düşünce düşük seviye bitini kaldırır.
void Aroma_Dozaj_Denetimi(void)
{
    float seviye = GetTagFloat("Aroma_Seviye");
    SetTagBit("Aroma_Dusuk", (short)(seviye < SEVIYE_ALT));
}

Aksiyon:

#include "apdefap.h"

int gscAction(void)
{
    float miktar = GetTagFloat("Hedef_Miktar");

    if (miktar <= 0.0f) {
        SetTagChar("Hata_Metni", "Hedef miktar girilmedi");
        return 1;                       // erken çıkış
    }
    SetTagFloat("Toplam_Miktar", GetTagFloat("Toplam_Miktar") + miktar);
    SetTagChar("Hata_Metni", "");
    return 0;
}

Döngüyle adı numarayla biten tag'leri okuma:

#include "apdefap.h"

void C_Dongu_Cok_Tag(void)
{
    int i;
    char ad[32];
    float toplam = 0.0f;

    for (i = 1; i <= 5; i++) {
        sprintf(ad, "Silo_%d", i);      // Silo_1, Silo_2 ...
        toplam += GetTagFloat(ad);
    }
    SetTagFloat("Silo_Toplam", toplam);
}

Hazır işlevler

Ayrıntılı liste Betik nesne modeli başvurusunda, tam liste kod alanındaki Başvuru panelindedir. Özet:

Grupİşlevler
TagGetTag<Tip> / SetTag<Tip>: Bit, Byte, SByte, Word, SWord, DWord, SDWord, Float, Double, Char (metin), Raw; …State (durum kodu da verir), …StateQC (durum ve kalite), …Wait varyantları, GetTagMulti…, GetTagValue, GetTagDateTime
NesneGetPropBOOL / SetPropBOOL, …Char, …Double, …Word ve GetVisible, SetBackColor, SetText gibi özelliğe özel işlevler
Sayfa ve sistemOpenPicture, OpenPrevPicture, OpenScreeninPopup, ClosePopup, GetLanguage, SetLanguage, ShowLogonDialog, Logoff, GetComputername, printf, TraceText, ProgramExecute
C kitaplığıstrlen, strcpy, sprintf, sscanf, atoi, atof, sqrt, pow, floor, memset, malloc, time, localtime, strftime, fopen (metin kipi) …
DLL karşılıklarıUseAdmin.dll (PWRTLogin, PWRTGetCurrentUser, PWRTSilentLogin …), kernel32.dll (Sleep, GetTickCount, GetLocalTime, WinExec), user32.dll (MessageBoxA), shell32.dll (ShellExecuteA)

DLL karşılıkları kodda alışıldığı gibi #pragma code("user32.dll") ve #pragma code() satırları arasında bildirilir; listede olmayan bir DLL işlevi çağrılırsa betik hatayla durur.

Davranış kuralları

  • Olmayan tag ya da nesne hata vermez. İşlev FALSE / 0 döner ve tanılama satırı yazılır. Studio, sabit adla yazılmış olmayan tag'leri önceden uyarır.
  • Durum denetimi: GetTagFloatState("Ad", &durum) ile değer ve durum birlikte alınır. Durum 0 iyi; 0x0001 bağlantı yok, 0x0080 değer henüz okunmadı, 0x0200 adres hatası, 0x0400 tag yok. Kalite için …StateQC: 192 iyi, 84 değer tag'in alt / üst sınırının dışında.
  • …Wait işlevleri eksizlerle aynı sonucu verir: okuma o anki değeri döndürür, yazma değerin gönderilmesini bekler.
  • Renkler tek sayıdır: kırmızı + 256 × yeşil + 65536 × mavi.
  • Dosya işlevleri yalnızca metin kipinde çalışır ("b" ve "+" kipleri yok) ve Dosyalara erişme iznini ister. ProgramExecute, WinExec, ShellExecuteA Program çalıştırma iznini ister; program başlatılır ama bitmesi beklenmez.
  • Alarm işlevleri (AXC_…), tablo ve eğri pencere işlevleri (Tlg…), rapor işleri (ReportJob …) ve kullanıcı arşivi yapılandırma işlevleri tanımlıdır (kod derlenir) ama çağrılınca iş yapmaz: tanılama satırı yazılır, FALSE / 0 döner.
  • printf ve TraceText çıktısı betik tanılama listesine ve olay günlüğüne gider.

Sınırlar ve dikkat edilecekler

  • Bir çağrı en çok 30 saniye hesap yapabilir (Sleep ve pencere bekleme süreleri sayılmaz); daha uzun döngü hatayla kesilir.
  • Aynı tetik için önceki çağrı sürerken gelen çağrı atlanır.
  • Geçersiz adrese erişim ve sıfıra bölme satır numarasıyla hata verir; hata olay günlüğüne Betik, işlev, satır N: ileti biçiminde yazılır.
  • 64 bit tam sayı, bit alanı ve gerçek DLL desteği yoktur; WinCC'den taşınan kodda bu kullanımlar derleme hatası verir.
  • Betik, tarayıcıdan ya da TV'den izleme kipinde çalışmaz.

İlgili konular

FabyaVision 0.1.0 Kullanım Kılavuzu · 18 Ekim 2026© Fabyatek Yazılım Bilişim Teknolojileri Ltd. Şti.