ዝርዝር ሁኔታ:

ESP32 Modbus Master TCP: 7 ደረጃዎች
ESP32 Modbus Master TCP: 7 ደረጃዎች

ቪዲዮ: ESP32 Modbus Master TCP: 7 ደረጃዎች

ቪዲዮ: ESP32 Modbus Master TCP: 7 ደረጃዎች
ቪዲዮ: Работа с Modbus RTU/TCP. Примеры проектов. 2024, ህዳር
Anonim
ESP32 Modbus Master TCP
ESP32 Modbus Master TCP

በዚህ ክፍል ውስጥ የ ESP32 አንጎለ ኮምፒውተር ሞድቡስ TCP ማስተር እንዲሆን ፕሮግራም ያወጣሉ።

ይህንን አንጎለ ኮምፒውተር የያዙ ሁለት መሣሪያዎችን እንጠቀማለን- Moduino ESP32 እና Pycom። ሁለቱም መሣሪያዎች በማይክሮ ፓይቶን አካባቢ ውስጥ እየሠሩ ናቸው። የእኛ የሞድቡስ ባሪያ በእሱ ላይ ከሚሠራው የ Modbus አስመሳይ ሶፍትዌር ጋር ፒሲ ኮምፒተር ይሆናል።

ያስፈልግዎታል:

  • Moduino ESP32 ወይም Moduino Pycom መሣሪያ (ስለ Moduino ESP32 መሣሪያ የበለጠ ለማወቅ ይህንን ድር ጣቢያ ይመልከቱ እና ይህ የፒኮም መሣሪያን ለመፈተሽ)
  • ፒሲ ከሊኑክስ ስርዓተ ክወና ጋር
  • RS-232/RS-485 ወደብ በኮምፒተርዎ ወይም በዩኤስቢ ወደ RS-232/RS-485 መቀየሪያ

ደረጃ 1: ሞድቡስ TCP ባሪያ አስመሳይን ያውርዱ እና ያስጀምሩ

Modbus TCP Slave Simulator ን ያውርዱ እና ያስጀምሩ
Modbus TCP Slave Simulator ን ያውርዱ እና ያስጀምሩ

Modbus Slave simulator ን ከ https://www.modbusdriver.com/diagslave.html ያውርዱ። ከዚያ የወረደውን ማህደር ይክፈቱ እና ለሊኑክስ ኦፐሬቲንግ ሲስተም ስሪት ያውጡ።

በ -p ክርክር ፕሮግራሙን ከኮንሶል ያሂዱ

./diagslave -p

የ Modbus Slave አገልጋይ የሚሠራበት ወደብ ነው። ለ Modbus ፕሮቶኮል በነባሪ 502 ነው ፣ ግን ሌላ መጠቀም ይችላሉ።

ከ 1024 በታች ባለው የሊኑክስ ወደቦች ውስጥ ከመደበኛ ተጠቃሚ በሚሠሩ ፕሮግራሞች (የስር መብቶች ሳይሆን) ሊጠቀሙባቸው አይችሉም።

የሚጠቀሙበትን ወደብ ያስታውሱ። ይህ ዋጋ በኋላ አስፈላጊ ይሆናል።

ደረጃ 2 - ከመሣሪያው ጋር ለመገናኘት ኮምፒተርዎን ያዘጋጁ

ከመሣሪያው ጋር ለመገናኘት ኮምፒተርዎን ያዘጋጁ
ከመሣሪያው ጋር ለመገናኘት ኮምፒተርዎን ያዘጋጁ

ከመሣሪያው ጋር ግንኙነት ለመፍጠር እና ፋይሎችን ወደ እሱ ለመላክ አንዳንድ ፕሮግራሞች ያስፈልግዎታል።

የፓይዘን አከባቢን እና ቧንቧውን (ከሌለዎት) ይጫኑ

apt-get install python3

apt-get install python3-dev curl "https://bootstrap.pypa.io/get-pip.py" -o "get-pip.py" python3 get-pip.py

ፒኮኮምን ይጫኑ;

apt-get install picocom

ከመሣሪያው ጋር ለመገናኘት እና በእሱ ላይ ትዕዛዞችን ለማስፈጸም ይህ ፕሮግራም ያስፈልጋል። mpfshell ን ይጫኑ

pip install mpfshell

ይህ ፕሮግራም ፋይሎችን ወደ መሳሪያው እንዲልኩ ያስችልዎታል።

እንዲሁም እሱን የመጫኛ ምንጮችን መጫን ይችላሉ። ይህንን ገጽ ይመልከቱ:

ደረጃ 3 መሣሪያን ያዘጋጁ እና ከእሱ ጋር ይገናኙ

መሣሪያን ያዘጋጁ እና ከእሱ ጋር ይገናኙ
መሣሪያን ያዘጋጁ እና ከእሱ ጋር ይገናኙ
መሣሪያን ያዘጋጁ እና ከእሱ ጋር ይገናኙ
መሣሪያን ያዘጋጁ እና ከእሱ ጋር ይገናኙ
መሣሪያን ያዘጋጁ እና ከእሱ ጋር ይገናኙ
መሣሪያን ያዘጋጁ እና ከእሱ ጋር ይገናኙ

Moduino ወይም Pycom መሣሪያን ከፒሲ ጋር ለማገናኘት RS-232/RS-485 ወደብ ወይም መቀየሪያ ያስፈልግዎታል። የመሣሪያዎን ስሪት (የትኛውን የወደብ ዓይነት እንደሚጠቀም) ይፈትሹ እና ተገቢውን ወደብ ወይም መለወጫ ያግኙ።

  1. መሣሪያውን ከፒሲ ጋር ያገናኙ
  2. ከዚያ የኃይል አቅርቦቱን ከእሱ ጋር ያገናኙ

መሣሪያውን ከፒሲ ጋር ያገናኙ እና ከዚያ የኃይል አቅርቦቱን ያገናኙት። እንዲሁም የኤተርኔት ገመድ ከ Moduino ESP32 (ያ ወደብ ካለው) ማገናኘት ይችላሉ።

ግንኙነቱ ከላይ ባሉት ፎቶዎች ውስጥ መሆን አለበት።

ለመሣሪያ ግንኙነት የሚያገለግል የወደብ ዱካ ይፈልጉ። ለምሳሌ /dev /ttyS1 ፣ /dev /ttyUSB0 ሊሆን ይችላል።

ለዩኤስቢ መቀየሪያዎች ፣ ዱካው የዩኤስቢ ቃልን ይይዛል።

በፒኮኮም ፕሮግራም ከመሣሪያ ጋር መገናኘት ይችላሉ-

picocom /dev /ttyUSB0 -b 115200

የመሣሪያው የትዕዛዝ ጥያቄ ከዚህ በታች ካሉት ከእነዚህ ምስሎች በአንዱ ይመስላል።

Moduino ESP32: እዚህ ይመልከቱ

Moduino Pycom: እዚህ ይመልከቱ

ደረጃ 4 ሞዱቡስ ማስተር ቤተ -መጽሐፍትን ይስቀሉ

Modbus Master Library ን ይስቀሉ
Modbus Master Library ን ይስቀሉ

github.com/pycom/pycom-modbus/ ከ Modbus Slave ጋር ለመገናኘት ተገቢ ቤተ-መጽሐፍት ያስፈልግዎታል። የፒኮም ቤተ -መጽሐፍት ከ Moduino ጋር ተኳሃኝ አይደሉም። ከእርስዎ መሣሪያ ጋር የሚጣጣሙ መመሪያዎችን ይፈትሹ።

ፋይሎችን ከመላክዎ በፊት ፒኮኮምን ይዝጉ Ctrl+A ን ይጫኑ እና ከዚያ Ctrl+X ቁልፎችን ይጫኑ።

uModBus ቤተ-መጽሐፍት ለ Moduino ESP32 መሠረቶች ለ Moduino Pycom በ pycom-modbus ቤተ-መጽሐፍት ላይ። በመደበኛ የ ESP32 መሣሪያ ላይ ለመስራት ተስተካክሏል። እንዲሁም ለአገናኝ ክፍሎች ተጨማሪ ቅርብ () ዘዴዎች አሉት።

1) Moduino ESP32

ቤተ-መጽሐፍትን ከ https://github.com/techbase123/micropython-modbus ያውርዱ። ማህደሩን ያውጡ እና ሁሉንም 4 ፋይሎች ወደ ሞዱኖ መሣሪያ ይላኩ።

እነሱን ለመስቀል mpfshell ን ይጠቀሙ። በዚያ ፋይሎች ይህንን ፕሮግራም በማውጫ ውስጥ ያሂዱ።

በማስፈጸም ከመሣሪያ ጋር ይገናኙ - ይሄ

ttyUSB0 መሣሪያው የተገናኘበት ተከታታይ ወደብ ስም ነው።

በትእዛዝ ማውጫ ወደ /ብልጭታ /ሊብ ይለውጡ

ሲዲ /ብልጭታ /ሊብ

ሁሉንም ፋይሎች በትእዛዝ ያስቀምጡ:

uModBusConst.py ን ያስቀምጡ

uModBusFunctions.py ያስቀምጡ uModBusTCP.py uModBusSerial.py ን ያስቀምጡ

ለምሳሌ

ከዚያ ከመውጫ ትእዛዝ ጋር ኮንሶሉን ይውጡ እና መሣሪያውን በዳግም አስጀምር ቁልፍ እንደገና ያስጀምሩ።

2) Moduino Pycom

ቤተ-መጽሐፍትን ከ https://github.com/pycom/pycom-modbus/ ያውርዱ። ማህደሩን አውልቀው የ uModbus ማውጫ ይዘትን ወደ መሣሪያው ይላኩ። እነሱን ለመስቀል mpfshell ን ይጠቀሙ። በዚያ ፋይሎች ይህንን ፕሮግራም በማውጫ ውስጥ ያሂዱ።

በማስፈጸም ከመሣሪያ ጋር ይገናኙ ፦

ttyUSB0 ን ይክፈቱ

ttyUSB0 መሣሪያው የተገናኘበት ተከታታይ ወደብ ስም ነው።

ማውጫውን ወደ /ብልጭታ /ሊብ ይለውጡ ፣ uModbus ማውጫ ይፍጠሩ እና በትእዛዞች ያስገቡት-

ሲዲ /ብልጭታ /libmd uModbus cd uModbus

ሁሉንም ፋይሎች በትእዛዝ ያስቀምጡ:

const.py አስቀምጥ

function.py አስቀምጥ tcp.py አስቀምጥ serial.py

ከዚያ ከመውጫ ትእዛዝ ጋር ኮንሶሉን ይውጡ እና መሣሪያውን በዳግም አስጀምር ቁልፍ እንደገና ያስጀምሩ።

ለምሳሌ

ደረጃ 5 ከአውታረ መረቡ ጋር ይገናኙ

ከአውታረ መረቡ ጋር ይገናኙ
ከአውታረ መረቡ ጋር ይገናኙ

ግንኙነትን ለመመስረት ትዕዛዞች በሞዱኖ እና በፒኮም መካከል ይለያያሉ።

ተገቢ ትዕዛዞችን ለማስፈጸም ከፒኮኮም ጋር ከመሣሪያ ጋር ይገናኙ። የሞዱኖ መሣሪያን ከአውታረ መረብ በሽቦ ወይም በገመድ አልባ ማገናኘት ይችላሉ። የሚከተሉት ምሳሌዎች የእርስዎ አውታረ መረብ የሚሰራ የ DHCP አገልጋይ አለው ብለው ያስባሉ።

በሌላ ሁኔታ ፣ መሣሪያ የአይፒ አድራሻ አያገኝም። የ Wi -Fi ድጋፍ በእያንዳንዱ ሞዱኖ ውስጥ ይገኛል። የኤተርኔት ወደብ አማራጭ ነው እና ሁሉም መሣሪያዎች የሉትም።

1) Moduino ESP32

ከ WiFi ጋር በመገናኘት ላይ

በመሣሪያው ላይ የሚከተሉትን ትዕዛዞች ያስፈጽሙ

ከ netWiFi ማስመጣት netWiFiwifi = netWiFi (netWiFi. WIFI_STA ፣ 'ESSID' ፣ 'PASS') wifi.start ()

ESSID ን በ WiFi አውታረ መረብዎ ስም ይተኩ ፣ እና በእሱ ይለፍ ቃል ይለፍፉ።

ጅምር () ን ከፈጸሙ በኋላ ከተወሰነ ጊዜ በኋላ ለመሣሪያዎ የተመደበውን የአይፒ አድራሻ ማግኘት አለብዎት።

ከኤተርኔት አውታረ መረብ ጋር በመገናኘት ላይ

በኤተርኔት ገመድ አማካኝነት መሣሪያውን ከባለገመድ አውታረ መረብ ጋር ያገናኙ።

ከዚያ የሚከተሉትን ትዕዛዞች ያስፈጽሙ-

ከ netETH ማስመጣት netETHeth = netETH () eth.start ()

ጅምር () ን ከፈጸሙ በኋላ ከተወሰነ ጊዜ በኋላ በመሣሪያዎ ላይ የተመደበውን የአይፒ አድራሻ ማግኘት አለብዎት።

2) Moduino Pycom

ከ WiFi ጋር ይገናኙ

በመሣሪያው ላይ የሚከተሉትን ትዕዛዞች ያስፈጽሙ

ከአውታረ መረብ ማስመጣት WLANwlan = WLAN (mode = WLAN. STA) መረቦች = wlan.scan () ለኔት ውስጥ መረብ: net.ssid == 'ESSID': ህትመት ('አውታረ መረብ ተገኝቷል!') wlan.connect (net.ssid), auth = (net.sec ፣ 'PASS') ፣ የጊዜ ማብቂያ = 5000) wlan.isconnected (): machine.idle () ህትመት ('WLAN ግንኙነት ተሳክቷል!')

ESSID ን በ WiFi አውታረ መረብዎ ስም ይተኩ ፣ እና በእሱ ይለፍ ቃል ይለፍፉ።

ደረጃ 6 ከሞድቡስ ባሪያ ጋር ግንኙነትን ያስጀምሩ

ከ Modbus Slave ጋር ግንኙነትን ያስጀምሩ
ከ Modbus Slave ጋር ግንኙነትን ያስጀምሩ

የ Modbus ማስተር ቤተ -ፍርግሞች ለሁለቱም መሣሪያዎች ተመሳሳይ ናቸው

በመነሻነት ይለያያሉ።

1) Moduino ESP32 ላይ uModBus ን ያስጀምሩ

ያስፈጽሙ

ከ uModBusTCP uModBusTCP ን እንደ TCP ያስመጡ

2) uModBus ን በ Pycom ላይ ያስጀምሩ

ያስፈጽሙ

ከ uModbus.tcp TCP ማስመጣት

ክፍት ግንኙነት

ከዚያ ግንኙነቱን ይክፈቱ ከ ፦

modbus = TCP ('IP' ፣ PORT ፣ 60)

የት:

  • አይፒ - የፒሲዎ አድራሻ ከ Modbus Slave simulator ጋር
  • ወደብ - የሞድቡስ ባሪያ ወደብ
  • 60 የእረፍት ጊዜ ነው

የንባብ/የጽሑፍ ትዕዛዞችን በሚፈጽሙበት ጊዜ የሚከተለው ስህተት ከተከሰተ - ምሳሌ

ማስፈጸም

ለ Moduino ESP32:

modbus.close ()

ለ Moduino Pycom:

modbus._sock.close ()

እና ከዚያ ግንኙነቱን እንደገና ይፍጠሩ

modbus = TCP ('IP' ፣ PORT ፣ 60)

ግንኙነቱን እንደገና ከመፍጠርዎ በፊት ይህ ሶኬት መዝጋት አስፈላጊ ነው።

ደረጃ 7 - መዝገቦችን ያንብቡ እና ይፃፉ

መዝገቦችን ያንብቡ እና ይፃፉ
መዝገቦችን ያንብቡ እና ይፃፉ

ሞድቡስ መዝገቦችን ለማንበብ እና ለመፃፍ በርካታ ተግባሮችን ይደግፋል።

uModBus ቤተ -መጽሐፍት ለእያንዳንዱ ተግባር ዘዴ አለው-

  1. የንባብ_ካሎች
  2. ግብዓቶችን_አንብብ
  3. የንባብ_መዝገብ_መዝገቡን
  4. የግቤት_መዝገቡን ያንብቡ
  5. ነጠላ_ኮይል ይፃፉ
  6. ነጠላ_መዝገቡን ይፃፉ

በመጀመሪያ ፣ አንዳንድ እሴቶችን እንጽፍ።

1) ጥቅልሎችን ይፃፉ (Func: 5)

ከባሪያ 1 ለመመዝገብ 1 እሴት ወደ 200 ይመዝገቡ

modbus.write_single_coil (1 ፣ 200 ፣ 0xFF00)

የመጀመሪያው ክርክር ለባሪያ መታወቂያ ነው ፣ በእኛ ሁኔታ 1.

ሁለተኛው የመመዝገቢያ ቁጥር እና ጥማቶች እሴት ናቸው። ለ 1 እዚህ 0xFF00 ን ማስቀመጥ አለብዎት። ከባሪያ 1 ይመዝገቡ ከ 0 እስከ 201 ይመዝገቡ -

modbus.write_single_coil (1, 201, 0)

ይህ ዘዴ የቡሊያን እሴቶችን ብቻ ለመፃፍ ይፈቅዳል - 0 ወይም 1።

2) መዝገቦችን ይፃፉ (Func: 6)

አሁን ለተወሰኑ መመዝገቢያዎች አንዳንድ ኢንቲጀር እሴቶችን ይፃፉ።

100 ከባሪያ 1 ለመመዝገብ የተፈረመውን 111 እሴት ይፃፉ -

modbus.writing_single_register (1 ፣ 100 ፣ 111 ፣ እውነት)

የመጀመሪያው ክርክር የባሪያ መታወቂያ ነው ፣ ሁለተኛው የመመዝገቢያ ቁጥር እና ሦስተኛው አዲስ እሴት ነው። የመጨረሻው ክርክር እሴቱ እንደ ተፈረመ ቁጥር መቀመጥ እንዳለበት ይገልጻል። ለእሱ ነባሪ እሴት እውነት ነው። እሱን ማዘጋጀት አያስፈልግዎትም።

ከባሪያ 1 ለመመዝገብ የተፈረመውን -457 እሴት ወደ 101 ይፃፉ -

modbus.write_single_register (1 ፣ 101 ፣ -457)

ከባሪያ 3 ለ 50 ይመዝገቡ አልፈረሙም 50 እሴት

modbus.write_single_register (3 ፣ 100 ፣ 50 ፣ ሐሰት)

ይህ ዘዴ የኢንቲጀር እሴቶችን በአንድ ጊዜ እንዲመዘገብ ያስችለዋል።

ነጠላ መዝገብ 16 ቢት እሴቶችን ሊይዝ ይችላል።

ዘዴ ይመለሳል እውነት የግብዓት ዋጋ ልክ ነው እና ካልሆነ ሐሰት ነው። እሴቱ ልክ ያልሆነ ቢሆንም እንኳ ይፃፋል (ለመመዝገብ በጣም ትልቅ)

3) ጥቅሎችን/ልዩ ግብዓቶችን ያንብቡ

አሁን የጽሑፍ ቡሊያን እሴቶችን እናንብብ። በተግባራዊ 1 መመዝገቢያ ለማንበብ ፣ ለማንበብ የሚከተሉትን ያድርጉ

modbus.read_coils (slaveId ፣ መመዝገብ ፣ መቁጠር) [0: count]

በተግባሩ 2 መዝገቡን ለማንበብ የተለየ ግብዓት ያንብቡ ፣ ያከናውኑ

modbus.read_discrete_inputs (slaveId ፣ መመዝገብ ፣ መቁጠር) [0: count]

የት:

  • ባሪያ -መታወቂያ - ምናባዊ ባሪያ መታወቂያ (የባሪያ አስመሳይ ሁሉንም ትክክለኛ መታወቂያዎች ይቀበላል)
  • መመዝገብ - ለማንበብ ቁጥር ይመዝገቡ
  • መቁጠር - የሚነበበው የመመዝገቢያ መጠን (የሚፈለገውን መጠን በሁለቱም ቦታዎች ላይ ያስቀምጡ)

እነዚህ ዘዴዎች ድርድርን ከቦሊያን እሴቶች ጋር ይመልሳሉ። እያንዳንዱ እሴት ከእያንዳንዱ መዝገብ ጋር ይዛመዳል።

ቁርጥራጭ: [0: ቆጠራ] ያስፈልጋል ፣ ምክንያቱም ይህ ዘዴ ከመቁጠር ይልቅ ብዙ እሴቶችን ይመልሳል። እሱ ሁልጊዜ የሚከፋፈለውን የእሴቶችን መጠን ይመልሳል። 8 ተጨማሪ እሴቶች ሐሰት ናቸው እና ከማንኛውም መዝገብ ጋር አይዛመዱም።

በሁለቱም ዘዴዎች የእኛን ቡሊያን እሴቶች ያንብቡ-

modbus.read_coils (1, 200, 2) [0: 2] modbus.read_discrete_inputs (1, 200, 2) [0: 2]

ውጤቱ እንደዚህ ይሆናል - ምሳሌ

እውነት 1 ዋጋን ፣ ውሸትን ወደ 0 ያመለክታል።

4) መዝገቦችን ያንብቡ

አሁን በ 6 ተግባር ከተፃፉ መዝገቦች እሴቶችን ያንብቡ።

በተግባራዊ 3 መዝገቦችን ለማንበብ የመያዣ መመዝገቢያዎችን ለማንበብ ፣ ያከናውኑ

modbus.read_holding_registers (slaveId ፣ መመዝገብ ፣ መቁጠር ፣ መፈረም = እውነት)

በተግባራዊ 4 መዝገቦችን ለማንበብ የግብዓት መዝገቦችን ያንብቡ ፣ ያከናውኑ

modbus.read_input_registers (ባሪያ ኢድ ፣ መመዝገብ ፣ መቁጠር ፣ መፈረም = እውነት)

የት:

  • ባሪያ -መታወቂያ - ምናባዊ ባሪያ መታወቂያ
  • መመዝገብ - ለማንበብ ቁጥር ይመዝገቡ
  • ቆጠራ - የሚነበበው የመመዝገቢያ መጠን
  • ተፈርሟል - የተነበቡ እሴቶች እንደ የተፈረሙ ቁጥሮች መታከም አለባቸው ወይም አለመሆኑን ያመለክታል። ነባሪ ሁኔታ - እውነት

የመመለሻ እሴት ከሚፈለገው የመመዝገቢያ ብዛት ጋር አንድ ቱፕ ነው።

በቀደመው ነጥብ የተቀመጡ የንባብ መዝገቦች

modbus.read_holding_registers (1 ፣ 100 ፣ 2 ፣ True) modbus.read_input_registers (1 ፣ 100 ፣ 2 ፣ True)

ውጤቶች በዚህ ቅጽበታዊ ገጽ እይታ ውስጥ መምሰል አለባቸው - ምሳሌ

በሚቀጥለው ትምህርት በ ESP32 የነቃ መሣሪያ ላይ Modbus RTU Master ን እንዴት መፍጠር እንደሚችሉ ይማራሉ።

የሚመከር: