Skip to main content

Indirect Addressing

Indirect Addressing 

    တကယ်တမ်း​တော့ ဒီစာကို​ရေးဖြစ်တာကလည်း ဆရာရဲ့ Project Problem တစ်ခုချ​ပေးပြီ ​ဖြေရှင်းရင်းနဲ့ ​တွေ့လာတာပါ။ အဲ့​တော့ အဲ့ဒီဟာက ဘယ်​နေရာမှာ ဘယ်လိုသုံးတာလဲ,ဘာ​တွေသုံးတယ်,ဘယ်လို Program နဲ့​ရေးတာလဲဆိုတာ အဓိကထားပြီး​တော့ ​ပြောပြ​ပေးသွားမှာမယ်။ သူ့အ​ကြောင်းသိဖို့အရင် Index Register ကိုအရင်​ပြောပါမယ်။

What is Index Register?

    Index Register ဆိုတာက Process Register လို့လဲ​ခေါ်ပြီး​တော့ Program ကို Operand ​တွေရဲ့ Address ကို Program က Run ​နေတဲ့အချိန်မှာ Modify လုပ်တာပါ၊ PLC မှာရှိတဲ့ Register ​တွေက PLC ထုတ်တဲ့ Company အမျိုးအစား​ပေါ်မူတည်ပြီး​တော့ ​သုံးစွဲတာမတူကြ​ပေမယ့် သ​ဘောတရားက​တော့အတူတူပါပဲ။ အခု ဥပမာ​ပေးမှာက Delta PLC နဲ့ ဥပမာ​ပေးပါမယ်။
    Delta မှာရှိတဲ့ Index Register က​တော့ E နဲ့ F ဆိုပြီးသတ်မှတ်ထားပါတယ်။ E နဲ့ F ကိုတစ်လုံးချင်း သုံးရင်​တော့ 16 bit အ​နေနဲ့သုံးလို့ရပါတယ်။ Eနဲ့F ဟာတွဲခဲ့ရင်​တော့ 32 bit ဖြစ်သွားပါပြီ။ E ဟာ Lower 32 bit ဖြစ်လာပြီး​တော့ F ဟာ Higher 32 bit ဖြစ်လာပါတယ်။
    ဒုတိယပုံက ဥပမာနဲ့​ပြောရင် ရှင်းသွားမှာပါ။ ပုံမှာပြတဲ့ ဥပမာဆိုရင် E0 ထဲကို K8 ရွေ့ပြီ​တော့ F0 ထဲကို K14 ​ရွေ့ပါမယ်။ ​နောက်ဆုံးက MOV D5E0 D10F0 ကို​ပြောစရာ​တော့ရှိပါတယ်။ D5E0 ဆိုတာက D5 နဲ့ E0 ​ပေါင်းခြင်းပါ။ D5 + E0(K8) = D13 လို့​ပြောတာပါ။ E0 ကို K8 လို့ နဂိုကတည်းက သတ်မှတ်ထားတဲ့အတွက် 5 + 8 = 13 ဆိုပြီးဖြစ်လာတာပါ။ အလားတူပဲ D10F0 က ဒီ​နေရာမှာ D24 ဖြစ်လာပါတယ်။ အဲ့​တော့ D13 ထဲက တန်ဖိုး​တွေကို D24 ထဲ ​ရွေ့ပါဆိုတာနဲ့အတူတူပါပဲ။

What is Indirect Addressing?

    Indirect Addressing ဆိုတာက Address တန်ဖိုးထဲက Data တန်ဖိုးကို ​နောက်ထပ် Address တန်ဖိုးတစ်ခုအဖြစ်​ပြောင်းလိုက်တာပါ။ တတိယပုံမှာကြည့်ရင် Pointer ဟာ Address 2212 ကို ​ထောက်ထားပြီး သူ့ရဲ့ Data တန်ဖိုးဟာ 345 ရှိတယ်။ Indirect Addressing လုပ်လိုက်တဲ့အခါမှာ​တော့ Data တန်ဖိုး 345 က Memory Address 345 အဖြစ်ကို​ပြောင်းလဲသွားပြီ​တော့ Address 345 ထဲက သတ်မှတ်ထားတဲ့ တန်ဖိုးကို Output ထုတ်လိုက်ပါတယ်။

Programming

    အခု Project ပြသာနာကဘာလဲဆိုရင် သ​​​ဘော်​တွေအ​ပေါ်မှာ PLC တစ်ခုရှိတယ်​ပေါ့။ အဲ့ဒီ PLC ရဲ့ Output သို့မဟုတ် Input တစ်ခုခု သို့မဟုတ် Output တစ်ခုခု ကပျက်သွားတယ်ဆိုပါ​တော့။ PLC ရဲ့  Input, Output  ကို Physical Wiring က​နေ Change ပြီး​တော့ HMI က​​နေသူ့ရဲ့ Address ​တွေကို​ပြောင်းမယ်​ပေါ့။ ဆိုလိုတာက Program မှာ Start ခလုတ်က X0 ဖြစ်​နေခဲ့ရင် HMI မှာ X0 က​နေ X1 ကို ​ပြောင်းမယ်ဆိုတဲ့သ​​ဘောမျိုးပဲ။ ဒီလိုမျိုးဘာလို့လုပ်ခိုင်းတာလဲဆိုရင် သ​ဘော်ကမ်းကပ်ရင် Programmer တစ်​ယောက်​​ခေါ်ပြီး​တော့ Program Upload တင်ခိုင်းရင် ပြသာနာ မရှိ​ပေမယ့်, ပင်လယ်ထဲ​ရောက်​နေရင် ပြသာနာ​ပေါ့။
    အဲ့​တော့ ကျွန်​တော်က ဘယ်လို​ရေးသလဲဆိုရင် ခုနက Indirect Addressing သ​ဘောတရားကို ယူပြီး​တော့​ရေးလိုက်ပါတယ်။ ကျွန်​တော် Program မှာ Input နှစ်ခုနဲ့ Output နှစ်ခုရှိပါတယ်။ Program ထဲမှာ Input တစ်ခုကို X1 သတ်မှတ်ပြီး​တော့ တစ်ခုကို X2 သတ်မှတ်ထားပါတယ်။ Output ကို​တော့ Y6 လို့သတ်မှတ်လိုက်ပါတယ်။ ကျွန်​တော် က Address ​တွေအကုန်သတ်မှတ်ပြီးပြီ ချင်းပဲ Main Program ကို ပြန်သွားပြီး​တော့ Force Device List က​နေ X1 နဲ့ X2 ကို On လိုက်ပါတယ်။ အဲ့ဒီအချိန် Y6 က On အ​ခြေအ​နေကို ​ရောက်သွားပါပြီ။ အကယ်၍သာ ကျွန်​တော်ဟာ Input တစ်ခုကို HMI မှာ X1 ကို X3 လို့သတ်မှတ်လိုက်ပြီး​ Main Program သွားကြည့်ပြီ​တော့X1,X2 Onရင် Y6 on မှာမဟုတ်ပါဘူး။ X1 ​နေရာမှာ X3 On မှသာ Y6 က Onမှာပါ။ Output လည်း ထိုနည်းလည်း​ကောင်းပါပဲ။ 
    ဒီ​နေရာမှာ ​စောဒက တတ်စရာတစ်ခုရှိပါတယ်။ အကယ်၍ Input ​တွေ Output ​တွေကို တူညီတဲ့ တန်ဖိုး​ပေးခဲ့ရင် ဘယ်လိုလုပ်မလဲ? ဒါက​တော့ရှင်းပါတယ်။ HMI မှာ Program တစ်ခု​ရေးပြီး​တော့ လုပ်ရင်ရပါတယ်။ အကယ်၍ Input_A = Input_B ဖြစ်ခဲ့ရင် Error ပြမယ်ဆို​တဲ့သ​ဘောမျိုး Program ​ရေးလိုက်ရုံပါပဲ။

Reference: Delta PLC Application Programming

Comments