Keresés

Hirdetés

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

  • Szirty

    őstag

    válasz Dezsi82 #1345 üzenetére

    Hali Dezsi82!

    "Diagnosztikában megnéztem, és az oka ciklusidő túllépés."

    Van a programban ciklus, feltételes visszafele ugrás? ha van, akkor azt kell megnézni, mert valószínűleg ott lesz a gond. Hibás adatot kap és végtelen ciklusba keveredik (gondolom).

    "Honnan lehetne megtudni, hogy ez most mit jelent? Mert a súgó nem segít túl sokat."

    Ilyennel mi is találkoztunk már nem is egyszer francia programokban.
    Nagyon faramuci dolog, igen nehéz megtalálni. A "fiúk" úgy oldották meg, hogy létrehoztak egy üres OB121-et (programming error) oszt kész :>
    Ettől a hiba ugyan nem szűnt meg, de nem ment stop-ra a CPU.
    Minket viszont zavart, hogy a diag buffert telefossa area length error-okkal és emiatt egy egyszer bekövetkező hibát már nem lehet benne látni, mert az area length error-ok kisöprik 100 ms alatt.

    A mi esetünkben a megoldást meglepő módon a PLCSIM jelentette. Szerencsére PLCSIM-ben sikerült pontosan ugyanazt a hibát reprodukálni (lényegében az egész programot PLCSIM-ben futtattuk).
    A module information diag buffer fülénél van egy olyan gomb, hogy "Open block". Na ez a gomb rendszerint inaktív, ha valós CPU-t nézel. A PLCSIM-nél nem.
    A gomb funkciója egyértelm: mindig arra a blokkra ugrik, annak is arra a NW-jére, amelyikben az adott hiba keletlezett, amit a diag bufferben épp kiválasztottunk.

    "Van a programban néhány indirekt címzés, és lehet valamelyik ezek közül hibás, de melyik?"

    Ha a programot te írtad, akkor azt javaslom minden indirekt címzés elé, a cím kiszámításához feltételvizsgálatokat kell (érdemes) tenni, hogy a címzésre ne engedje ráfutni, ha túl akar lőni a célon.
    Ez plusz munkát jelent (néhány feltételvizsgálat), de úgy hálálja meg magát, hogy később kevesebb a szívás az area length error-okkal.

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