Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Konwersja Step5 -> Step7

shogun1530 29 Oct 2009 14:27 2510 5
SterControl
  • #1
    shogun1530
    Level 2  
    Witam,

    Podczas konwersji programu za pomocą konwertera ukazało się wiele errorow i warningow.

    Moj problem polega na tym:

    funkcje stepa 5; TNB zastąpiło mi SFC 20 (BLKMOV) tylko w dosc dziwny spos jak ponizej:

    step 5:
    (...)
    L FW 220
    L FW 222
    DO FW 226 //DW 0-127 (komentarz)
    TNB 0
    DO FW 228 //DW 128-254 (komentarz)
    TNB 0
    (...)


    step 7: (AWL)
    (...)
    M040:L MW 220;
    L MW 222;
    CALL SFC 20 (
    SRCBLK := P#????? BYTE 0 ,
    RET_VAL := conv_ret_val,
    DSTBLK := P#????? BYTE 0
    );
    CALL SFC 20 (
    SRCBLK := P#????? BYTE 0 ,
    RET_VAL := conv_ret_val,
    DSTBLK := P#????? BYTE 0
    );
    (...)

    nie bardzo rozumiem ten fragment w s5 wiec nie jestem pewien jak uzupełnic tego BLKMOV??

    No i gdzie jest moje przetlumaczone FW 226 i 228? zero czegokolwiek na ten temat
    jakies pomysły???
  • SterControl
  • #2
    Krzysztof_Z.
    Level 13  
    Witam,
    Niestety nie podałeś wszystkiego. Operacja "DO" jest to otwarcie wskaźnika zawartego w tym wypadku w FW 226. Według opisu chodzi o przerzucanie słów w bloku DB. Istotne jest jeszcze co jest ładowane do FW226 i FW228. Podaj cały bloczek a ja go przepiszę na S7.
    Pozdrawiam,
  • SterControl
  • #3
    Krzysztof_Z.
    Level 13  
    Przeczytałem listę instrukcji S5 i to jest tak:
    W FW 220 jest adres źródłowy,
    W FW 222 jest adres docelowy,
    w FW 226 jest ilość bajtów do przekopiowania w pierwszym kroku,
    w FW 228 jest ilość bajtów do przekopiowania w drugim kroku.
    Instrukcja TNB wykonuje kopiowanie zadeklarowaną ilość bajtów (TNB (FW226)) z adresu zawartego w accu2-L do adresu zawartego w accu1-L.

    Maksymalna ilość bytów do kopiowania to 255 i żeby skopiować 254 słowa wywoływana jest w tym przypadku instrukcja TNB dwukrotnie. Z opisu wynika że kopiowane jest najpierw słowa od 0-127 a potem od 128 - 254. Dlatego w step 7 trzeba wywołać blok SFC tylko raz, kopiując 512 bajtów
    W step 7 będzie to tak:
    CALL SFC 20
    SRCBLK := P#DBxx( xx- numer bloku DB otwartego w S5).DBXy.y(adres początkowego bajtu do kopiowania) BYTE (adres bajtu w FW220, prawdopodobnie będzie 512)
    RET_VAL:=#cokolwiek
    DSTBLK := P#DBxx.DBXy.y(adres początkowego bajtu docelowego) BYTE (adres bajtu w FW222, prawdopodobnie będzie 512)

    Nie wiem czy jest to jasne, ale poproszę o cały bloczek to wtedy napiszę dokładnie z adresami.
    Pozdrawiam,
  • #4
    shogun1530
    Level 2  
    Kod z całego networka S5:

    L KB 0
    T FW 228
    L DW 44
    L KB 255
    <=F
    JC =M001
    L DW 44
    L KB 255
    -F
    T FW 228
    L KB 255
    T FW 226
    JU =M002
    M001: L DW 44
    T FW 226
    M002: AN F 244.0
    JC =M003
    IA
    L DW 2
    SLW 8
    L KH FEFF
    TIR 2
    M003: L FW 220
    L FW 222
    DO FW 226
    TNB 0
    DO FW 228
    TNB 0
    AN F 244.0
    JC =M004
    RA
    L KB 0
    A F 255.0 // ?
    AN F255.0 // ? nie rozumiem tego ale tak tu jest
    BE

    KOD AWL S7:

    NETWORK
    TITLE = TRANSFER DURCHFUEHREN
    L 0;
    T MW 228;
    L DBW 88;
    L 255;
    <=I;
    SPB M038;
    L DBW 88; // \
    L 255; // !
    -I; // ! REST ZUM TRANSFERIEREN
    T MW 228; // /
    L 255;
    T MW 226;
    SPA M039;
    M038:L DBW 88;
    T MW 226; // ANZAHL DER BYTES - 1
    M039:UN M 244.0; // - HM TRANSFER IN KACHEL
    SPB M040;
    CALL SFC 41 (
    RET_VAL := conv_ret_val
    );
    // \
    L DBW 4; // !
    SLW 8; // ! ALARME SPERREN/KACHEL OEFFNEN
    L W#16#FEFF; // !
    // TIR 2; // /
    // *** Error in Line 5681 (FB 206): Command not defined. ***
    M040:L MW 220;
    L MW 222;

    // CALL SFC 20 ( // ----------------------TNB 0 !!!!!!!! ____________________________________________________________________________
    // SRCBLK := P#????? BYTE 0 ,
    // RET_VAL := conv_ret_val,
    // DSTBLK := P#????? BYTE 0
    // );
    // *** Error in Line 5690 (FB 206): CALL SFC20 generated. Please complete parameter list. ***
    // DW 000-127

    //CALL SFC 20 ( // // ----------------------TNB 0 !!!!!!!! __________________________________________________________________________
    // SRCBLK := P#????? BYTE 0 ,
    // RET_VAL := conv_ret_val,
    // DSTBLK := P#????? BYTE 0
    // );
    // *** Error in Line 5698 (FB 206): CALL SFC20 generated. Please complete parameter list. ***
    // DW 128-254
    UN M 244.0; // - HM TRANSFER IN KACHEL
    SPB M041;
    CALL SFC 42 (
    RET_VAL := conv_ret_val
    );
    // - ALARME WIEDER FREIGEBEN
    M041:L 0;
    U M 255.0; // \
    UN M 255.0; // ! VKE "0" = KEIN FEHLER
    // /

    END_FUNCTION
  • #5
    Krzysztof_Z.
    Level 13  
    Niestety coraz więcej niewiadomych. Nadal nie wiem co jest w FW220 i FW222, a do tego dochodzi jeszcze DW 2 i DW 44 z niewiadomego bloku DB. Najlepiej będzie jak prześlesz mi cały program S5 na maila z podaniem namiaru na omawiany bloczek.

    Nie zawsze da się automatycznie przekonwertować bloczek z S5 na S7. Najlepiej przeanalizować funkcję danego bloku i napisać ją na nowo w S7, wykorzystując jego standardowe funkcje.
  • #6
    Krzysztof_Z.
    Level 13  
    Czy sprzętowo nie ma tam czasem zainstalowanego modułu komunikacyjnego (IM5) w rodzaju CP lub IM308 itp? Bo instrukcja LIR 2 ładuje zawartość słowa DW2 do komórki pamięci o adresie FEFF. A jest to obszar odpowiedzialny za IM5. Poza tym instrukcja IA wyłącza działanie przerwań sprzętowych na chwilę załadowania tego obszaru pamięci. Następnie instrukcja RA załącza działanie przerwań ponownie.