1️⃣ TSEND و TRCV: دستورات پایه TCP

"در ادامه مبحث قبلی مبنی بر پروتکل‌های ارتباطی پشتیبانی‌شده توسط پورت PROFINET داخلی CPU (مروری بر TCP، ISO-on-TCP و UDP در PLC S7-1200) امروز قصد معرفی بلوک های مربوط به TCP و ISO-ON-TCP رو داریم. "

دستورات TSEND و TRCV بخش اصلی ارسال و دریافت داده در شبکه TCP هستند:

  • TCON: ایجاد اتصال TCP/IP
  • TSEND: ارسال داده
  • TRCV: دریافت داده
  • TDISCON: قطع اتصال

محدودیت‌ها:

  • برای هر اتصال باید TCON، TSEND/TRCV و TDISCON را جداگانه فراخوانی کنیم.
  • TSEND نمی‌تواند داده‌های Boolean ارسال کند و TRCV داده‌ها را به Boolean دریافت نمی‌کند.
  • عملکرد آسنکرون دارد؛ یعنی یک دستور ممکن است بیش از یک سیکل ادامه یابد.

2️⃣ TSEND_C و TRCV_C: نسخه بهینه و ترکیبی

TSEND_C و TRCV_C ترکیبی از چند دستور پایه هستند:

  • TSEND_C = TCON + TSEND + TDISCON
  • TRCV_C = TCON + TRCV + TDISCON

مزایا:

  • اتصال خودکار ایجاد، نگه داشته و مانیتور می‌شود.
  • ارسال و دریافت داده ساده‌تر و قابل برنامه‌نویسی سریع‌تر است.
  • پشتیبانی از TCP و ISO-on-TCP برای ارتباط CPU به CPU.

3️⃣ پروتکل‌های مورد استفاده


پروتکل
ویژگی‌ها
TCP
اتصال‌گرا، اطمینان از ارسال داده، مناسب برای داده‌های متوسط تا بزرگ، آدرس‌دهی با پورت
ISO-on-TCP (RFC 1006)
پروتکل پیام‌گرا، شناسایی پایان داده، مناسب WAN، استفاده از TSAP برای مدیریت چند اتصال به یک IP


TSEND_C و TRCV_C می‌توانند تحت هر دو پروتکل کار کنند.


4️⃣ وضعیت دستورها: BUSY, DONE, ERROR


BUSY
DONE
ERROR
توضیح
1
0
0
عملیات در حال پردازش است
0
1
0
عملیات با موفقیت انجام شد
0
0
1
عملیات با خطا خاتمه یافت (جزئیات در STATUS)
0
0
0
هیچ عملیات جدیدی آغاز نشده است


7️⃣ پارامترهای TSEND_C و TRCV_C

پارامترهای ورودی (IN / IN_OUT)



پارامتر
دستور
نوع داده
توضیح کوتاه
REQTSEND_CBoolآغاز ارسال داده با لبه بالا رونده
EN_RTRCV_CBoolفعال‌سازی دریافت داده
CONTTSEND_C/TRCV_CBoolکنترل اتصال: 0 = قطع اتصال بعد از ارسال/دریافت، 1 = ایجاد و نگهداری اتصال
LENTSEND_C/TRCV_CUDIntحداکثر تعداد بایت برای ارسال یا دریافت داده
ADHOCTRCV_CBoolفعال‌سازی حالت Ad hoc برای TCP (اختیاری)
CONNECTTSEND_C/TRCV_CVariantاشاره‌گر به توضیحات اتصال (ساختارهای TCON_IP_v4، TCON_QDN، TCON_IP_V4_SEC و …)
DATATSEND_C/TRCV_CVariantاشاره‌گر به ناحیه داده برای ارسال یا دریافت
ADDRTSEND_C/TRCV_CVariantآدرس مقصد در ارتباط UDP (اختیاری)
COM_RSTTSEND_C/TRCV_CBoolراه‌اندازی مجدد دستور و اتصال (اختیاری)

پارامترهای خروجی (OUT)

پارامتر
دستور
نوع داده
توضیح کوتاه
DONETSEND_C/TRCV_CBoolپایان موفقیت‌آمیز عملیات (یک سیکل)
BUSYTSEND_C/TRCV_CBoolوضعیت پردازش: 1 = در حال پردازش، 0 = آماده یا پایان یافته
ERRORTSEND_C/TRCV_CBool0 = بدون خطا، 1 = خطا در اتصال، ارسال یا دریافت
STATUSTSEND_C/TRCV_CWordجزئیات خطا و وضعیت دستور
RCVD_LENTRCV_CIntتعداد بایت دریافت شده واقعاً

💡 نکته: این جدول به خواننده کمک می‌کند تا بدون نگاه کردن به دفترچه مرجع، درک سریع و جامعی از نحوه کارکرد و پارامترهای TSEND_C و TRCV_C پیدا کند.



نکات مهم در استفاده از TSEND_C و TRCV_C

  1. شروع ارسال داده:
    دستور TSEND_C تنها زمانی عملیات ارسال را شروع می‌کند که لبه پایین به بالا (low-to-high) در ورودی REQ رخ دهد.
  • در طول پردازش، پارامتر BUSY = 1 است.
  • پایان موفقیت‌آمیز عملیات با تنظیم DONE = 1 یا وقوع خطا با ERROR = 1 مشخص می‌شود (فقط برای یک سیکل نمایش داده می‌شود).
  • در این مدت، هر لبه پایین به بالای جدید در REQ نادیده گرفته می‌شود.
  1. طول داده (LEN parameter):
  • مقدار پیش‌فرض LEN = 0 باعث می‌شود که طول داده از پارامتر DATA استخراج شود.
  • توصیه می‌شود که داده‌ای که TSEND_C ارسال می‌کند، هم اندازه با پارامتر DATA دستور TRCV_C باشد تا هماهنگی برقرار شود.
  1. ارسال داده در بخش‌های کوچک‌تر از DATA:
  • اگر داده‌ای که ارسال می‌شود اندازه‌ای کمتر از پارامتر DATA دستور TRCV_C داشته باشد، TRCV_C در وضعیت BUSY باقی می‌ماند تا مجموع داده‌های ارسال شده توسط TSEND_C به اندازه DATA دستور TRCV_C برسد (کد وضعیت: 7006).
  • تا زمانی که کل داده دریافت نشده باشد، TRCV_C محتوای جدید را در بافر DATA نمایش نمی‌دهد.

💡 نکته مهندسی:
این محدودیت باعث می‌شود که همیشه هماهنگی بین اندازه داده ارسال‌شده و بافر دریافت رعایت شود و از بروز خطاهای ناهماهنگ یا داده‌های ناقص جلوگیری گردد.



عملکرد TSEND_C

دستور TSEND_C به صورت غیرهمزمان (asynchronous) اجرا می‌شود و سه عملکرد اصلی دارد:

1️⃣ راه‌اندازی و ایجاد اتصال

  • زمانی که لبه پایین به بالا در REQ تشخیص داده شود و هنوز اتصال برقرار نشده باشد، TSEND_C اتصال را راه‌اندازی می‌کند.
  • اتصال به صورت خودکار توسط CPU نگهداری و مانیتور می‌شود.
  • برای ایجاد اتصال، پارامتر CONNECT مشخص می‌کند که اتصال چگونه برقرار شود.
  • اگر CPU در حالت STOP قرار گیرد، اتصال قطع می‌شود و برای راه‌اندازی مجدد باید دستور TSEND_C دوباره اجرا شود.

2️⃣ ارسال داده از طریق اتصال موجود

  • ارسال داده زمانی شروع می‌شود که لبه بالا رونده در REQ رخ دهد.
  • ناحیه داده‌ای که باید ارسال شود با پارامتر DATA مشخص می‌شود (آدرس و طول داده).
    • توجه: داده‌های BOOL یا آرایه BOOL قابل استفاده نیستند.
    • اگر از نام نمادین (symbolic) در DATA استفاده شود، مقدار LEN باید 0 باشد.
  • داده‌ها تا پایان عملیات نباید تغییر کنند.
  • مقدار LEN حداکثر تعداد بایت ارسالی در یک job را مشخص می‌کند.

3️⃣ قطع اتصال

  • اتصال بعد از ارسال داده قطع می‌شود اگر CONT = 0 در زمان لبه بالا رونده REQ باشد.
  • اگر CONT = 1، اتصال حفظ می‌شود.
  • وقتی ارسال موفقیت‌آمیز باشد، DONE = 1 می‌شود.
    • توجه: DONE = 1 تضمین نمی‌کند که داده‌ها توسط طرف مقابل خوانده شده‌اند.

4️⃣ بازنشانی دستور (COM_RST)

  • با COM_RST = 1، دستور TSEND_C بازنشانی می‌شود و اتصال یا انتقال داده فعلی قطع و دوباره برقرار می‌گردد.
  • اگر در زمان بازنشانی داده در حال انتقال باشد، امکان از دست رفتن داده وجود دارد.


💡 نکته مهندسی:
پس از پایان یک job (DONE = 1)، برای اجرای دوباره TSEND_C، یک بار REQ = 0 بدهید تا آماده عملیات بعدی شود.



عملکرد TRCV_C

دستور TRCV_C به صورت غیرهمزمان (asynchronous) اجرا می‌شود و سه عملکرد اصلی دارد:

1️⃣ راه‌اندازی و ایجاد اتصال

  • زمانی که EN_R = 1 باشد و اتصال موجود نباشد، TRCV_C اتصال را راه‌اندازی می‌کند.
  • اتصال به صورت خودکار توسط CPU نگهداری و مانیتور می‌شود.
  • اتصال با استفاده از پارامتر CONNECT و بسته به پروتکل زیر تنظیم می‌شود:
    • TCP / UDP: TCON_IP_V4
    • ISO-on-TCP: TCON_IP_RFC
    • TCP امن: TCON_IP_V4_SEC
    • TCP (FQDN): TCON_QDN / TCON_QDN_SEC
  • اگر CPU در حالت STOP قرار گیرد، اتصال قطع می‌شود و برای راه‌اندازی مجدد باید دوباره TRCV_C با EN_R = 1 اجرا شود.
  • اگر EN_R = 0 قبل از برقراری اتصال باشد، اتصال ایجاد می‌شود اما داده‌ای دریافت نمی‌شود (DONE = 0).

2️⃣ دریافت داده

  • دریافت داده زمانی فعال می‌شود که EN_R = 1 باشد.
  • داده‌های دریافتی در ناحیه receive ذخیره می‌شوند.
  • طول ناحیه دریافت با پارامتر LEN یا طول پارامتر DATA مشخص می‌شود.
    • اگر از نام نمادین (symbolic) استفاده شود، LEN باید 0 باشد.
  • اگر EN_R = 0 قبل از اولین دریافت داده باشد، اتصال برقرار می‌ماند اما داده‌ای دریافت نمی‌شود.

3️⃣ قطع اتصال

  • اتصال پس از دریافت داده قطع می‌شود اگر CONT = 0 در زمان شروع اتصال باشد.
  • در غیر این صورت، اتصال حفظ می‌شود.
  • وقتی دریافت داده موفقیت‌آمیز باشد، DONE = 1 می‌شود.
  • اگر COM_RST فعال شود، TRCV_C بازنشانی می‌شود و در صورت دریافت داده در حال انتقال، امکان از دست رفتن داده وجود دارد.

5️⃣ نکته مهم

  • TRCV_C همان حالت‌های دریافت TRCV را پشتیبانی می‌کند.
  • داده تا زمانی که اندازه کامل ناحیه DATA / LEN دریافت نشده باشد، در buffer نمایش داده نمی‌شود.