Indirect Addressing S7 PLC

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

27 thoughts on “Indirect Addressing S7 PLC”

  1. 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. 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

  3. 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.

  4. 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?

  5. 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.

  6. 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.

  7. 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

  8. 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?

  9. 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.

  10. 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.

  11. 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?

  12. salam kenal mas fathoni,

    saat ini saya ada project upgrade PLC,awalnya pake ABB sattcon-05, mau diupgrade ke S7. nah pertanyaan saya, apa mas fathoni punya manual programming sattcon-05 atau pernah punya pengalaman seperti itu, jadi punya trik yg bisa dishare?
    Trims, , ,
    wassalam

  13. dulu saya pernah , cuma saya tulis dari awal lagi di S7 , kalo saya berdasarkan manual atau dokumentasi dari mesin / proses tersebut serta diskusi dengan operator / proses engineer

  14. mas saya mau tanya saya open program terus disana saya buka melalui hardware ternyata gambar CPU dlm hal ini CPU 314C-2DP nya berwarna kuning..dan ada pesan “Modules which cannot be display with the installed STEP7 version (HW Update=X;HW Update deliverable” bagaimana caranya agar hardwarenya tidak kuning/dikenali saya pake software S7 V5.4 dan bagaimana cara update HW Config

Leave a Comment

Your email address will not be published. Required fields are marked *