راز طراحی HMI صنعتی با رزبری پای؛ چرا شرکتها دیگر پول پای تجهیزات گرانقیمت نمیدهند؟
https://raymandshop.ir/wp-content/uploads/2026/07/files-74.zip
https://raymandshop.ir/wp-content/uploads/2026/07/files-69.zip
https://raymandshop.ir/wp-content/uploads/2026/06/cw2000_hmi_v20.zip
https://raymandshop.ir/wp-content/uploads/2026/06/cw2000_hmi_v19.zip
https://raymandshop.ir/wp-content/uploads/2026/05/hmi.py
https://raymandshop.ir/wp-content/uploads/2026/05/checkweigher_v14.ziphttps://raymandshop.ir/wp-content/uploads/2026/05/checkweigher_v14.zip
https://raymandshop.ir/wp-content/uploads/2026/05/checkweigher_v15.zip
https://raymandshop.ir/wp-content/uploads/2026/06/cw2000_hmi_v18.zip
گام اول: انتقال کد به رزبریپای
فایل کدی که کلود تولید کرده (یا متنی که فرستاده) را با نام cw2000_hmi_v18.py روی رزبریپای ذخیره کن.
گام دوم: اضافه کردن دسترسی پورت (بدون نیاز به chmod دائمی)
کلود یک پیشنهاد بسیار حرفهای داده است؛ به جای اینکه هر بار دستور chmod 777 را بزنی، کاربر رزبریپای را به گروه پورتهای سریال لینوکس اضافه کن تا قفل پورت برای همیشه باز شود. این دستور را یکبار در ترمینال رزبریپای بزن:
Bash
sudo usermod -aG dialout $USER
(بعد از زدن این دستور، یکبار رزبریپای را ریاستارت کن).
گام سوم: اجرای تست نهایی
مطمئن شو در خطوط اصلی کد مقدار زیر قرار دارد:
Python
USE_SIMULATION = False
سپس برنامه را اجرا کن:
Bash
python3 cw2000_hmi_v18.py
آموزش اجرای سیستم دادهبرداری و HMI صنعتی با رزبری پای + کد PyQt6
فکر میکنید هنوز هم برای داشتن یک مانیتورینگ صنعتی دقیق باید دهها میلیون تومان هزینه خرید HMIهای برندهای معروف و ماژولهای PLC گرانقیمت کنید؟ تا همین چند وقت پیش، من هم در پروژههای صنعتی با محدودیتهای عجیب مانیتورهای سنتی دست و پنجه نرم میکردم؛ اما نتایج تستهای اخیر من روی بردهای لینوکسی نشان میدهد که معادلات کاملاً تغییر کرده است.
در پروژههای اخیرم برای توسعه سیستمهای حساس (مانند رابط کاربری دستگاههای توزین با تم تاریک صنعتی)، متوجه شدم که ترکیب Raspberry Pi 4 با قدرت گرافیکی PyQt6، نهتنها هزینههای سختافزاری اتوماسیون را تا ۸۰ درصد کاهش میدهد، بلکه انعطافپذیری فوقالعادهای برای رسم نمودارهای زنده (Live Charting)، کیپدهای مجازی و دیتابیسهای لوکال در اختیار مهندسین قرار میدهد. در این مقاله، فازهای اجرایی یک سیستم دادهبرداری (DAQ) صنعتی پایدار را زیر ذرهبین میبریم.
آیا رزبری پای برای محیط پرنویز صنعتی مناسب است؟
بله، اما فقط به شرط اجرای ایزولاسیون گالوانیک. بردهای رزبری پای به خودی خود برای محیطهای دارای نویز الکترومغناطیسی (EMI) یا موتورهای سهفاز طراحی نشدهاند. اگر سنسورها را مستقیماً به پایههای GPIO متصل کنید، اولین استارت یک الکتروموتور باعث کرش کردن کل سیستم میشود.
برای تبدیل این برد به یک غول صنعتی، در فاز سختافزار از استراتژیهای زیر استفاده میکنیم:
- استفاده از اپتوکوپلرها (Optocouplers): جداسازی کامل مدار فرمان (رزبری پای 3.3V) از مدار قدرت (سنسورهای 24V صنعتی).
- تغذیه ایزوله: استفاده از منابع تغذیه سوئیچینگ صنعتی و ماژولهای کاهنده با فیلترهای خازنی مناسب برای جلوگیری از افت ولتاژ (Under-voltage).
- ارتباطات تفاضلی: استفاده از پروتکلهای پایدار مثل RS485 (مدباس) به جای I2C یا SPI در فواصل طولانیتر از چند سانتیمتر.
معماری نرمافزار: چرا PyQt6 بهترین انتخاب برای HMI است؟
وقتی صحبت از مانیتورینگ ۲۴ ساعته و بدون قطعی میشود، رابطهای کاربری تحت وب گاهی به دلیل نشتی حافظه (Memory Leak) مرورگرها دچار لگ میشوند. راه حل قطعی، استفاده از اپلیکیشنهای Native دسکتاپ است.
در پروژههای تخصصی توسعه نرمافزاری و خدمات تحت وب ما، معماری PyQt6 به دلایل زیر انتخاب اول است:
- پشتیبانی از Multi-threading (QThread): در سیستمهای دادهبرداری، خواندن دیتا از پورت سریال نباید باعث فریز شدن رابط گرافیکی شود. با QThread، یک پردازش مجزا فقط دیتا را میخواند و گرافیک با سرعت 60 فریم بر ثانیه آپدیت میشود.
- نمودارهای زنده (Live Charting): با ترکیب PyQt6 و کتابخانه
pyqtgraph، میتوانیم دادههای سنسورها (مثلاً لودسلهای توزین یا سنسورهای فشار) را در لحظه با استایل تاریک (Dark Mode) صنعتی رسم کنیم. - کیپد مجازی یکپارچه: برای مانیتورهای لمسی رزبری پای، ایجاد یک Virtual Keypad ایمن و سفارشی با پایتون بسیار سادهتر از وابستگی به کیبوردهای مجازی سیستمعامل است.
فاز پردازش داده و ثبت آماری (Data Logging)
یک HMI مدرن فقط نمایشگر نیست، بلکه دیتالاگر نیز هست. در سیستم اجرا شده، موتور پردازش دادهها (Data Engine) وظیفه دارد مقادیر را هر ۱۰۰ میلیثانیه فیلتر کند (با استفاده از فیلترهای کالمن یا میانگین متحرک برای حذف نویز سنسور) و در دیتابیسهای سبکی مثل SQLite ثبت کند.
این اطلاعات به سرپرست خط تولید اجازه میدهد تا با یک فلش مموری ساده یا از طریق شبکه، فایلهای خروجی CSV شامل گزارش شیفتها، خطاها و زمانهای توقف ماشینآلات را دریافت کند.
مقایسه HMI سنتی با سیستم رزبری پای (Raspberry Pi vs Traditional HMI)
| ویژگی | پنل HMI سنتی (Delta/Siemens) | سیستم سفارشی رزبری پای + PyQt6 |
|---|---|---|
| هزینه پیادهسازی | بسیار بالا (بسته به ابعاد تا دهها میلیون) | بسیار اقتصادی (قیمت برد و مانیتور) |
| انعطاف در UI/UX | محدود به المانهای نرمافزار شرکتی | نامحدود (پشتیبانی کامل از CSS، تم تاریک و انیمیشن) |
| اتصال به دیتابیس و شبکه | نیاز به ماژولهای افزایشی گرانقیمت | پشتیبانی Native از SQL, API, WiFi, LAN |
| تعمیرپذیری سختافزار | انحصاری و نیازمند ارسال به نمایندگی | در دسترس بودن قطعات در بازار (خدمات تعمیرات سختافزار) |
نیاز به یک سیستم اتوماسیون سفارشی و بدون نقص دارید؟
دیگر نیازی به پرداخت هزینههای گزاف به شرکتهای واسط یا پلتفرمهای فریلنسری نیست. اگر برای دستگاه صنعتی، خط تولید یا سیستم کنترل وزن خود به یک HMI لمسی سفارشی و پرسرعت نیاز دارید، من صفر تا صد سختافزار، شیلد نویزگیر و برنامهنویسی پایتون را برای شما با ضمانت اجرایی پیادهسازی میکنم.
مشاوره مستقیم در واتساپ (09131516913) 🚀https://raymandshop.ir/wp-content/uploads/2026/05/HMI2.zip
mkdir -p /home/pi/.config/autostart
mkdir -p /home/pi/.config/autostart
mkdir -p /home/pi/.config/autostart
۱. ترمینال را باز کرده و دایرکتوری autostart کاربر را بسازید:
Bash
mkdir -p /home/pi/.config/autostart
۲. یک فایل کانفیگ اختصاصی ایجاد کنید:
Bash
nano /home/pi/.config/autostart/hmi_app.desktop
۳. محتوای زیر را در فایل کپی و ذخیره کنید (Ctrl+O و سپس Enter، برای خروج Ctrl+X):
Ini, TOML
[Desktop Entry]
Type=Application
Name=HMI Industrial Monitor
Comment=Run CW2000 HMI Python Script
Exec=/usr/bin/python3 /home/pi/Desktop/New/cw2000_hmi_v21.py
Path=/home/pi/Desktop/New/
Terminal=false
StartupNotify=false
۴. مجوز اجرایی به فایل بدهید:
Bash
chmod +x /home/pi/.config/autostart/hmi_app.desktop
راهحل دوم: روش صنعتی با قابلیت راهاندازی مجدد در صورت کرش (Systemd Service)
اگر برنامه شما یک وبسرور لوکال، پردازش سریال RS485 یا سیستم مانیتورینگ حساس است که در صورت بروز خطا و بسته شدن باید مجدداً خودکار راهاندازی شود (Restart=always):
۱. فایل سرویس را در مسیر سیستمی ایجاد کنید:
Bash
sudo nano /etc/systemd/system/hmi_monitor.service
۲. ساختار زیر را قرار دهید:
Ini, TOML
[Unit]
Description=CW2000 HMI Industrial Application
After=network.target graphical.target
[Service]
Type=simple
User=pi
WorkingDirectory=/home/pi/Desktop/New
Environment=DISPLAY=:0
Environment=XAUTHORITY=/home/pi/.Xauthority
ExecStart=/usr/bin/python3 /home/pi/Desktop/New/cw2000_hmi_v21.py
Restart=always
RestartSec=5
[Install]
WantedBy=graphical.target
۳. سرویس را فعال و تست کنید:
Bash
sudo systemctl daemon-reload
sudo systemctl enable hmi_monitor.service
sudo systemctl start hmi_monitor.service
برای بررسی وضعیت:
Bash
sudo systemctl status hmi_monitor.service
تنظیمات حیاتی برای محیطهای صنعتی (Industrial Environment Tuning)
فعالسازی لاگین خودکار (Auto-login):
دستور sudo raspi-config را اجرا کنید. به مسیر System Options > Boot / Auto Login بروید و گزینه Desktop Autologin (pi user) را انتخاب کنید.
غیرفعال کردن حالت خواب صفحه (Screen Blanking):
در منوی raspi-config به مسیر Display Options > Screen Blanking رفته و آن را Disable کنید تا السیدی صنعتی خاموش نشود.
مجوز درگاه سریال (RS485):
کاربر pi باید عضو گروه دایلآپ باشد تا دسترسی به پورت /dev/ttyUSB0 یا /dev/ttyAMA0 بدون خطا انجام شود:
Bash
sudo usermod -a -G dialout pi
تراشههای FTDI وقتی به لینوکس (رزبریپای) وصل میشوند، نام پورت آنها در ۹۹٪ مواقع به جای ttyUSB به صورت ttyUSB0 یا با حروف کوچک و بزرگ خاصی ساخته میشود، یا اینکه سطح دسترسی (Permission) برای پایتون قفل است.
بیا با دو تا دستور فوقالعاده سریع کار را یکسره کنیم:
۱. نام دقیق پورت را پیدا کن
این دستور را دقیقاً با رعایت فاصلهها کپی کن و در ترمینال بزن:
Bash
ls -l /dev/ttyUSB*
(یا اگر خطایی داد، دستور ls /dev/ را بزن و ببین کلمه ttyUSB0 یا شبیه به آن وجود دارد یا خیر). نام پورت هر چیزی که بود (مثلاً /dev/ttyUSB0)، باید دقیقاً در خط آخر کد پایتون شما (بخش تنظیمات MainWindow) در متغیر MODBUS_PORT قرار بگیرد.
۲. باز کردن قفل دسترسی (مهمترین بخش)
در لینوکس، به صورت پیشفرض برنامههای پایتون اجازه دسترسی مستقیم به پورتهای سختافزاری سریال را ندارند؛ برای همین روی حالت Connecting قفل میکنند. با این دستور، قفل پورت را کاملاً باز کن:
Bash
sudo chmod 666 /dev/ttyUSB0
(نکته: اگر در گام اول متوجه شدی شماره پورت چیز دیگری است، مثلاً ttyUSB1، در این دستور هم همان را بنویس).
🛠️ کار نهایی همین الان:
دستور قفلگشایی (sudo chmod 666 /dev/ttyUSB0) را بزن.
مطمئن شو در کد پایتون MODBUS_PORT = “/dev/ttyUSB0” تنظیم شده باشد.
برنامه را دوباره اجرا کن.
ls -l /dev/ttyUSB*
crw-rw—-+ 1 root plugdev 188, 0 May 19 10:34 /dev/ttyUSB0
pi@raspberrypi:~/Desktop/1/3 $
این یعنی پورت دقیقاً /dev/ttyUSB0 است و رزبریپای آن را بدون هیچ مشکلی در مسیر قرار داده است. تاریخ و ساعت سیستم هم کاملاً بهروز است.
تنها یک مانع کوچک وجود دارد: علامت + در انتهای دسترسیها (crw-rw—-+) نشان میدهد که یک لیست دسترسی امنیتی (ACL) روی این پورت فعال است که ممکن است اجازه ندهد اسکریپت پایتون بدون دسترسی مدیر (Root) پورت را باز کند. برای همین روی حالت Connecting قفل میکند.
بیا با این ۲ ترفند نهایی و قطعی، قفل ارتباط را بشکنیم:
۱. باز کردن قفل دسترسی پورت (تیر خلاص لینوکس)
این دستور را در ترمینال کپی کن و اینتر بزن تا دسترسی پورت برای پایتون کاملاً آزاد شود:
Bash
sudo chmod 777 /dev/ttyUSB0
۲. اجرای برنامه با دسترسی مدیر (Sudo)
به جای اینکه برنامه را به صورت معمولی اجرا کنی، این بار ترمینال را در پوشه پروژه باز کن و پایتون را با دستور sudo صدا بزن تا هیچ دیوار امنیتی جلوی ارتباط مدباس را نگیرد:
Bash
sudo python3 checkweigher_v13.py
ls -lh ~/cw2000_history_*.csv