Keresés

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

  • Szirty

    őstag

    válasz Mr. Cutter #112 üzenetére

    Hali Mr. Cutter!

    Ez a program elviekben azért íródott, hogy 2 számítógép kommunikáljon egymással rs232-n keresztül.próbáltam küldeni a plc-re azt a karaktersorozatot, amit írtál:
    @01RD00000009FCS*CR (plCS= 57), nem reagált a plc,


    Nos amikor írtam a példát, gondoltam megnézed a hostlink PDF-et :)
    Az FCS egy ellenőrző összeg (Frame CheckSum), amit az üzenet tartalmából XOR-al kell kiszámolni, ezért minden üzenetnél más és más.
    vagyis nem egy fix karaktersorozat.
    Ha egy host link parancs végén, amit a PLC-nek küldesz, nem megfelelő az FCS, a PLC azt feltételezi, hogy az átvitel hibás, az érkezett adatcsomag sérült, és a parancsra nem reagál!
    A CR pedig a kocsi vissza karakter kódja ASCII-ban (a hostlink alapvetően ASCII).
    A host linkben ([link])
    Pl. a HR olvasás parancs így néz ki:
    [kép]
    Tehát:
    @ (kukac, ami 40h)
    Egység száma ASCII-ben, vagyis ha az egység száma 01, akkor a 30h és 31h kódokat kell küldeni, mivel a ''0'' karakter ASCII kódja hexa 30, az ''1'' ASCII karakter kódja hexa 31
    Utána jön a parancs, ami két karakter (két byte) ezesetben RH (HR area read). A ''H'' betű kódja 38h, az ''R'' kódja 52h.
    Ezután négy karakteren (szintén ASCII-ben) meg kell adni a kiolvasandó terület első rekeszének címét, majd 4 karakteren a kiolvasandó rekeszek számát, decimálisan. Tegyük fel, hogy a HR6 és HR7 tartalmát akarod olvasni. Akkor a 0006 és 0002 lesz a két sorozat, ami ASCII-ben így néz ki: 30h, 30h, 30h, 36h, majd: 30h, 30h, 30h, 32h
    Ezt követi a két byte FCS ASCII-ben. Ezt ki kell számolni az előző karakterkódok alapján, amit a hivatkozott PDF 77. oldalán lehet megtalálni (67. oldal a PDF számozása szerint).
    Az eddigi karaktersorozat hexában tehát az alábbi:
    40h, 30h, 31h, 38h, 52h, 30h, 30h, 30h, 36h, 30h, 30h, 30h, 32h
    Ebből kell sz FCS-t kiszámolni az alábbi ábrának megfelelően:
    [kép]
    Konkrétan: 40h XOR 30h XOR 31h XOR 38h XOR 52h XOR 30h XOR 30h XOR 30h XOR 36h XOR 30h XOR 30h XOR 30h XOR 32h
    Ennek eredménye ha jól számolom: 2Fh
    Ezt át kell alakítani két karakteres ASCII kóddá: A ''2'' karakter hexa kódja: 32h, az ''F'' betű kódja: 46h.
    Ezt egy csillag karakter követi 2Ah kóddal, majd jön egy CR kocsi vissza karakter, ami 13h.
    A HR6 és 7 kiolvasásának komplett parancsa tehát:
    40h, 30h, 31h, 38h, 52h, 30h, 30h, 30h, 36h, 30h, 30h, 30h, 32h, 32h, 46h, 2Ah, 13h
    Feltéve persze hogy 1:N kommunikáció van beállítva és a lekérdezett PLC ''unit number'' 01-re van beállítva.
    A válasz formája, amiben a PLC visszaküldi a lekérdezett HR-ek tartalmát, szintén benne van az említett PDF-ben, de terjedelmi okokból ide inkább nem írom le.
    Ha gond van kérdezz!

    Mr. Cutter-nek:
    Ha a kommunikáció 1:1 jellegű (és a beállítás is 1:1, nem csak a fizikai kiépítés, mivel 1:N kommunikáció két eszköz között is lehetséges), akkor ha jól emlékszem nem kell elküldeni az egységszámot, és az FCS kiszámítáűsában sem vesz részt természetesen. De a részletekért nézd meg a PDF-ben.

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