> 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/almyzat-alreysyh/widget-to-socket.md).

# Widget to Socket Utility

Widget to Socket تحول عناصر تحكم العقدة (node controls) إلى مدخل (input) من نوع socket. استخدمها عندما يجب أن تأتي قيمة عادةً ما تُكتب أو تُختار أو تُسحب داخل عقدة من كتلة أخرى بدلاً من ضبطها يدوياً على العقدة.

أمثلة على استخداماتها:

* التحكم في threshold من عملية حسابية.
* السماح لـ HMI أو إدخال يدوي بالتحكم في معلمة عقدة.
* تزويد الإعدادات من PLC، قارئ باركود، ملف وصفة (recipe)، أو سكربت يعمل بدون واجهة.
* اختبار عدة قيم لمعلمات بدون فتح العقدة وتعديل الـ widget في كل مرة.

توضح هذه الصفحة سيناريو صغير: ستحول widget إلى socket، توصل قيمة ديناميكية، تشغل السيناريو، ثم تعيد التحويل إذا رغبت.

## ما الذي ستبنيه

ستنشئ قيمة نطاق (range) من مدخلي أرقام وتزودها إلى socket تم تحويله من widget.

<figure><img src="/files/m6rRn9nXhDCQAE7mPtTi" alt="Scenario before converting a widget to a socket"><figcaption><p>ابدأ بعقدة لا تزال تستخدم واجهة الـ widget العادية عليها.</p></figcaption></figure>

## الخطوة 1: أضف الكتل التجريبية

أنشئ سيناريو جديد وأضف الكتل التالية:

1. أضف كتلتين `Number Input`.
2. أضف كتلة واحدة `Mux`.
3. أضف كتلة واحدة `Number Range`.
4. أضف مخرجاً واحداً أو كتلة تصحيح (debug) حتى تتمكن من فحص النتيجة.

اضبط `Number Input` الأولى على القيمة الدنيا، على سبيل المثال `10`.

اضبط `Number Input` الثانية على القيمة العليا، على سبيل المثال `80`.

وصل كلا مدخلي الأرقام إلى `Mux`.

> ملاحظة: يستخدم هذا المثال `Number Range` لأن شريط نطاق القيم سهل التعرُّف عليه. نفس سير العمل ينطبق على غيره من widgets في العقد التي تظهر إجراء تحويل الـ API.

## الخطوة 2: افتح قائمة الـ Widget

انقر بزر الماوس الأيمن على الـ widget التي تريد التحكم بها من كتلة أخرى.

على كتلة `Number Range`، انقر بزر الماوس الأيمن على widget الـ `Range Slider`.

<figure><img src="/files/3P2CH2MoyUo8UWSA7LOd" alt="Widget context menu with API conversion action"><figcaption><p>انقر بزر الماوس الأيمن على الـ widget واختر إجراء تحويل API.</p></figcaption></figure>

اختر:

```
[API] Convert to socket
```

## الخطوة 3: تأكد من وجود الـ Socket الجديد

بعد التحويل، يختفي الـ widget ويظهر مدخل socket جديد على العقدة.

<figure><img src="/files/c8xt7aIs0ZRxoKl8tJM4" alt="New input socket created from the converted widget"><figcaption><p>الإعداد الأصلي للـ widget صار الآن متاحاً كـ input socket.</p></figcaption></figure>

اسم الـ socket يطابق اسم الـ widget المحول، مما يسهل معرفة أي معلمة تتحكم بها.

## الخطوة 4: وصل القيمة الديناميكية

وصل خرج `Mux` إلى الـ socket المحول الجديد على `Number Range`.

<figure><img src="/files/ACwyQ4NdVWUkOWwTGI3q" alt="Mux output connected to the converted widget socket"><figcaption><p>أصبحت معلمة العقدة تأتي الآن من جزء آخر من السيناريو.</p></figcaption></figure>

شغّل السيناريو. الآن تقرأ كتلة `Number Range` القيمة الواردة بدلاً من شريط السحب (slider) المخفي.

غيّر قيمة أي من `Number Input` وشغّل مرة أخرى. يتحدّث النطاق عبر اتصال الـ socket.

## الخطوة 5: أعد التحويل إذا لزم الأمر

إذا لم تعد ترغب في التحكم الخارجي، انقر بزر الماوس الأيمن على الـ socket المحول واختر:

```
Convert to widget
```

<figure><img src="/files/VQf3PAgaMmbP9oQKW7DJ" alt="Converted socket menu with Convert to widget action"><figcaption><p>يمكن استعادة الـ sockets المحولة لشكل الـ widget الأصلي.</p></figcaption></figure>

سيُزال مدخل الـ socket ويظهر الـ widget الأصلي مرة أخرى.

## متى تستخدم هذه الميزة

استخدم Widget to Socket عندما يجب أن تتحكم منطقياً معلمة عبر السيناريو.

حالات مناسبة:

* thresholds مدفوعة بواسطة وصفة (recipe).
* عناصر تحكم المشغل (operator) من HMI.
* سيناريوهات بلا واجهة حيث تأتي القيم من سكربت أو ملف.
* اختبارات آلية تمر عبر العديد من قيم المعلمات.
* قيم معلمة مشتركة تستخدمها عدة عقد.

تجنّب استخدامها عندما تكون القيمة ثابتة دوماً — الاحتفاظ بـ widget عادي أبسط في هذه الحالة.

## استكشاف الأخطاء وإصلاحها

* إذا كان خيار `[API] Convert to socket` مفقوداً، فذلك يعني أن الـ widget غير قابل للتحويل.
* إذا لم تتغير نتيجة العقدة، فتأكد من أن الكتلة المتصلة تنتج قيمة في كل تشغيل.
* إذا رفض الـ socket المحول الاتصال، فقد لا يتطابق نوع القيمة المصدرية مع ما يتوقعه الـ widget. استخدم محولاً (converter)، `Mux`، `Demux`، أو كتلة إدخال متوافقة.
* إذا أصبح السيناريو أصعب للقراءة، أعد تسمية الكتل المجاورة لتوضيح مصدر المعلمة.
