Keresés

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

  • Szirty

    őstag

    válasz wertick #109 üzenetére

    Hali wertick!

    Nekem elég lenne egy két-három regiszter tartalom is. Ehhez milyen framet kell a programból küldenem a PLC-nek? (@........)

    Milyen a kommunikáció beállítása? 1:1 vagy 1:N?
    Ha az utóbbi, hanyas a PLC címe?
    Milyen memóriaterületet akarsz kiolvasni (''regisztert''): IR, HR, AR, LR, DM, FM stb?
    Hány darab ilyen regisztert akarsz kilvasni?

    A kérdésedre csak a fenti kérdések megválaszolása után lehet pontos választ adni.

  • Szirty

    őstag

    válasz wertick #111 üzenetére

    Helló wertick!

    A PLC-hez annyira nem értek,de annyi biztos,hogy hibakódokat kellene kiolvasni,gondolom megvan annak is a maga rekesze(regisztere).

    Ez világos, de hát a kiadandó Host-Link parancs nyilván attól függ, hogy a PLC milyen memóriaterületének melyik címét akarod kiolvasni.
    Mindenképpen szükség van erre az információra, hiszen amíg nem tudod mit akarsz kilvasni, addig esélyed sincs arra hogy kiolvasd :)

    Még annyit, hogy asm.-ben programozom a PIC-t. (esetleg ha ez még változtatna a dolgon)


    Nincs jelentősége a dolog lényegét tekintve.
    A következő üzenetben írok egy konkrét példát ha annyira nem érthető ez a Host link PDF amit linkeltem...

  • Szirty

    őstag

    válasz wertick #120 üzenetére

    Hali wertick!

    Még annyit:
    A rekeszek címét honnan lehet megtudni, nekem ERROR READ, azaz MF-et kellene használnom. Két hibát olvasnék ki, például Program error és Memory error. Ezek milyen címen helyezkednek el? Honnan tudom meg? PLC leírásból esetleg.


    Az ERROR READ a PLC hibaállapotát kérdezi le.
    Ha a PLC által vezérelt berendezés hibaállapotát akarod lekérdezni, akkor rossz irányba rohamozol, mert a kettőnek semmi köze egymáshoz.
    A PLC hibaállapotát nem címek lekérdezésével lehet kiolvasni, hanem a status olvasással.
    Ha a PLC hibaállapota érdekel, akkor azt a PDF pontosan leírja az ''4-3 ERROR READ'' résznél (71. oldal).
    Egy bithalmazt kapcs vissza. A bitek konkrét jelentése pedig a hivatkozott oldalon van a PDF-ben.

    A válaszról nem írnál kicsit bővebben. Mégis miket küld vissza a mikrovezérlőnek?

    Még oda is tettem képben az előző üzenetbe.
    A válasz formátumát a ''Response format'' felirat alatt láthatod egy ábra formájában. A 72. oldalon van egyébként ha a HR olvasás érdekel. De persze minden parancsnak más a válasz formája.

  • Szirty

    őstag

    válasz wertick #121 üzenetére

    Hali wertick!

    Ezt most találtam az Omron leírásban.
    A memóriaterületen ezen része kellene nekem? Vagy semmi köze hozzá?


    És ez miféle hibanapló? Az nincs odaírva? Pontosan milyen leírásban is találtad ezt?
    Ha a vezérelt berendezés hibaállapotáról akarsz infót lekérdezni, akkor én nem tudom neked megmondani hogy milyen memóriaterület melyik rekeszét kell kiolvasni, mert elképzelésem sincsen miféle berendezésről lenne szó.
    A berendezést vezérlő program írója az egyetlen megmondhatója hogy melyik memóriaterületet mire használta fel amikor a vezérlőprogramot megalkotta. Ő az aki ezt az infót ismeri. Ha ezt leírta valahova a berendezéshez tartozó valamilyen dokumentációba, akkor onnan kiolvashatod. Ha nem, akkor marad az, hogy felveszed vele a kapcsolatot, vagy visszafejted a PLC programját, hogy mit hova tesz és mit hol tárol.
    A kérdésedre csak így kaphatsz választ.
    Te sem tudod megmondani melyik fiókban tartom itthon a barna zoknimat, mert oda teszem, ahova akarom! Na ez is olyan dolog...

  • Szirty

    őstag

    válasz wertick #130 üzenetére

    Helló wertick!

    Ez kell nekem is,csak nem voltam tisztában a dolgokkal teljesen.
    Most már csak egy van hátra, hogy is kell a keretet kiszámolgatni amit kiküldök.


    Nos azt is leírtam, megint a PDF-re tudok hivatkozni, a 77. oldalon találod az FCS kiszámításának módszerét, ha erre gondoltál. De lássuk újra:
    [kép]

    A 77. oldalon ezt az ábrát találod.
    Tehát összeállítod a parancsot, az FCS előtti karakterig.
    Nálad ez ''@01MF00'' karaktersorozat, ha az alábbi két feltétel teljesül:
    1. A kommunikációs mód 1:N és 01-a PLC-n beállított cím, vagyis az Unit Number.
    2. A hibaállapot lekérdezésekor nem akarod hogy, ha van hiba, akkor az törlődjön is (csak lekérdezés). Ha törölni is akarod a kilvasással egyidőben, akkor a 00 helyett 01 kell.

    Az FCS-t úgy számolod ki, hogy a parancs ASCII kódjait össze XOR-olod byte-onként:
    Ez a parancs: ''@01MF00''
    Ezek ASCII kódjai hexában: 40 30 31 4D 46 30 30
    Az FCS kiszámítása tehát:
    FCS= 40 XOR 30 XOR 31 XOR 4D XOR 46 XOR 30 XOR 30
    Ennek eredménye hexa 74
    Fogod ezt a 74-et, ASCII ként két karakterklént értelmezed, azaz ''7'' és ''4'', az FCS ezek ASCII kódja lesz, vagyis 37 34.
    A teljes parancs FCS-el együtt ez: ''@01MF0074*'' (a CR nem látható).
    Hexában ez így néz ki: ''40 30 31 4D 46 30 30 37 34 2A 0D''
    Természetesen ha a hibát törölni akarod kiolvasáskor, akkor 00 helyett 01 kell a parancsba, ami miatt az FCS is megváltozik!

    Gondok amik még vannak: az @ után lévő 2 bit ( unit no.)

    Az két byte, nem két bit.
    Ha a HostLink kommunikáció 1:N módban van, az azt jelenti, hogy egy soros vonalra (RS422-n) fel lehet fűzni 32 db PLC-t. Ilyenkor ez a két karakter a PLC címét adó két ASCII karakter. A Host Link alapvetően ASCII-ben kommunikál le mindent!
    Lehet 1:1 kommunikációt is beállítani, ez HostLink egységen DIP kapcsolókkal, PLC-be épített soros portnál DM memóriákkal külön állítható be. Olyankor a cím (Unit Number) küldése elmarad, erről megintcsak a hivatkozott PDF-ben kellene elolvasni hogy is megy pontosan ilyenkor, mert nem néztem meg.

    Ja és még valami!
    A visszaküldött bitminta összesen hány bites?


    A fenti parancsra összesen 19 byte-ot kapsz vissza (152 bit) PDF 71. oldal

    Az okozhat gondot,hogy a PIC 1 karaktert tud kiküldeni egyszerre? A PLC tudja,hogy ez egy keret, vagy nem fog reagálni rá?

    Nem probléma, a kommunikáció byte-onként zajlik.
    Minden küldött és kapott parancsban van ún. delimiter. A delimiter olyan karaktersorozat, ami egyértelműen azonosítja az adás elejét és végét.
    Ezesetben az adás elejét a ''@'' karakter, a végét a CR (0D) kocsi vissza karakter jelzi. A kettő között van a lényeg. Mivel a delimiter karakterek soha nem szerepelnek a parancson vagy az arra adott válaszon belül, csak az elején és végén, ezért egyértelműen el lehet dönteni az adás elejét és végét.
    Persze a karakterek küldése között van egy ún timeout idő. Vagyis két karakter küldése között eltelt időnek végesnek kell lennie!

  • Szirty

    őstag

    válasz wertick #137 üzenetére

    Hali wertick!

    Hogy jön ki az a 19 byte amit visszaküld a plc. Tudom ott van a pdf 71.oldalán.

    Pontosan. Ott van bizony! :)

    Rosszul számolod. Mint mondottam volt, a HostLink kommunikáció ASCII alapú!
    Ami egy word, az ugye két byte ugyan, de 4 byte-on küldi át.
    Pontosan úgy, ahogyan az FCS-t is, ami egy bíte, mégis két byteon küldi át, mivel azt az egy byte-ot, a HEXA értékének megfelelő ASCII karakterekkel írjale, ami két shelyiérték, Így lesz egy byte-ból kettő és két byte-ból négy.
    Ha pl. 65535-öt akarok átküldeni, ami ugye egy word és hexában éppen FFFFh, akkor abból úgy lesz 4 byte a HostLink szerint, hogy négy darab ''F'' betűt küld át, azaz ezek ASCII kódját: ''FFFF''

    Akkor tehát ennek fényében a PLC-től kapott válasz:
    1. byte: ''@'' ennek a kódja 40h
    2. és 3. byte. az egység száma: ''01'', azaz 30h, 31h
    4. és 5. byte a parancs két betűje, azaz ''MF'', vagyis 4Dh, 46h
    6. és 7. byte az RC (response code) ami egy byte, ezért két karakter, bármi lehet. Hogy mit jelent? Esetleg ha rákeresel a PDF-ben arra a két szóra, hogy ''response code'', akkor találsz a 95. oldalon egy olyan részt, aminek az a címe, hogy ''Response code list''. Gondolom a táblázat amit ott találsz, majd választ ad a kérdésedre.

    8, 9, 10 és 11. byte-on jön a ''first word'', ami négy ASCII karakterrel leírt szó, vagyis két byte.
    12, 13, 14, és 15. byton jön a ''second word'' ami ugyanúgy négy karakteren leírt 2 byte.
    16. és 17 byte-on jön két karakter, ami ugyancsak ASCII karakterekkel leírja az FCS-t, ami ugye egy byte lesz majd ha visszaforgatod.
    18, byte egy csillag ''*'' karakter, vagyis 2Ah
    A 19. byte pedig a CR karakter, azaz kocsi vissza: 0Dh

    A * és a CR ha jól tudom nem küldi vissza,vagy igen?

    Idézet a 133-as üzenetből:
    ''Minden küldött és kapott parancsban van ún. delimiter. A delimiter olyan karaktersorozat, ami egyértelműen azonosítja az adás elejét és végét.
    Ezesetben az adás elejét a ''@'' karakter, a végét a CR (0D) kocsi vissza karakter jelzi.''

    Tehát a ''*'' és CR karakterek minden parancsban és az arra adott minden válaszban benne vannak, mert ezek határolják az adás és a vétel elejét és végét!

    Még egyszer: A HostLink ASCII alapú!! Mindent ASCII karakterekkel ír le! Ezért lesz egy byte-ból kettő és egy word-ből négy karakter (byte)!

  • Szirty

    őstag

    válasz wertick #139 üzenetére

    Hali wertick!

    First Error Word: F F F F ez az ASCII karakter. Ez hex-ban: 4D 4D 4D 4D.
    Ebből, hogy lesz 2*8 bit,


    Már a kérdést se értem. FFFFh az eleve 16 bit! 16 darab 1-es bit.

    ahogy a PDF 71.oldalán az ábra mutatja,ugyanis az egyes bitek kiolvasásával lehet hibákat olvasni.

    Beolvasod az összes karaktert egty pufferbe, amit a PLC a parancsodra válaszol.
    Először is fogod a 8, 9, 10, 11.-edik karaktert. Ezt a 4 karaktert hexa számként értelmezve átalakítod bináris számmá valahogy így:
    Fogod a 4 karakter egyikét, mondjuk az elsőt (bal oldalit). Kivonsz belőle 48-at (dec), majd megnézed nagyobb-e mint 9. ha nem, akkor elrakod. Ha igen, akkor kivonsz belőle még 7-et és akkor rakod el. Ezt megismétled mind a 4 további karakterrel.
    Majd fogod a kapott 4 byte-ot, és a bal oldalit eltolod balra 4 bittel, úgy, hogy azt az eltolást alkalmazod, amelyik 0 biteket léptet be balról, majd ezt a byte-ot OR műveletnek veted alá a következő helyiértékből kapott byttal, majd a kapott értéket elrakod.
    Ugyanezt a műveletet elvégzed a maradék két helyiértékből kapott byte-al, (vagyis a kettő közül a magasabb helyiértékűt, azaz balról a 3 karakterből kapott eredményt) megint eltolod 4 bittel balra ahogy az előbb, majd hozzá OR-olod az utolsót, majd eltárolod.
    Most van két byte-od. Amit elsőként saqkkoztál össze az a magasabb, amit másodikként az az alacsonyabb. Ez a kettő most már binárisan tartalmazza azt az értéket, amit a PLC ASCII-ba kódolva küldött neked, Ezek bitjei pontosan azt jelentik, amiket a 71. oldalon látsz a PDF-ben.
    A másik (second error word) szóval ugyanezt eljátszod, hogy abból is megkapd a bináris értéket és kész.
    Célszerű egy rutint írni az ASCII->Bin konverzióra és utána csak azt hívogatni.

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