> For the complete documentation index, see [llms.txt](https://docs.augelab.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.augelab.com/arabic/alblwkat-alwzyfyh/blocks-reference/input-output/communication/serial-read.md).

# Serial Read

هذه الدالة (function block) تقرأ آخر سطر متاح من اتصال تسلسلي (serial) بشكل غير حاجب (non-blocking) وتحوّله إلى نوع البيانات الذي تختاره. تم تصميمها لتكون متسامحة مع المدخلات القديمة أو غير الصحيحة من خلال إرجاع قيمة افتراضية يحددها المستخدم عند الحاجة.

## 📥 المدخلات <a href="#inputs" id="inputs"></a>

* `Enable` مقبس (socket) من نوع Boolean يُفعّل أو يوقِف عملية القراءة.
* `ConnId` مقبس عام (Generic) لتحديد معرف الاتصال التسلسلي الذي سيتم القراءة منه (connection identifier).

## 📤 المخرجات <a href="#outputs" id="outputs"></a>

* `Data` مقبس خرج عام (Generic) يُصدر آخر قيمة بعد تحويلها، أو القيمة الافتراضية عندما تكون البيانات قديمة أو فشل التحويل.

## 🕹️ الضوابط <a href="#controls" id="controls"></a>

* `Stale timeout (s)` حقل نصي يحدد المدة بالثواني التي ننتظرها لوصول سطر جديد قبل اعتبار القراءة "قديمة".
* `Data Type` قائمة منسدلة لاختيار نوع التحويل للسطور الواردة. الخيارات المتاحة: `String`, `Int`, `Float`, `Boolean`, `HexInt`, `Bytes`.
* `Default (on stale/parse fail)` حقل نصي يُدخل فيه قيمة الاحتياط التي تُرجَع عندما لا تتوفر بيانات حديثة أو يفشل التحويل. بالنسبة لـ`Bytes` أدخل أحرف هكس (hex) مثل `AA55`.

## 🎯 الميزات <a href="#features" id="features"></a>

* قراءة غير حاجبة (non-blocking) لأحدث سطر متاح.
* اكتشاف البيانات القديمة (stale) بحيث لا تُمرّر الأسطر القديمة بلا حدود.
* عدة أنواع تحويل مع قيمة افتراضية قابلة للتكوين.
* مدخلات ومخرجات بسيطة لتسهيل دمجها في سيناريوهات أكبر.

## 📝 كيفية الاستخدام <a href="#usage" id="usage"></a>

1. ضع معرف الاتصال في `ConnId` الذي يشير إلى اتصال تسلسلي فعّال.
2. استخدم `Enable` لبدء أو إيقاف القراءة بدون إزالة البلوك.
3. اضبط `Stale timeout (s)` لتحديد مدى "جدة" البيانات المطلوبة.
4. اختر `Data Type` المناسب لتحويل السطور الواردة.
5. عرّف `Default (on stale/parse fail)` لتحديد ما يعيد البلوك عندما لا توجد بيانات حديثة أو قابلة للتحويل.
6. استخدم مخرج `Data` في البلوكات التالية للتسجيل، العرض، أو النشر.

## 📊 التقييم <a href="#evaluation" id="evaluation"></a>

* عندما يكون مفعلًا، يحاول البلوك قراءة آخر سطر من الاتصال المحدد.
* إذا لم يصل سطر جديد خلال المدة المحددة في `Stale timeout (s)`, يقوم البلوك بإخراج القيمة الافتراضية المحددة.
* إذا فشل التحويل إلى نوع البيانات المختار، يُرجَع أيضًا القيمة الافتراضية.
* بالنسبة لنوع `Bytes`، يعتبر البلوك القيمة الافتراضية كنص هكس (hexadecimal).

## 💡 نصائح وحيل <a href="#tips-and-tricks" id="tips-and-tricks"></a>

* استخدم `Debug Input` لتسجيل أو فحص النتائج الخام أثناء التطوير.
* وجه القراءات التسلسلية إلى `Data to JSON` أو `CSV Export` للتخزين المنظم أو التصدير الدفعي.
* انشر القيم المعالجة عبر `MQTT Publish` أو أرسلها إلى خدمة ويب باستخدام `REST API - Post`.
* خزّن القيم للاستخدام لاحقًا عبر `Data Write Local` أو `Data Write Global` واسترجعها بالبلوكات المقابلة للقراءة.
* ارسم البيانات الرقمية في الوقت الحقيقي باستخدام `Scope` لمراقبة الاتجاهات أو الشذوذ.
* اجمع مع `Logic Input` أو بلوكات المقارنة لتفعيل إجراءات بناءً على القيم الواردة (مثال: إنذار عند تجاوز قيمة رقمية لعتبة).

## 🛠️ استكشاف الأخطاء وإصلاحها <a href="#troubleshooting" id="troubleshooting"></a>

* إذا لم تظهر بيانات على `Data`, تحقق أن `ConnId` يشير إلى اتصال فعّال.
* إذا كان الإخراج دائمًا هو القيمة الافتراضية، زد قيمة `Stale timeout (s)` أو تأكد أن المصدر يرسل سطورًا بشكل فعّال.
* إذا فشل التحويل لأنواع رقمية أو منطقية، افحص النص الخام القادم من الجهاز وعدّل القيمة الافتراضية لتتناسب مع الصيغة.
* بالنسبة لنوع `Bytes`, تأكد أن القيمة الافتراضية مُدخلة كأحرف هكس صحيحة (بدون مسافات أو أحرف غير هكس).
