Aplicatie Flask + SQLite pentru productie alimentara: cantarirea componentelor unui produs finit si tiparirea etichetei prin QZ Tray. - produse finite (retete) formate din componente cantarite - designer vizual de etichete (mm/px, zona sigura, campuri variabile, cod QR cu continut din mai multe bucati) - legare produs finit -> sablon de eticheta - navigare pe doua taburi: Cantarire / Setari - administrare: componente, produse finite, sabloane, campuri, istoric - backup, resetare baza de date, checklist de pregatire, /healthz - CLI de administrare si serviciu systemd pentru productie - vendor/syncpulse-scale-bridge (GPL-3.0-or-later) pentru citirea cantarului
15 KiB
SyncPulse Scale Bridge
باسکول دارای درگاه RS-232 را به هر رایانهی ویندوزی وصل کنید و یک فایل را اجرا کنید؛ درگاه، سرعت و پروتکل را خودش پیدا میکند، وزن زنده را نشان میدهد و آن را بهصورت JSON روی شبکه در اختیار میگذارد.
English · فارسی
ساختهی فرشاد زمانی در کلادتارت (Cloudtart). نرمافزار آزاد است و با رابط سادهی HTTP/JSON با هر سامانهای کار میکند — ERP، MES، فرم وب، ماکروی صفحهگسترده یا اسکریپت خودتان.
چرا
بیشتر باسکولها و نمایشگرهای توزین صنعتی هنوز با درگاه سریال کار میکنند و هر برند قالب، سرعت و تنظیم خط خودش را دارد. معمولاً برای وصل کردن یک باسکول باید دفترچه را پیدا کرد، 9600 8N1 یا 2400 7E1 را حدس زد، برنامهی خواندن نوشت و آن را کنار باسکول روشن نگه داشت. این برنامه همهی این کارها را انجام میدهد:
- باسکول را خودش پیدا میکند — روی هر درگاه COM با همهی سرعتهای رایج گوش میدهد، قالب ۷ بیتی با پریتی را تشخیص میدهد و سپس با زبان سازندگان اصلی از باسکول وزن میخواهد. فقط درخواستهای خواندنی فرستاده میشود؛ هیچوقت صفر، تار یا چاپ نمیکند.
- قالبهای زیادی را میخواند — Mettler Toledo (MT-SICS و Toledo Continuous)، A&D، SMA (Rice Lake، Avery Weigh-Tronix، Cardinal، Fairbanks و…)، NCI، Ohaus، Sartorius SBI، CAS، خانوادهی چینی XK3190، محک MDS، هر متن خوانا، و قالبهای دودویی/متنی دلخواه.
- وزن را نشان میدهد و در اختیار میگذارد — صفحهی دوزبانه (فارسی/انگلیسی) روی همان رایانه، و API از نوع JSON با مقدار، واحد، پایداری، خالص/ناخالص، بیشازظرفیت و بررسی checksum.
- یک فایل، بدون نصب —
SyncPulseScaleBridge.exeرا کنار باسکول کپی و اجرا کنید. - آمادهی محیط تولید — قطع و وصل کابل USB و درگاه مشغول را تحمل میکند، درگاه فایروال را باز میکند و با یک دکمه همراه ویندوز اجرا میشود، کلید دسترسی دارد و گزارش کارش را در فایل نگه میدارد.
شروع سریع (ویندوز)
۱. فایل SyncPulseScaleBridge.exe را از آخرین نسخه
بگیرید و روی رایانهای که باسکول به آن وصل است، ترجیحاً در پوشهی جداگانه مثل C:\ScaleBridge\ کپی کنید (فایل
تنظیمات bridge.json و گزارش کار کنار آن ساخته میشود).
۲. درگاه RS-232 باسکول را مستقیم یا با مبدل USB به سریال وصل کنید و خروجی سریال نمایشگر را روشن کنید.
۳. برنامه را با دو بار کلیک اجرا کنید. یک پنجرهی کنسول باز میشود (باز بماند) و صفحهی مدیریت در مرورگر با نشانی
http://127.0.0.1:8765/ باز میشود.
۴. پیدا کردن باسکول ← شروع جستجو. وقتی باسکول پیدا شد، نامی به آن بدهید (مثلاً packing-1) و ذخیره را بزنید.
زبانهی باسکولها وزن زندهی آن را نشان میدهد.
۵. دسترسی از شبکه: نشانی و کلید دسترسی را بردارید، باز کردن درگاه 8765 در فایروال را بزنید و اگر باید بدون ورود کاربر هم کار کند، اجرا همراه ویندوز را بزنید.
بدون دستگاه هم میتوانید با باسکول شبیهسازیشده امتحان کنید:
SyncPulseScaleBridge.exe --simulate mahak_mds,toledo_cont:4800:7E1,mt_sics
تشخیص خودکار چطور کار میکند
برای هر درگاه انتخابشده:
۱. گوش دادن با سرعتهای 9600، 2400، 4800، 19200، 1200، 38400، 57600 و 115200 (قالب 8N1). باسکولی که خودش پیوسته میفرستد اینجا دیده میشود. اگر بایتها فقط با صفر کردن بیت بالا خوانا شوند، خط ۷ بیت داده با پریتی دارد و دوباره با 7E1/7O1 گوش داده میشود. دادهی رسیده با همهی قالبهای پیوسته مقایسه میشود و قالبهای دارای checksum بر متن ساده مقدماند.
۲. پرسیدن — اگر چیز مفیدی شنیده نشد، هر درخواست خواندنی کتابخانه با هر سرعت و قالب فرستاده میشود (سریع: ۸ حالت؛ کامل: ۱۴ حالت) و پاسخ با همان پروتکل بررسی میشود. پاسخ با یک پرسش دوباره تأیید میشود.
هر نتیجه درصد اطمینان، تنظیم دقیق خط، درخواست، نمونهی دادهی خام و خوانش فعلی را دارد. اگر دادهی خوانا ولی با قالب ناشناخته برسد، همان نمونه گزارش میشود تا در زبانهی تنظیم دستی و مانیتور تنظیم شود.
باسکولهایی که فقط با کلید «چاپ» میفرستند
بسیاری از نمایشگرها — بهویژه آنهایی که به لیبلزن وصلاند — تا اپراتور «چاپ» نزند چیزی نمیفرستند و بعد کل
برچسب را میفرستند. در «پیدا کردن باسکول» گزینهی باسکول فقط با زدن کلید چاپ داده میفرستد (و در صورت تمایل
فقط گوش بده) را بزنید و وقتی صفحه خواست، چاپ بزنید. برای چنین باسکولی پل همیشه درگاه را باز نگه میدارد
و هر برچسب را ثبت میکند: وزن، واحد و بقیهی مقادیر برچسب (شماره سفارش، شیفت، تاریخ …) در فایل
labels/<profile>-YYYY-MM-DD.jsonl و ۵۰۰ مورد آخر از GET /labels. برای اینکه لیبلزن هم کار کند، رایانه را
با کابل Y وصل کنید: TX باسکول (و زمین) هم به چاپگر و هم به RX رایانه؛ رایانه روی این خط چیزی نمیفرستد.
قالبهای پشتیبانیشده
| ID | Format | Talks |
|---|---|---|
mt_sics |
Mettler Toledo MT-SICS (SI) |
on request |
toledo_cont |
Toledo Continuous (STX + status words, checksum) | continuous |
and_std |
A&D standard (ST/US/OL, Q) |
on request / continuous |
sma |
SMA SCP-0499 (<LF>W<CR>) |
on request |
nci |
NCI 3835 (W<CR>) |
on request |
ohaus |
Ohaus (IP) |
on request |
sartorius |
Sartorius SBI (ESC P) |
on request |
cas_enq |
CAS ENQ/ACK/DC1 (experimental) | handshake |
xk3190_tf0 |
XK3190 continuous (tF=0, XOR checksum) | continuous |
xk3190_reversed |
XK3190 = reversed-digit stream — tested on real hardware (YH-T7E) |
continuous |
mahak_mds |
Mahak MDS binary (4D 09 04 07) — tested on real hardware |
on request |
label_print |
label printer stream: TSPL / EPL2 / ZPL — tested on real hardware (PTC400) | on Print key |
ascii_generic |
any readable line with a number and a unit | continuous |
custom_binary / custom_ascii |
your own binary frame / regular expression | either |
قالبها بر پایهی مستندات منتشرشدهی سازندگاناند و با فریمهای نمونهی همان مستندات آزمایش شدهاند؛ mahak_mds روی
باسکول واقعی (محک MDS 13000) آزموده شده است. نام برندها فقط برای توصیف قالب داده است و بسیاری از نمایشگرهای دیگر هم
همین قالبها را به کار میبرند.
API برای هر سامانهی دیگر
همهی درخواستها بهجز /health سرآیند X-Bridge-Token: <کلید دسترسی> میخواهند.
GET /health
GET /ports
GET /profiles
GET /weight?profile=packing-1
GET /weight?port=COM7&protocol=mt_sics&baud=9600&framing=8N1
POST /weight {"profile": "packing-1"}
POST /read {serial, exchange, frames, max_age_ms, wait_ms}
$ curl -H "X-Bridge-Token: $KEY" "http://192.168.1.20:8765/weight?profile=packing-1"
{"ok": true, "value": 550.0, "unit": "g", "stable": true, "stale": false, "age_ms": 84, ...}
stable اگر قالب باسکول آن را بفرستد از خود باسکول است؛ وگرنه یعنی چند خوانش آخر (پیشفرض ۳) برابر بودهاند.
جزئیات کامل در README انگلیسی.
امنیت
- کلید دسترسی در اولین اجرا ساخته و در
bridge.jsonنگه داشته میشود؛ هر زمان میتوان کلید تازه ساخت. - سامانههای مجاز — میتوان فقط IP سرور خودتان را پذیرفت؛ قانون فایروال هم میتواند به یک نشانی محدود شود.
- صفحهی مدیریت فقط محلی است — فقط روی خود رایانه (
127.0.0.1) باز میشود و API آن سرآیند ویژه و Host محلی میخواهد تا صفحههای دیگر وب نتوانند آن را به کار بگیرند. - نسبت به باسکول فقطخواندنی است — هیچ فرمان صفر، تار، چاپ یا تنظیم فرستاده نمیشود.
فایروال و اجرا در پسزمینه
فایروال ویندوز بهطور پیشفرض اتصالهای ورودی را میبندد؛ پس تا قانونی اجازه ندهد، رایانههای دیگر به درگاه 8765 این رایانه نمیرسد. دکمهی باز کردن درگاه 8765 در فایروال اجازهی مدیر میگیرد و این فرمان را اجرا میکند (برای انجام دستی هم میتوانید همین را در Command Prompt با دسترسی مدیر اجرا کنید):
netsh advfirewall firewall add rule name="SyncPulse Scale Bridge" dir=in action=allow protocol=TCP localport=8765 profile=any
اگر پرسش «Allow access؟» ویندوز در اولین اجرا لغو شده باشد، ویندوز قانون مسدودکننده برای برنامه میسازد که بر هر قانون اجازه مقدم است؛ این دکمه آن را هم پاک میکند.
اجرا همراه ویندوز وظیفهی زمانبندیشدهی SyncPulse Scale Bridge را میسازد: هنگام روشن شدن رایانه و پیش از ورود کاربر با حساب SYSTEM اجرا میشود، پس از ۷۲ ساعت متوقف نمیشود و اگر بسته شود هر دقیقه دوباره اجرا میشود.
رفع اشکال
- درگاه COM دیده نمیشود / «A device attached to the system is not functioning» — بسیاری از مبدلهای ارزان تراشهی CH340 یا PL2303 تقلبی دارند که درایورهای تازه آن را نمیپذیرند. برای CH340 درایور 3.5.2019.1 (از Microsoft Update Catalog) را نصب کنید، برای PL2303 درایور قدیمیتر Prolific، یا از مبدل FTDI استفاده کنید.
- چیزی پیدا نشد — خروجی سریال را در منوی نمایشگر روشن کنید (معمولاً
COM،rS،SEr،Serial،ContinuousیاOn request)؛ کابل را بررسی کنید (نالمودم یا مستقیم — پایههای ۲، ۳ و ۵ کافی است)؛ هنگام جستجو چیزی روی باسکول بگذارید یا کلید چاپ را بزنید؛ جستجوی کامل را امتحان کنید؛ بایتهای خام را در تنظیم دستی و مانیتور ببینید. - سرور وصل نمیشود — قانون فایروال، IP و یکی بودن شبکه را بررسی کنید؛
curl http://<ip>:8765/healthاز سرور باید پاسخ دهد. - هشدار آنتیویروس — برنامههای تکفایلی ساختهشده با PyInstaller گاهی بهاشتباه شناسایی میشوند. checksum SHA-256 منتشرشده با نسخه را مقایسه کنید یا برنامه را خودتان از کد منبع بسازید.
ساخت از کد منبع
git clone https://github.com/farshad-zamani/syncpulse-scale-bridge
cd syncpulse-scale-bridge
scripts\build_exe.bat
مجوز
GPL-3.0-or-later با یک شرط افزوده طبق بند ۷(ب): نام و مشخصات سازنده که برنامه نمایش میدهد — در پانویس
صفحه، صفحهی «درباره»، فرمان about و پاسخ /health — باید در همهی نسخهها و نسخههای تغییر یافته حفظ شود.
NOTICE.md را ببینید.
سازنده
فرشاد زمانی — کلادتارت (Cloudtart) · GitHub · LinkedIn
در اصل برای پلتفرم SyncPulse توسعه داده شد.

