Új hozzászólás Aktív témák

  • Szirty

    őstag

    Helló Szabest!

    Valami szétcsúszott a prohardveren, mert válaszolni nem lehet, csak új üzenetet írni.
    Szóval én verzióm a következő:

    "Kérdésem, hogy van-e ilyen gyári FC, SFC, amivel végig tudok "scanneltetni' egy DB-t hogy szerepel-e benne a beadott szám?"

    Igen, van olyan, amelyikkel meg lehet csinálni. Az TI-S7 Converting Blocks / FC86 TBL_FIND meg tudja csinálni.
    Ez adott mintát (sorozatot) keres egy táblázatban. A minta természetesen lehet egy elemű is.
    A táblázatban és a mintában BYTE, WORD, INT, DWORD, DINT, REAL típusú elemek lehetnek.
    Egy lényeges kikötés van, hogy a táblázat első elemének a táblázat hosszát (a keresés hatókörét) kell megadnia. Tehát abból tudja mennyi adatot nézzen át.
    A blokk hívása így fest:

    SRC: a táblázat, amiben keresni kell
    PATRN: A minta amit a táblázatban keres
    CMD: A keresésre vonatkozó parancs, ami B#16#01 = azonosság keresése, B#16#02 = eltérés keresése lehet
    E_TYPE: Az adattípust adja meg, B#16#02 = BYTE, B#16#04 = WORD, B#16#05 = INT, B#16#06 = DWORD, B#16#07 = DINT, B#16#08 = REAL
    INDX: EGy in/out paraméter. Az itt megadott számú elemnél kezdi el a táblázatban a keresést és ide teszi bele, hogy hanyadik elem felel meg a keresési kritériumnak.
    RET_VAL: Itt mondja meg, hogy talált vagy nem találta a keresett mintát, illetve ha egyéb baja van W#16#0008 - Nem talált semmit, W#16#0000 - Talált.

    INDX értékét akkor kell figyelembe venni, ha RET_VAL értéke W#16#0000
    A példában szereplő hívásnak ez a DB tartalom került átadásra:

    Ahol az INTArray definíciója ez: INTArray[0..100] INT
    Természetesen a keresés helye nem kell hogy tömbdefiníció legyen az FC 86-nak ANY típusú pointerrel bármit meg lehet adni, de a tábla nem tartalmazhat eltérő (vegyes) típusú adatokat.
    Ez a kép működés közben készült:

    A blokk az 1997-es számot kereste és találta meg a táblázat 14-es elemében.

Új hozzászólás Aktív témák