فهرست مطالب:

ESP32 Modbus Master TCP: 7 مرحله
ESP32 Modbus Master TCP: 7 مرحله

تصویری: ESP32 Modbus Master TCP: 7 مرحله

تصویری: ESP32 Modbus Master TCP: 7 مرحله
تصویری: Modbus Master Slave Communication Using Modbus Poll 2024, ژوئن
Anonim
ESP32 Modbus Master TCP
ESP32 Modbus Master TCP

در این کلاس ، شما پردازنده ESP32 را به عنوان Modbus TCP Master برنامه ریزی خواهید کرد.

ما از دو دستگاه که حاوی این پردازنده هستند استفاده خواهیم کرد: Moduino ESP32 و Pycom. هر دو دستگاه در محیط MicroPytthon کار می کنند. Modbus Slave ما یک کامپیوتر PC خواهد بود که نرم افزار شبیه ساز Modbus روی آن کار می کند.

شما نیاز خواهید داشت:

  • Moduino ESP32 یا دستگاه Moduino Pycom (برای کسب اطلاعات بیشتر در مورد دستگاه Moduino ESP32 و این مورد برای بررسی دستگاه Pycom ، این وب سایت را بررسی کنید)
  • کامپیوتر با سیستم عامل لینوکس
  • پورت RS-232/RS-485 در رایانه یا مبدل USB به RS-232/RS-485

مرحله 1: Modbus TCP Slave Simulator را بارگیری و راه اندازی کنید

Modbus TCP Slave Simulator را بارگیری و راه اندازی کنید
Modbus TCP Slave Simulator را بارگیری و راه اندازی کنید

شبیه ساز Modbus Slave را از https://www.modbusdriver.com/diagslave.html بارگیری کنید. سپس بایگانی بارگیری شده را بارگیری کرده و نسخه سیستم عامل لینوکس را باز کنید.

برنامه را از طریق کنسول با آرگومان -p اجرا کنید:

./diagslave -p

پورتی است که سرور Modbus Slave در آن کار می کند. برای پروتکل Modbus به طور پیش فرض 502 است ، اما می توانید از پروتکل دیگری استفاده کنید.

در پورت های لینوکس زیر 1024 نمی توان از برنامه هایی استفاده کرد که از کاربران معمولی استفاده می کنند (نه امتیازات root).

به یاد داشته باشید که از چه پورتی استفاده می کنید. این مقدار بعداً ضروری خواهد بود.

مرحله 2: کامپیوتر خود را برای اتصال به دستگاه آماده کنید

رایانه خود را برای اتصال به دستگاه آماده کنید
رایانه خود را برای اتصال به دستگاه آماده کنید

برای برقراری ارتباط با دستگاه و ارسال فایل ها به آن ، به برخی برنامه ها نیاز خواهید داشت.

محیط Python و pip را نصب کنید (اگر ندارید):

apt-get python3 را نصب کنید

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

نصب picocom:

apt-get picocom را نصب کنید

این برنامه برای اتصال به دستگاه و اجرای دستورات روی آن مورد نیاز است. mpfshell را نصب کنید:

پیپ mpfshell را نصب کنید

این برنامه به شما امکان می دهد فایل ها را به دستگاه ارسال کنید.

همچنین می توانید از منابع آن را نصب کنید. به این صفحه مراجعه کنید:

مرحله 3: دستگاه را آماده کرده و به آن متصل شوید

دستگاه را آماده کرده و به آن متصل شوید
دستگاه را آماده کرده و به آن متصل شوید
دستگاه را آماده کرده و به آن متصل شوید
دستگاه را آماده کرده و به آن متصل شوید
دستگاه را آماده کرده و به آن متصل شوید
دستگاه را آماده کرده و به آن متصل شوید

برای اتصال دستگاه Moduino یا Pycom به رایانه ، به پورت یا مبدل RS-232/RS-485 نیاز دارید. نسخه دستگاه خود را بررسی کنید (از کدام نوع پورت استفاده می کند) و پورت یا مبدل مناسب را پیدا کنید.

  1. دستگاه را به رایانه وصل کنید
  2. سپس منبع تغذیه را به آن وصل کنید

دستگاه را به رایانه وصل کرده و سپس منبع تغذیه را به آن وصل کنید. همچنین می توانید کابل اترنت را به Moduino ESP32 وصل کنید (اگر دارای این پورت است).

اتصال باید مانند عکسهای بالا باشد

مسیر را برای پورت که برای اتصال دستگاه استفاده می شود پیدا کنید. این می تواند به عنوان مثال: /dev /ttyS1 ، /dev /ttyUSB0 باشد.

برای مبدل های usb ، مسیر حاوی کلمه USB است.

با برنامه picocom می توانید به دستگاه متصل شوید:

picocom /dev /ttyUSB0 -b 115200

خط فرمان دستگاه شبیه به یکی از این تصاویر زیر است.

Moduino ESP32: اینجا را ببینید

Moduino Pycom: اینجا را ببینید

مرحله 4: بارگذاری کتابخانه اصلی Modbus

بارگذاری کتابخانه اصلی Modbus
بارگذاری کتابخانه اصلی Modbus

github.com/pycom/pycom-modbus/ برای ارتباط با Modbus Slave به کتابخانه مناسب نیاز دارید. کتابخانه های Pycom با Moduino سازگار نیستند. دستورالعمل های سازگار با دستگاه شما را بررسی کنید.

قبل از ارسال فایل ها ، picocom را ببندید: کلیدهای Ctrl+A و سپس Ctrl+X را فشار دهید.

کتابخانه uModBus برای Moduino ESP32 بر اساس کتابخانه pycom-modbus برای Moduino Pycom. برای کار بر روی دستگاه معمولی ESP32 اصلاح شده است. همچنین دارای متدهای بسته () اضافی برای کلاسهای اتصال است.

1) Moduino ESP32

کتابخانه را از https://github.com/techbase123/micropython-modbus بارگیری کنید. بایگانی را باز کرده و هر 4 فایل را به دستگاه Moduino ارسال کنید.

برای بارگذاری آنها از mpfshell استفاده کنید. این برنامه را در پوشه ای با آن فایل ها اجرا کنید.

با اجرای: THIS به دستگاه متصل شوید

ttyUSB0 نام پورت سریال است که دستگاه در آن متصل است.

تغییر دایرکتوری به /flash /lib با دستور:

cd /flash /lib

همه فایلها را با دستورات قرار دهید:

uModBusConst.py را قرار دهید

قرار دادن uModBusFunctions.py قرار دادن uModBusTCP.py قرار دادن uModBusSerial.py

مثال

سپس با فرمان exit از کنسول خارج شده و دستگاه را با دکمه Reset راه اندازی مجدد کنید.

2) Moduino Pycom

کتابخانه را از https://github.com/pycom/pycom-modbus/ بارگیری کنید. بایگانی را باز کرده و محتوای فهرست uModbus را به دستگاه ارسال کنید. برای بارگذاری آنها از mpfshell استفاده کنید. این برنامه را در پوشه ای با آن فایل ها اجرا کنید.

با اجرای دستگاه به دستگاه متصل شوید:

ttyUSB0 را باز کنید

ttyUSB0 نام پورت سریال است که دستگاه در آن متصل است.

دایرکتوری را به /flash /lib تغییر دهید ، فهرست uModbus را ایجاد کرده و آن را با دستورات وارد کنید:

cd /flash /libmd uModbus cd uModbus

همه فایلها را با دستورات قرار دهید:

const.py را قرار دهید

قرار دادن functions.py قرار دادن tcp.py قرار دادن serial.py

سپس با فرمان exit از کنسول خارج شده و دستگاه را با دکمه Reset راه اندازی مجدد کنید.

مثال

مرحله 5: به شبکه وصل شوید

به شبکه متصل شوید
به شبکه متصل شوید

دستورات ایجاد ارتباط بین Moduino و Pycom متفاوت است.

برای اجرای دستورات مناسب با دستگاه picocom به دستگاه متصل شوید. می توانید دستگاه Moduino را به صورت سیم یا بی سیم به شبکه متصل کنید. مثالهای زیر فرض می کند که شبکه شما دارای سرور DHCP فعال است.

در موارد دیگر ، دستگاه آدرس IP دریافت نمی کند. پشتیبانی Wi -Fi در هر Moduino موجود است. پورت اترنت یک گزینه است و همه دستگاه ها آن را ندارند.

1) Moduino ESP32

اتصال به WiFi

دستورات زیر را روی دستگاه اجرا کنید:

از وارد کردن netWiFi netWiFiwifi = netWiFi (netWiFi. WIFI_STA ، 'ESSID' ، 'PASS') wifi.start ()

ESSID را با نام شبکه WiFi خود و PASS را با رمز عبور آن جایگزین کنید.

پس از مدتی پس از اجرای start () ، باید یک آدرس IP دریافت کنید که به دستگاه شما اختصاص داده شده است.

اتصال به شبکه اترنت

دستگاه را با کابل اترنت به شبکه سیمی متصل کنید.

سپس دستورات زیر را اجرا کنید:

از netETH واردات netETHeth = netETH () eth.start ()

پس از مدتی پس از اجرای start () باید آدرس IP را که به دستگاه شما اختصاص داده شده دریافت کنید.

2) Moduino Pycom

به وای فای وصل شوید

دستورات زیر را روی دستگاه اجرا کنید:

از وارد کردن شبکه WLANwlan = WLAN (حالت = WLAN. STA) شبکه = wlan.scan () برای net in tets: if net.ssid == 'ESSID': print ('Network found!') wlan.connect (net.ssid ، auth = (net.sec، 'PASS')، timeout = 5000) در حالی که wlan.isconnected (): machine.idle () print ('اتصال WLAN موفق شد!') break

ESSID را با نام شبکه WiFi خود و PASS را با رمز عبور آن جایگزین کنید.

مرحله 6: برقراری ارتباط با Modbus Slave

برقراری ارتباط با Modbus Slave
برقراری ارتباط با Modbus Slave

کتابخانه های Modbus Master برای هر دو دستگاه مشابه هستند

آنها در مقداردهی اولیه متفاوت هستند.

1) uModBus را در Moduino ESP32 فعال کنید

اجرا کردن:

از uModBusTCP uModBusTCP را به عنوان TCP وارد کنید

2) uModBus را در Pycom اولیه کنید

اجرا کردن:

از uModbus.tcp TCP وارد کنید

اتصال را باز کنید

سپس ارتباط را با:

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

جایی که:

  • IP - آدرس IP رایانه شما با شبیه ساز Modbus Slave
  • PORT - بندر Modbus Slave
  • 60 یک تایم اوت است

اگر هنگام اجرای دستورات خواندن/نوشتن خطای زیر رخ دهد: EXAMPLE

اجرا کردن:

برای Moduino ESP32:

modbus.close ()

برای Moduino Pycom:

modbus._sock.close ()

و سپس اتصال را دوباره ایجاد کنید:

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

این مهم است که قبل از ایجاد مجدد اتصال ، سوکت را ببندید. دستگاه مقدار اتصال سوکت موجود را محدود کرده است.

مرحله 7: ثبت را بخوانید و بنویسید

رجیسترها را بخوانید و بنویسید
رجیسترها را بخوانید و بنویسید

Modbus از چندین عملکرد برای خواندن و نوشتن رجیسترها پشتیبانی می کند.

کتابخانه uModBus برای هر تابع روش دارد:

  1. read_coils
  2. خواندن_ ورودی های گسسته
  3. ثبت نام کنندگان_خواندن
  4. read_input_registers
  5. نوشتن_صفح_کویل
  6. write_single_register

در ابتدا ، اجازه دهید برخی از مقادیر را بنویسیم.

1) سیم پیچ بنویسید (func: 5)

1 مقدار را در 200 ثبت از برده 1 بنویسید:

modbus.write_single_coil (1 ، 200 ، 0xFF00)

اولین استدلال برای شناسه برده است ، در مورد ما 1.

دوم شماره ثبت است و thirs یک مقدار است. برای 1 باید 0xFF00 را در اینجا قرار دهید. 0 تا 201 ثبت را از برده 1 بنویسید:

modbus.write_single_coil (1 ، 201 ، 0)

این روش اجازه می دهد فقط مقادیر بولی را بنویسید: 0 یا 1.

2) ثبت ها را بنویسید (func: 6)

اکنون مقادیر صحیح را در چندین رجیستر بنویسید.

مقدار ثبت شده 111 را برای ثبت 100 از برده 1 بنویسید:

modbus.write_single_register (1 ، 100 ، 111 ، True)

آرگومان اول شناسه برده ، شماره ثبت دوم و سوم مقدار جدید است. آخرین آرگومان مشخص می کند که آیا مقدار باید به عنوان شماره امضا شده تنظیم شود. مقدار پیش فرض آن True است. نیازی به تنظیم آن ندارید.

مقدار ثبت شده -457 را برای ثبت 101 از برده 1 بنویسید:

modbus.write_single_register (1 ، 101 ، -457)

مقدار 50 امضا نشده را تا 100 ثبت کنید از برده 3 بنویسید:

modbus.write_single_register (3 ، 100 ، 50 ، False)

این روش به شما اجازه می دهد تا مقادیر صحیح را در یک رجیستر واحد بنویسید.

رجیستر واحد می تواند حاوی مقادیر 16 بیتی باشد.

متد True برمی گرداند مقدار ورودی معتبر و در غیر اینصورت False است. مقدار نوشته می شود حتی اگر نامعتبر باشد (برای ثبت نام بسیار بزرگ است)

3) سیم پیچ ها/ورودی های مجزا را بخوانید

حالا بیایید مقادیر بولی نوشته شده را بخوانیم. برای خواندن ثبت با تابع 1 سیم پیچ خواندن ، دستور زیر را اجرا کنید:

modbus.read_coils (slaveId ، ثبت نام ، شمارش) [0: count]

برای خواندن ثبت با تابع 2 خواندن ورودی گسسته ، اجرا کنید:

modbus.read_discrete_inputs (slaveId ، ثبت نام ، شمارش) [0: count]

جایی که:

  • slave -id - شناسه برده مجازی (شبیه ساز برده همه شناسه های معتبر را می پذیرد)
  • ثبت نام - شماره ثبت برای خواندن
  • تعداد - تعداد ثبت نامها برای خواندن (مقدار دلخواه را در هر دو مکان قرار دهید)

این متدها آرایه ای با مقادیر بولی برمی گردانند. هر مقدار مربوط به هر ثبات است.

قطعه: [0: count] مورد نیاز است ، زیرا این روش مقادیر بیشتری را نسبت به شمارش برمی گرداند. مقدار همیشه مقادیر قابل تقسیم بر 8 را برمی گرداند. مقادیر اضافی False هستند و با هیچ ثبتی مطابقت ندارند.

مقادیر بولی ما را با هر دو روش بخوانید:

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

نتیجه به شرح زیر خواهد بود: مثال

True به مقدار 1 ، اشتباه به 0 اشاره دارد.

4) ثبت ها را بخوانید

حال مقادیر ثبت شده با تابع 6 را بخوانید.

برای خواندن رجیسترها با عملکرد 3 خواندن رجیسترهای نگهدارنده ، دستور زیر را اجرا کنید:

modbus.read_holding_registers (slaveId ، ثبت نام ، شمارش ، امضا = True)

برای خواندن رجیسترها با تابع 4 خواندن رجیسترهای ورودی ، دستور زیر را اجرا کنید:

modbus.read_input_registers (slaveId ، ثبت نام ، شمارش ، امضا = True)

جایی که:

  • slave -id - شناسه برده مجازی
  • ثبت نام - شماره ثبت برای خواندن
  • تعداد - تعداد ثبت نام ها برای خواندن
  • امضا شده - نشان می دهد که آیا مقادیر خوانده شده باید به عنوان اعداد امضا شده تلقی شوند یا خیر. حالت پیش فرض: درست است

مقدار بازگشتی یک عدد چندتایی با مقدار ثبات مورد نظر است.

رجیسترهای تنظیم شده در نقطه قبلی را بخوانید:

modbus.read_holding_registers (1، 100، 2، True) modbus.read_input_registers (1، 100، 2، True) modbus.read_holding_registers (3، 100، 1، False) modbus.read_input_registers (3، 100، 1، False)

نتایج باید در تصویر زیر باشد: EXAMPLE

در درس بعدی نحوه ایجاد Modbus RTU Master در دستگاه دارای ESP32 را خواهید آموخت.

توصیه شده: