Indirect Addressing S7 PLC

Step 7 Add comments

Sedikit penjelasan indirect addressing di S7, dalam S7 ada tiga jenis indirect addressing, yaitu :
- Memory Indirect Addressing
- Area Internal Register Indirect Addressing
- Area Crossing Register Indirect Addressing

Yup, langsung aja ke yang pertama ya :

- Memory Indirect Addressing
Pada umumnya, indirect addressing pada S7 memiliki dua bagian, yaitu address identifier dan square brackets. Address identifier merupakan kepala dari address yang ingin kita buat indirectnya, contoh : I, Q, M, L, DIX, DBX, dsb. Yang kedua square brackets yaitu address yang ingin kita tuju, bisa terdiri dari word atau double word. Word digunakan untuk Timer (T), counter (C), data block (DB, DI), atau logic block (FC, FB). Sedangkan Double Word digunakan untuk boolean, dengan format P#Byte.Bit.

Contoh :

L 5
T MW2
L MW [MW2]
T MW100

script diatas sama saja dengan :

L MW5
T MW100

jadi nilai dari MW5 tidak akan bisa dilacak dari “cross reference”, karna nilainya disamarkan oleh nilai dari variabel MW2…hehehehe makanya dengan menggunakan indirect addressing ini membuat program kita menjadi sedikit berkelas :)

- Area-Internal Register Indirect Addressing

Secara prinsip hampir sama dengan Memory Indirect Addressing, perbedaannya hanya pada AR1 (Accumulator Register), untuk lebih jelasnya langsung ke contoh aja ya :

L P#8.2
LAR1
A I [AR1, P#0.0]
= Q [AR1, P#1.1]

script diatas sama saja dengan :

A I 8.2
= Q 9.3

untuk input nilai I 8.2 didapat dengan menambahkan (8.2 + 0.0), sedangkan nilai output 9.3 didapat dengan menambahkan (8.2 + 1.1), nah jika kita “cross reference” Q9.3, maka dijamin kita gak akan mendapatkan address tersebut, hehehe sungguh sangat licik bukan :)

- Area-Crossing Register Indirect Addressing

Secara prinsip hampir sama dengan Area-Internal Register Indirect Addressing, perbedaannya hanya pada AR1 (Accumulator Register) dan AR2, untuk lebih jelasnya langsung ke contoh aja ya :

L P# I8.0
LAR1
L P# Q8.2
LAR2
A [AR1, P#0.0]
= [AR2, P#1.1]

script diatas sama saja dengan :

A I 8.0
= Q 9.3

untuk input nilai I 8.0 didapat dengan menambahkan (8.0 + 0.0), sedangkan nilai output 9.3 didapat dengan menambahkan (8.2 + 1.1), nah jika kita “cross reference” I8.0 dan Q9.3, maka dijamin juga tidak akan ada :)

nb : - hanya bisa digunakan dengan menggunakan STL programming
- untuk nilai selain bit, maka pointer bit harus bernilai nol

yup, mungkin gitu aja intinya dengan cara ini program kita akan menjadi suatu program yang sedikit berkelas, karna address tersebut tidak akan bisa dilacak melalui “cross reference” so sangat bagus diterapkan di SI, karna akan membuat klien bergantung sepenuhnya pada program kita, hehehehe

22 Responses to “Indirect Addressing S7 PLC”

  1. e.one Says:

    mantafff ! cuman aku agak gatal dgn kalimat ini ‘menjadi sedikit berkelas’, hah kelas yang mana bang ? pointer-pointer-an emang klo dimanage dgn baik oke hasilnya. Cuman jangan lupa audience(user) juga, klo dokumentasi program minim atau program ente pelit komentar ..bisa mabuk yang baca program kita he he

    Disinilah aku ingat wejangan sohib yg programer tulen :
    ‘programku emang cerewet, tapi aku jamin yang baca programku langsung paham !’

  2. fathoni Says:

    inget lagi prinsip pak budi :

    “kalo bisa dipersusah, mengapa harus dipermudah”

    hahahahaha :)

  3. layudhi Says:

    L P# I8.0
    LAR1
    L P# Q8.2
    LAR2
    A [AR1, P#0.0]
    = [AR2, P#1.1]

    script diatas sama saja dengan :

    A I 8.0
    = Q 9.3
    —————————–
    ini nih,
    nyusahin orang

  4. e.one Says:

    biar ‘menjadi lebih berkelas’ mas ..:)

  5. Adhit Says:

    bisa tolong ajarin print data pake WinCC? aku pake s7300

  6. Fathoni Says:

    WinCC Scada apa WinCC Flexible ??

  7. Adhit Says:

    Pakai WinCC Scada

  8. ekov Says:

    permisi; ada yang punya sample program wincc v6 (2005), plant apa aja; utk speed-up learning aja. kalo ada yg minat intellution ifix v4 dan citect saya udah ada sample programnya. atu lagi; ada yang tau free dload utk wincc-flex. trims, semoga kita bisa jadi mitra di blog ini. salam.

  9. fathoni Says:

    saya punya contoh project pake wincc scada v6.0…..

  10. adam bures Says:

    Matur nuwun mas.
    langsung di tarik deh

  11. santosa lw Says:

    Pak, saya pemula ni. Mau tanya. Saya sedang trace program mesin dan saya ketemu line program seperti ini

    CALL SFC20
    SRCBLK :=#ValveArea
    RET_VAL:=#RetV
    DSTBLK :=P#L 18.0 BYTE 10

    saya tau tempat pengkopiannya itu dimana, tapi saya kurang mengerti mengapa penulisan DSTBLK nya seperti itu. Apa itu salah satu bentuk indirect addresing atau pointer atau bagaimana?

  12. Fathoni Says:

    itu pointer, untuk SFC20 (BLOCK MOVE) adalah bawaannya S7, tipe data untuk source dan destinationnya harus berberntuk seperti itu (pointer), tapi itu membuat kita fleksibel dalam copy jenis data, tipe dan panjang data.

  13. santosa lw Says:

    sebenarnya saya agak bingung dengan passing parameter dari penggunaan pointer di s7. misal
    P#L 18.0 atau P# I8.0, pointernya itu, kandungannya apa saja ya?
    bukankah format penulisannya
    P#memory_area byte.bit_address?

    sori kalau agak mendasar mas.

  14. Fathoni Says:

    dua duanya bisa, L itu local variable, sedangkan I adalah input, bisa juga pake M atau DB

  15. angsa Says:

    Sekedar menambahkan
    Pointer atau penunjuk terdiri dari 6 byte digunakan untuk mengidentifikasikan alamat. Dimana
    byte 0 - byte 1 : untuk DB number, bernilai 0 jika tidak menggunakan DB
    byte 2 - byte 3: untuk memory area
    byte 4-6 : byte dan bit address
    Format formal penulisan : p#memory_area byte.bit_address
    Nah memory area meliputi
    b#16#81 I Input area
    b#16#82 Q Output area
    b#16#83 M Bit memory area
    b#16#84 DB Data block
    b#16#85 DI Instance data block
    b#16#86 L Local data (L stack)
    b#16#87 V Previous local data

    Maksud dari
    P#L 18.0 : menunjuk ke pointer local data byte 18 bit 0
    P# I8.0 : menunjuk ke pointer input byte 8 bit 0

    Kalo untuk SFC 20 untuk DSTBLK : P#L 18.0 BYTE 10.
    Data type ANY yang merupakan pointer untk LOcal data dimulai dari L18.0 hingga L 28.0 , 10 byte

  16. santosa lw Says:

    ok ok, sudah tercerahkan. terima kasih banyak.

  17. santosa lw Says:

    Mas, aku ada pertanyaan lagi. Aku ada tugas untuk membuat display real time tentang isi sebuah tangki. Si pemilik menggunakan flow meter untuk mendeteksi isi tangki. Yang bisa saya dapat itu nilai flownya. Ada ide bgmn penyelesaiannya?
    Dan satu lagi, bgmn bisa mendapatkan nilai cycle time plc ya?

  18. angsa Says:

    Biasanya alat flowmeter itu bisa diconnect ke PLC melalui modul analog input, baik itu berupa arus 0-20mA/4-20mA ataupun tegangan +/- 10V, atau besaran yang lain, tergantung dari alat tersebut.
    Untuk membacanya perlu scaling di PLC, Gunakan FC105 (Scaling) standart dari Siemens.
    Cycle time bisa dari OB dapat dilihat di OB1.
    Tambahkan saja program di Ntwork di OB1 sbb

    L LW6
    T MW0 (bisa alamat memory word yang lain)

    Nilai cycle time bisa dilihat di MW0 dalam milisecond.

  19. santosa lw Says:

    kalau flowmeter, saya sudah bisa dapat nilainya. Yang diinginkan itu display isi tangki dihitung dari nilai flownya dengan fungsi waktu dan inginnya real time display seakurat mungkin. Ada Ide? Apa interrupt atau bgmn? Kalau pakai interrupt, bgmn caranya, saya belum tau caranya.

    Btw, makasi buat cycle timenya mas.

  20. angsa Says:

    change to MD16 -> MD18 (4bytes)

  21. santosa lw Says:

    numpang tny lg mas.
    saya sekarang ada projek untuk edit program plc mesin. kebetulan ada 1 udt yg harus saya edit. untungnya plc terdahulu menyediakan free space untuk tambahan data dan cukup untuk tambahan saya. tapi ketika saya edit, semua fc dan fb yg pakai udt tsb merah dan menyatakan udt tsb tidak tersedia. saya coba ‘check and update access’, tapi tidak berpengaruh. apa yg bisa saya lakukan?

  22. Fathoni Says:

    DB nya dulu yang di define ulang baru ke FC dan FB

Leave a Reply

Copyright © 2008 Achmad Fathoni, Powered by Wordpress, WP Theme redesign from Glossyblue
Entries RSS Comments RSS Log in