Skip to main content

Modbus Function Command Format (1)




    ASCII သို့မဟုတ် RTU Mode ထဲက မည်သည့် Modbus Data ဘောင်တိုင်းမဆို သူတို့သတ်မှတ်ထားတဲ့ Data ကတော့ရှိပါတယ်။

    Modbus Data Frame တစ်ခုစီကို 8bitd(RTU) တွေနဲ့တည်ဆောက်ထားတာကြောင့် အများအားဖြင့် စာသားတစ်ခုချင်းစီကို Bytes (Hexadecimal တစ်လုံး နှစ်လုံး) အဖြစ်ကိုယ်စားပြုပါတယ်။

    ဥပမာအားဖြင့် 1100100101011011 ကဲ့သို့ Modbus Data နဲ့ 16-Bit စကားလုံးကို ပုံမှန်အားဖြင့် C95B နဲ့သတ်မှတ်ပြီး High ကို C9 နဲ့ Low ကို 5B ဆိုပြီးခွဲထားပါတယ်။

    Modbus Master Device ကနေပေးပို့တဲ့ "Query" Message ဟာ Slave Device ဆီကို ပို့ပြီး သက်ဆိုင်ရာ "Response" Message နဲ့ Queried ကနေ Master Device ကိုပြန်ပို့ပေးပြီးအလုပ်လုပ်ပါတယ်။

   အောက်‌ကပြထားတဲ့ ပုံတစ်ပုံချင်းစီကနေ Function Code တစ်ခုချင်းစီဘယ်လိုအလုပ်လုပ်ရ‌သလဲဆိုတာပြန်ရေးပေးထားပါတယ်။

Modbus Function Code 01- Read Coil
==============================
    ဒီ Modbus Function ဟာ Slave Device နဲ့အတူသူ့ရဲ့ Discrete Outputs ("Coils") ကို ဖတ်ပြီးတော့ အဲ့ဒီ Status တွေကို Data နဲ့ပြန်ပေးပါတယ်။

    ဒီ Function အတွက်သတ်မှတ်ထားတဲ့ Modbus Address ရဲ့ Range ကတော့ 00001 ကနေ 09999 (Decimal) အထိဖြစ်ပါတယ်။ သို့သော် Starting Address ကတော့ Hexadecimal နဲ့ဖော်ပြထားတာဖြစ်ပြီး Range ရဲ့အစကနေ (n-1)^ th Register နဲ့ဖော်ပြပါတယ်။ 

    ဥပမာပြောရရင် ပကတိ Decimal Address 00100 ကို Hexadecimal 0x0063 နဲ့ သတ်မှတ်ထားပါတယ်။ High-Order Byte ကို 63 နဲ့ သတ်မှတ်ထားပါတယ်။

    ပုံထဲမှာပြထားတဲ့အတိုင်း မီးခိုရောင်ဖျော့ဖျော့နဲ့ ခြယ်ထားတဲ့ အပိုင်းဖြစ်တဲ့ ဒုတိယအပိုင်းနဲ့ တတိယအပိုင်းကတော့ Coil Status ကို ကိုယ်စားပြုပါတယ်။ ဘာကြောင့်လဲဆိုရင် သူတို့ရဲ့တည်ရှိမှုဟာ One Byte ကျော်တန်ဖိုးရှိတဲ့ Coil များကိုတောင်းဆိုထားတယ်လို့ ယူဆထားသော်ကြောင့်ဖြစ်ပါတယ်။

Modbus Function Code 02 - Read Contact
==================================
    ဒီ Modbus Function ဟာ Slave Device နဲ့အတူ သူရဲ့ Discrete Inputs ("Contacts") ကိုဖတ်ပြီးတော့ အဲ့ဒီ Status တွေကို Data နဲ့ ပြန်ပေးပါတယ်။

    ဒီ Function အတွက်သတ်မှတ်ထားတဲ့ Modbus Address ရဲ့ Range ကတော့ 10001 ကနေ 19999 (Decimal) အထိဖြစ်ပါတယ်။ သို့သော် Starting Address ကတော့ Hexadecimal နဲ့ဖော်ပြတာဖြစ်ပြီး Range ရဲ့အစကနေ (n-1)^ th Register နဲ့ဖော်ပြပါတယ်။ 

    ဥပမာနဲ့ပြောပြရရင် ပကတိ Decimal Address "10256" ကို Hexadecimal "0x00FF" နဲ့သတ်မှတ်ထားပါတယ်။ High-Order Byte ကို "00" နဲ့ Low-Order Byte ကို "FF" နဲ့ သတ်မှတ်ထားပါတယ်။

Modbus Function Code 03 - Read Holding Register
======================================
    ဒီ Function ကတော့ Slave Device နဲ့အတူ သူ့ရဲ့ "Holding" Register ရဲ့ Status ကို ယူဖတ်ပါတယ်။ ဒီနေရာမှာ Register တစ်ခုချင်းရဲ့ Size ဟာ Two Bytes (16 Bits) ရှိတယ်လို့ ယူဆနိုင်ပါတယ်။

    ဒီ Function အတွက်သတ်မှတ်ထားတဲ့ Modbus Address ရဲ့ Range ကတော့ 40001 ကနေ 49999 (Decimal) အထိဖြစ်ပါတယ်။ အလားတူပဲ Starting Address ကတော့ Hexadecimal နဲ့ဖော်ပြတာဖြစ်ပြီး Range ရဲ့ အစကနေ (n-1)^ th Register နဲ့ဖော်ပြပါတယ်။ 

    ဥပမာနဲ့ပြောရရင် ပကတိ Decimal Address "40980" ကို Hexadecimal "0x03D3" နဲ့သတ်မှတ်ထားပါတယ်။ High-Order Byte ကို "03" နဲ့ Low-Order Byte ကို "D3" နဲ့သတ်မှတ်ထားပါတယ်။

    ဒီနေရာမှာ မှတ်ထားရမှာကတော့ Query Message တွေဟာ Register တွေရဲ့ နံပါတ်ကို သတ်မှတ်ထားတာကြောင့် Response Message တွေဟာလည်း Byte တွေရဲ့Number နဲ့ပဲ Reply လုပ်ပါတယ်။ Response Message ရဲ့ Number of Bytes Field ဟာ Query Message ရဲ့ Number of Registers Field ရဲ့တန်ဖိုး နှစ်ဆလောက်ရှိပါတယ်။ 

    "Hi" နဲ့ "Lo" Byte တန်ဖိုးများဖြင့် Query Message (65536) တွင်တောင်းဆိုနိုင်တဲ့အများဆုံးအရေအတွက်ဟာ Response Message မှာရှိတဲ့ Single Byte တန်ဖိုး (255 Byte) ဖြင့်လည်း Report လုပ်နိုင်တာကိုလည်းမှတ်ထားရမှာဖြစ်ပါတယ်။

Reference: Instrumentationtools 

Comments

Popular posts from this blog

Temperature Range

Article တစ်ခုဝင်ဖတ်မိတာနဲ့ပြောရမယ့်ကိစ္စတစ်ခုဖြစ်နေလို့ရေးပေးလိုက်ပါတယ်။ Article အောက်မှာလည်းနည်းနည်းလေး Complain တတ်တာလေးတွေ့လိုက်ရတယ်။ ပြသာနာကဘာလဲဆိုတော့ Temperature Range ကိစ္စပါ။      အခုသူရေးထားတဲ့ဟာက Industrial လို့ထည့်ပြီးရေးထားတာတွေ့ရပါတယ်။ Data တွေတင်ထားတာကြည့်လိုက်တော့ Operation Temperature Range က 0 to +60°C အထိပဲရှိတာတွေ့ရတယ်။ ဒါကထုတ်လုပ်တဲ့ ကုမ္ပဏီကသတ်မှတ်ထားတဲ့ Standard တွေလိုအပ်နေတာလားဆိုတာကတော့စဉ်းစားစရာပါပဲ။ တကယ်ဆို ဒီ Level ဟာ Commercial အဆင့်သက်သက်သာပဲရှိတာပါ။ Company တွေမှာ သတ်မှတ်ထားတဲ့ Temperature Range ဟာတစ်ခုနဲ့တစ်ခုမတူဘူးဆိုတာလက်ခံပေမယ့် အခုလိုလုပ်တာက ထင်ထားတာထက်အတော်ကွာဟနေပြီး နှစ်သီးစားလုပ်မယ့်ပုံစံမျိုးပေါက်နေပါတယ်  အောက်မှာယေဘုယျအားဖြင့် Semiconductor Device တွေမှာရှိသင့်တဲ့ Temp Range ကိုရေးပေးထားပါတယ်။ Commercial   (0 to  +70°C) Industrial  (-40 to +85°C) Military  (-55 to +125°C)

Description of RS-485

    RS-485 ဟာ Industrial တွေမှာအသုံးများတဲ့ Communication တစ်ခုဖြစ်ပါတယ်။ RS-485 ကိုနောက်တစ်နည်း EIA/TIA-485 လို့လည်းခေါ်ဝေါ်သေးပါတယ်။ USB နဲ့ Ethernet တို့ထက်စာရင် RS-485 ဟာ Industrial တွေ‌မှာအသုံးများပါတယ်။ အကြောင်းမှာတော့ RS-485 ဟာ သိပ် Complex မဖြစ်သလိုဈေးလဲသိပ်မကြီးတဲ့အတွက်ကြောင့်ပါ။ သို့သော်လည်း Low Speed Data Communication လုပ်ငန်းစဉ်တွေမှာပဲသုံးလို့အဆင်ပြေမှာပါ။     RS-485 Connection ကို အများအားဖြင့် Two Wires သို့မဟုတ် Three Wires နဲ့လည်းသုံးကြ‌ပါသေးတယ်။ RS-485 မှာ Contact သုံးခုရှိပါတယ်။ အဲ့တာကတော့ Data A , Data B နဲ့ GND လို့ခေါ်ပြီး နောက်တစ်နည်းအခေါ်အဝေါ်ကတော့ Data Wire, Inverted Data Wire နဲ့ Zero Wire သို့မဟုတ် Ground ဆိုပြီးတော့လည်းခေါ်ကြပါသေးတယ်။     သူရဲ့အဓိက Design ကတော့ ရိုးရှင်းပါတယ်။ Data Signal တွေကို Wire ကြိုးနှစ်ခုကနေ ဖြတ်သန်းစေပြီးတော့ Signal တွေကို အပြန်အလှန်ပို့ဆောင်ပေးပါတယ်။ RS-485 သည် Data ပို့တဲ့အခါ Data တွေကိုအချင်းချင်း Collided ဖြစ်မိတာမျိုးကိုရှောင်ရှားပေးနိုင်ပါတယ်။ဥပမာ ကြိုးတစ်ကြိုးထဲကနေ Signal ကိုအပြန်အလှန်ပို့နေရင် Device