پیکربندی S7-1200 Modbus TCP/IP برای انتقال داده‌ به DCS

پیکربندی S7-1200 Modbus TCP/IP برای انتقال داده‌ به DCS

پیکربندی PLC زیمنس SIMATIC S7-1200 (در این مثال CPU 1214C با یک سیستم کنترل توزیع‌شده (DCS) از طریق اترنت)، معمولاً با استفاده از پروتکل Modbus TCP/IP انجام می‌شود؛ زیرا بیشتر پلتفرم‌های DCS در سطح کنترلر یا ایستگاه I/O، یک سرور Modbus TCP ارائه می‌دهند.

در سمت S7-1200، از دستورالعمل MB_CLIENT موجود در کتابخانه SIMATIC Modbus TCP برای خواندن دوره‌ای رجیسترهای Holding از DCS استفاده می‌شود. همچنین از دستور MB_SERVER برای در اختیار گذاشتن رجیسترهای Holding PLC برای DCS استفاده می‌شود تا DCS بتواند مقادیر PLC را نیز بخواند.

عملیات Force کردن بیت‌های M یک روش سریع برای بررسی ارتباط است، زیرا هر بیت می‌تواند مانند یک Coil نگاشت شود. اما مقادیر آنالوگ باید قبل از نمایش صحیح در DCS، با ساختار Word مناسب و ترتیب صحیح Byteها به ناحیه داده MB_SERVER منتقل شوند.

این مرجع، روند کامل راه‌اندازی را توضیح می‌دهد:

  • برنامه‌ریزی IP
  • پیکربندی پروژه در TIA Portal
  • برنامه‌نویسی MB_CLIENT و MB_SERVER
  • مقیاس‌بندی سیگنال‌های آنالوگ
  • نگاشت رجیسترها در DCS
  • مدیریت وضعیت و خطاها
  • فرآیند تأیید عملکرد قبل از راه‌اندازی نهایی

باید توجه داشت

دستورالعمل‌های توضیح داده‌شده مربوط به کتابخانه باز SIMATIC Modbus TCP برای S7-1200 با Firmware نسخه V4.0 و بالاتر است.

نسخه‌های قدیمی‌تر Firmware (V1.0 تا V3.0) به کتابخانه متفاوتی نیاز دارند و تعداد ارتباطات کمتری پشتیبانی می‌کنند.

قبل از انتخاب بلوک‌ها، نسخه Firmware را از مسیر زیر در TIA Portal بررسی کنید:

Online → Accessible devices

پرسش‌های متداول

  • چرا S7-1200 زمانی که بیت‌های M را Force می‌کنم ارتباط دارد اما تگ‌های آنالوگ کار نمی‌کنند؟
  • چند نمونه MB_CLIENT و MB_SERVER می‌توان روی یک CPU 1214C اجرا کرد؟
  • معنی STATUS برابر با 16#80C8 در MB_CLIENT چیست؟
  • آیا برای Modbus TCP در S7-1200 به ماژول CP 1243 نیاز دارم؟
  • چرا DCS مقدار تگ Float 32 بیتی را با جابه‌جایی Word بالا و پایین نمایش می‌دهد؟
  • آیا دو CPU از نوع S7-1200 می‌توانند از طریق Modbus TCP با هم تبادل داده داشته باشند؟

پیش‌نیازها و سازگاری

توضیحاتمشخصات
Firmware نسخه V4.2 یا بالاتر توصیه می‌شودS7-1214C DC/DC/DC یا DC/DC/RLYCPU
رفتار MB_CLIENT و MB_SERVER یکسان است؛ نسخه V4.4 به بعد عیب‌یابی بهتری داردV4.2، V4.3، V4.4، V4.5Firmware
کتابخانه SIMATIC Modbus TCP نسخه 4.0 به بالاV15.1، V16، V17، V18، V19TIA Portal
برای CPU 1214C نیازی به ماژول CP نیستپورت PROFINET CPUرابط اترنت
از مسیر CPU Properties → Communication → Connection resources تنظیم می‌شودحداقل ۱ برای MB_CLIENT و ۱ برای MB_SERVERارتباطات باز
هر سیستم باید دستگاه یا کارت I/O با Modbus TCP/IP فعال داشته باشدABB 800xA، Honeywell Experion، Emerson DeltaV، Yokogawa CENTUM VP، Schneider EBOسیستم DCS
استفاده از VLAN یا جداسازی پورت‌ها بین شبکه PLC و DCS توصیه می‌شودسوئیچ اترنت مدیریتی، حداقل سرعت 100 Mbit/sشبکه

قبل از نوشتن برنامه، موارد زیر را بررسی کنید:

  • تعداد Connectionهای باز در S7-1200از مسیر:CPU Properties → Communication → Connection resources

باید توجه داشت که ارتباطات PG/OP، HMI و S7 Routing نیز از همین منابع استفاده می‌کنند.

  • رجیسترهای Holding موجود در Gateway مربوط به DCS ،در محدوده استاندارد 40001 تا 49999 یا محدود توسعه یافته 400001 تا 465536
  • ترتیب بایت و Word در DCS

این موضوع تعیین می‌کند که آیا در سمت S7-1200 نیاز به جابه‌جایی Byte یا Word وجود دارد یا خیر.

معماری شبکه و IP

توپولوژی معمول معمولاً به این صورت است که S7-1200 و کنترلر DCS )یا Gateway مربوط به (Modbus آن در یک زیرشبکه IP یکسان قرار می‌گیرند.

برای یک PLC منفرد، اتصال نقطه‌به‌نقطه (Point-to-Point) قابل قبول است؛ اما برای چند PLC استفاده از یک سوئیچ مدیریتی کوچک توصیه می‌شود.

جدول نمونه پیکربندی شبکه:

آدرس IPSubnet Maskپورتنقشتجهیز
192.168.10.11255.255.255.0502سرور Modbus TCP (MB_SERVER) برای خواندن توسط DCS؛ کلاینت برای ارسال داده به DCSS7-1214C (CPU 1)
192.168.10.12255.255.255.0502مشابه CPU 1، تبادل داده Peer-to-PeerS7-1214C (CPU 2)
192.168.10.200255.255.255.0502سرور Modbus TCP، منبع اصلی دادهModbus Gateway مربوط به DCS
192.168.10.50255.255.255.0–TIA Portal / ابزار مهندسی DCSEngineering Station

نکته مربوط به تداخل پورت

پروتکل Modbus TCP به‌صورت پیش‌فرض از پورت TCP شماره 502 استفاده می‌کند.

اگر چند CPU از نوع S7-1200 در یک پروژه نیاز داشته باشند که هم‌زمان نقش MB_CLIENT و MB_SERVER داشته باشند، موارد زیر باید رعایت شود:

  • هر نمونه (Instance) باید دارای Connection ID یکتا باشد.
  • تنها یک تجهیز روی یک CPU باید روی پورت 502 به‌عنوان Listener فعال باشد.
  • بلوک MB_CLIENT یک ارتباط خروجی به پورت 502 تجهیز مقابل ایجاد می‌کند.
  • فقط MB_SERVER روی پورت محلی 502 منتظر دریافت ارتباط می‌ماند.

پیکربندی پروژه در TIA Portal

مراحل تنظیم پروژه:

مرحله 1

یک پروژه جدید ایجاد کنید یا پروژه‌ای که شامل ایستگاه S7-1214C است را باز کنید.

مرحله 2

در درخت پروژه، CPU را انتخاب کنید و مسیر زیر را باز کنید:

Properties → PROFINET interface [X1] → Ethernet addresses

در این بخش موارد زیر را وارد کنید:

  • آدرس IP
  • Subnet Mask

همچنین بررسی کنید که نام دستگاه PROFINET تنظیم شده باشد.

توجه اگر فقط از Modbus TCP استفاده می‌کنید و PROFINET کاربردی ندارد، نام دستگاه PROFINET الزامی نیست.

مرحله 3

مسیر زیر را باز کنید:

Properties → Communication → Connection resources

تعداد ارتباطات باز Modbus TCP را حداقل روی مقدار 2 قرار دهید:

  • یک ارتباط برای MB_CLIENT
  • یک ارتباط برای MB_SERVER

مرحله 4

اگر کتابخانه Modbus TCP نصب نیست مسیر زیر را باز کنید:

Options → Manage libraries

جستجو کنید SIMATIC Modbus TCP سپس نسخه سازگار با TIA Portal خود را نصب کنید. مثلا

  • V4.0 برای TIA Portal V16
  • V6.0 برای TIA Portal V18

مرحله 5

در پروژه مسیر زیر را باز کنید:

Program blocks → System blocks → Communication

بلوک‌های زیر را به پروژه اضافه کنید:

  • MB_CLIENT
  • MB_SERVER

کتابخانه Modbus TCP به صورت یک Global Library ارائه می‌شود و شامل موارد زیر است:

  • دو Function Block:
    • MB_CLIENT
    • MB_SERVER
  • DBهای Instance که به‌صورت خودکار ایجاد می‌شوند.
  • یک DB برای محدوده داده‌های سرور.
  • UDTهای مربوط به پارامترهای ارتباطی.

پیکربندی سخت‌افزار S7-1214C

برای پیکربندی موردنظر) دو CPU مدل 1214C که با یکدیگر تبادل داده دارند و به DCS متصل هستند(، سیگنال‌های آنالوگ ورودی PLC معمولاً از یکی از ماژول‌های زیر دریافت می‌شوند:

  • SM 1234 Analog Input
  • SM 1231 RTD/TC

یک پیکربندی استاندارد:

ماژولمحدوده آدرس پیش‌فرضکاربردSlot
CPU 1214Cنداردپردازنده0
SM 1231 AI4 × 13-bitIW64 تا IW70سیگنال‌های فیلد 4-20mA1
SM 1232 AQ2 × 14-bitQW64 تا QW66خروجی آنالوگ اختیاری به DCS2
SM 1234 DI8/DO8I0.0 تا Q1.7وضعیت‌های دیجیتال (Coils)3

نکته مهم درباره ورودی‌های آنالوگ

ورودی آنالوگ (Analog Input Words) مقدار خام (Raw Count) را برمی‌گردانند:

برای سیگنال Unipolar: 0 تا 27648

برای سیگنالBipolar : -27648 تا +27648

این مقادیر خام باید قبل از انتقال به محدوده Holding Register مربوط به Modbus، به واحد مقدار معنادار تبدیل شوند. مثلا

  • 0 تا 100 درصد
  • دمای -50 تا +150 درجه سانتی‌گراد

در غیر این صورت اپراتور DCS فقط مقادیر خام غیرقابل‌معنا مشاهده خواهد کرد.

برنامه‌نویسی MB_SERVER

دستورالعمل MB_SERVER درخواست‌های Modbus TCP که از سمت DCS ارسال می‌شوند را پاسخ می‌دهد.

DCS از کدهای تابع Modbus زیر برای تبادل داده با PLC استفاده می‌کند:

  • Function Code 3: : Read Holding Registers برای خواندن رجیسترهای نگهدارنده
  • Function Code 6: : Write Single Register برای نوشتن یک رجیستر
  • Function Code 16: : Write Multiple Registers برای نوشتن چند رجیستر

تمام این عملیات روی Data Block مشخص‌شده در پارامتر DATA_PTR مربوط به MB_SERVER انجام می‌شود.

ایجاد Data Block مربوط به Modbus Server

یک Data Block سراسری (Global DB) با نام: DB_Modbus_Server ایجاد کنید. این DB باید حداقل شامل 200 (WORD) فضای Holding Register باشد. می‌توانید از ساختار زیر استفاده کنید:

ARRAY[0..199] OF WORD

یا اینکه هر Word را به‌صورت جداگانه با نام مشخص تعریف کنید.

نمونه ساختار رجیسترها

SymbolTypeSourceDescriptionOffset
HR_Tank1_LevelWORD (INT)Scaled from IW64سطح مخزن 1، مقدار 0-10000 معادل 0.00 تا 100.00 درصدDBW0
HR_Tank1_TempWORD (INT)Scaled from IW66دمای مخزن 1، مقدار -500 تا +1500 معادل -50.0 تا +150.0 درجه سانتی‌گرادDBW2
HR_Pump_RunWORDBit-packed statusوضعیت پمپ‌هاDBW4
HR_Setpoint_FlowWORD (INT)From DCS via writeمقدار تنظیم جریان از DCSDBW6

توضیح رجیستر

در رجیستر HR_Pump_Run اطلاعات دیجیتال به‌صورت Bit Packing ذخیره می‌شوند. مثلا:

  • Bit 0 = پمپ شماره 1 روشن است
  • Bit 1 = پمپ شماره 2 روشن است

فراخوانی MB_SERVER در OB1

نمونه برنامه به زبان SCL

// MB_SERVER instance data block

“MB_SERVER_DB”(

MODE := 1, // 1 = TCP/IP, 0 = reserved

DATA_PTR := “DB_Modbus_Server”, // Pointer to holding register area

DATA_LENGTH:= 200, // Number of WORDs to expose

CONNECT := “MB_Server_Connect”, // UDT connection parameter

DONE => “tags”.Server_Done,

BUSY => “tags”.Server_Busy,

ERROR => “tags”.Server_Error,

STATUS => “tags”.Server_Status);

تنظیمات UDT مربوط به MB_Server_Connect

ساختار ارتباطی باید با مقادیر زیر تنظیم شود:

InterfaceId : مقدار: 64، معرف رابط داخلی PROFINET CPU است.

Id : مقدار: 1 ، شناسه ارتباط است و باید یکتا باشد. اگر چند ارتباط دارید، هرکدام باید ID متفاوت داشته باشند.

ConnectionType: مقدار: 16#0B:، TCP Connection

ActiveEstablished: مقدار: FALSE، زیرا PLC در نقش Server منتظر ایجاد ارتباط از سمت DCS می‌ماند.

RemoteAddress: آدرس IP سیستم DCS:، مثلا: 192.168.10.200

RemotePort: مقدار: 502 ، پورت استاندارد Modbus TCP

LocalPort: مقدار:502 ، پورت محلی PLC برای گوش دادن به درخواست‌های Modbus

برنامه‌نویسی MB_CLIENT

دستور MB_CLIENT اجازه می‌دهد S7-1200 اطلاعاتی را از DCS دریافت کند و در منطق کنترلی محلی استفاده کند.

مثال کاربردها:

  • دریافت Setpoint از DCS
  • دریافت فرمان‌های کنترلی
  • استفاده در Interlockها

در این حالت:

  • DCS نقش Modbus Server را دارد.
  • PLC نقش Modbus Client را دارد.

زمان‌بندی Polling

برای متغیرهای کند فرآیندی ، زمان مناسب200تا500ms است. برای حلقه‌های کنترلی سریع توصیه نمی‌شود، زیرا Modbus TCP دارای تأخیر متغیر است.

نمونه فراخوانی MB_CLIENT در SCL

// Trigger MB_CLIENT once per cycle from a cyclic interrupt OB

“MB_Client_DB”(

REQ := “tags”.Poll_Trigger, // Rising edge starts a transaction

DISCONNECT := FALSE,

CONNECT := “MB_Client_Connect”,

MB_MODE := 0, // 0 = Read, 1 = Write

MB_DATA_ADDR:= 40001, // Modbus address of first register

MB_DATA_LEN := 10, // Number of registers to read

DATA_PTR := “DB_DCS_Input”, // Destination buffer

DONE => “tags”.Client_Done,

BUSY => “tags”.Client_Busy,

ERROR => “tags”.Client_Error,

STATUS => “tags”.Client_Status);

تفاوت تنظیمات MB_Client_Connect با Server

پارامترهای UDT کلاینت تقریباً مشابه سرور هستند، اما سه مورد تفاوت دارند:

ActiveEstablished : در Clientمقدار TRUE میگیرد زیرا PLC شروع‌کننده ارتباط است.

RemoteAddress: آدرس IP مربوط به DCS، مثلا: 192.168.10.200

RemotePort: مقدار: 502

LocalPort: مقدار: 0، سیستم‌عامل یک پورت موقت (Ephemeral Port) اختصاص می‌دهد.

مدیریت داده‌های آنالوگ و Scaling

داده‌های آنالوگ هنگام عبور از مرز Modbus به‌صورت عدد صحیح علامت‌دار 16 بیتی منتقل می‌شوند. PLC مدل S7-1200 مقادیر نوع INT را با ترتیب بایت Little-Endian ذخیره می‌کند(بایت کم‌ارزش ابتدا قرار می‌گیرد Low Byte First ). این ترتیب با استاندارد Modbus مطابقت دارد.

بیشتر سیستم‌های DCS نیز برای Wordهای 16 بیتی از همین ترتیب استفاده می‌کنند، اما هنگام ساخت مقادیر REAL 32 بیتی از دو Word، ممکن است ترتیب Wordها متفاوت باشد. این موضوع رایج‌ترین دلیل مشاهده مقدار اشتباه در زمان راه‌اندازی سیستم است.

تبدیل ورودی آنالوگ خام به واحد مهندسی

ورودی‌های آنالوگ S7-1200 مقدار خام (Raw Value) تولید می‌کنند. محدوده استاندارد:

ورودی Unipolar

مثلا:

4 تا 20mA با محدوده 0 تا 27648

محدوده خروجی 0 تا 10000 که در DCS به شکل 0.00 تا 100.00 %نمایش داده می‌شود.

فرمول Scaling برای 4-20mA

Temp_Real := (INT_TO_REAL(AI_Raw) / 27648.0) * 10000.0;

HR_Tank1_Level := REAL_TO_INT(Temp_Real);

توضیح:

  • ابتدا مقدار خام INT به REAL تبدیل می‌شود.
  • سپس نسبت آن به محدوده کامل ورودی محاسبه می‌شود.
  • در 10000 ضرب می‌شود تا مقدار قابل ارسال به Modbus ساخته شود.
  • در نهایت دوباره به INT تبدیل می‌شود.

مثال:

اگر ورودی آنالوگ مقدار13824 داشته باشد، آنگاه:

13824 / 27648 = 0.5

0.5 × 10000 = 5000

Scaling ورودی Bipolar

مثلا:

ورودی -10V تا +10V با محدوده خام -27648 تا +27648 که معادل است با -500 تا .+1500 این مقدار معادل -50.0 تا +150.0°C

فرمول:

Temp_Real := (INT_TO_REAL(AI_Raw) / 27648.0) * 100.0 + 50.0;

HR_Tank1_Temp := REAL_TO_INT(Temp_Real);

// Unipolar 4-20 mA scaled to 0.0-100.0 % (1 decimal place)

// Raw input range: 0 to 27648

// Output range: 0 to 10000

Temp_Real := (INT_TO_REAL(AI_Raw) / 27648.0) * 10000.0;

HR_Tank1_Level := REAL_TO_INT(Temp_Real);

// Bipolar -10 to +10 V scaled to -50.0 to +150.0 °C (1 decimal place)

// Raw input range: -27648 to +27648

// Output range: -500 to +1500

Temp_Real := (INT_TO_REAL(AI_Raw) / 27648.0) * 100.0 + 50.0;

HR_Tank1_Temp := REAL_TO_INT(Temp_Real);

انتقال مقدار REAL 32 بیتی به Modbus

برای مقادیری مانند:

  • دبی
  • فشار
  • سرعت
  • توان

که نیاز به اعشار دارند، معمولاً از نوع REAL (32-bit Floating Point) استفاده می‌شود. اما Modbus فقط رجیسترهای 16-bit را منتقل می‌کند. بنابراین مقدار REAL باید به دو Word شانزده‌بیتی تقسیم شود.

تبدیل REAL به دو رجیستر 16 بیتی

الگوی استاندارد زیمنس:

// REAL to two 16-bit registers (big-endian word order for DCS compatibility)

Temp_DWord := REAL_TO_DWORD(Flow_SP);

HR_Flow_High := DWORD_TO_INT(SHR(IN:=Temp_DWord, N:=16)); // High word first

HR_Flow_Low := DWORD_TO_INT(Temp_DWord AND 16#0000FFFF); // Low word second

توضیح ابتدا REAL به DWORD تبدیل می‌شود. سپس Word بالا (High Word) از 16 بیت بالایی جدا می‌شود. Word پایین (Low Word) از 16 بیت پایینی استخراج می‌شود.

نکته مهم درباره ترتیب Wordها در DCS

همیشه باید بررسی شود که Gateway یا DCS چه ترتیبی برای مقدار 32 بیتی انتظار دارد. دو حالت وجود دارد:

حالت اول: High Word First مثلاً ABB 800xAو Emerson DeltaV

حالت دوم: Low Word First مثلاً Honeywell Experion و Siemens

اگر این ترتیب اشتباه باشد، نتیجه معمولاً یکی از موارد زیر است:

  • عدد بسیار بزرگ
  • مقدار منفی غیرواقعی
  • مقدار صفر
  • مقدار تصادفی

بنابراین قبل از راه‌اندازی نهایی باید در تنظیمات DCS مشخص شود که ترتیب Wordها چگونه است.

وضعیت‌ بیت های دیجیتال

Force کردن بیت‌های M برای تست اولیه ارتباط یک روش رایج است، اما در برنامه نهایی بهتر است وضعیت‌های دیجیتال به شکل صحیح به Modbus نگاشت شوند.

دو روش وجود دارد:

استفاده از Coil Addressها:

Function Code 1 ، Function Code 5 ، Function Code 15

قرار دادن چند وضعیت دیجیتال داخل بیت‌های یک Holding Register. این معمولاً برای سیستم‌های صنعتی رایج‌تر است.

 

// Pack digital status into HR_Pump_Status

“DB_Modbus_Server”.HR_Pump_Status := 0;

IF “I0.0” THEN “DB_Modbus_Server”.HR_Pump_Status := “DB_Modbus_Server”.HR_Pump_Status OR 16#0001; END_IF; // Bit 0 = Pump 1 running

IF “I0.1” THEN “DB_Modbus_Server”.HR_Pump_Status := “DB_Modbus_Server”.HR_Pump_Status OR 16#0002; END_IF; // Bit 1 = Pump 2 running

این روش باعث می‌شود:

  • ساختار Data Block ثابت و قابل پیش‌بینی باشد.
  • مشکلاتی مانند:
    «فقط وقتی M0.0 را Force می‌کنم کار می‌کند»
    در زمان یکپارچه‌سازی کاهش پیدا کند.

پیکربندی سمت DCS

مراحل تنظیمات در DCSهای مختلف ممکن است متفاوت باشد، اما روند کلی تقریباً یکسان است.

مرحله 1: تعریف تجهیز Modbus TCP

در سیستم DCS یک تجهیز جدید از نوع Modbus TCP/IP Device ایجاد کنید.

پارامترهای اصلی:

IPمربوط به S7-1200: 192.168.10.11

پورت: 502

زمان Polling: 250 ms

تنظیم شود.

مرحله 2: Mapping رجیسترها

برای هر Holding Register یک Tag در DCS ایجاد کنید.

معمولاً قرارداد نام‌گذاری در DCS به شکل 4xxxx اسن که:

  • 4 نشان‌دهنده Holding Register است.
  • xxxx شماره رجیستر است.

مثال بر اساس ساختار ایجادشده در PLC:

آدرس ModbusTag در DCSتوضیح
40001Tank1_Levelسطح مخزن 1
40002Tank1_Tempدمای مخزن 1
40003Pump_Statusوضعیت پمپ
40004Setpoint_Flowمقدار تنظیم جریان

مرحله 3: تنظیم Scaling در DCS

اکثر سیستم‌های DCS امکان Scaling خطی برای هر Tag را دارند.

مثال 1: سطح مخزن

مقدار ارسال‌شده از PLC: 0 تا 10000

نمایش مهندسی در DCS: 0.00 تا 100.00 %

تنظیم Scaling:

Input:

0 – 10000

Output:

0.00 – 100.00 %

مثال 2: دمای مخزن

مقدار ارسال‌شده: -500 تا +1500

نمایش در DCS: -50.0 تا +1500°C

تنظیم Scaling:

Input:

-500 تا +1500

Output:

-50.0 تا +150.0 °C

مرحله 4: تنظیم دسترسی نوشتن (Write Access)

رجیسترهایی که از سمت DCS به PLC نوشته می‌شوند، مانند:

Setpoint

Command

Reference

باید قابلیت Write داشته باشند.

مثال: Flow Setpoint باید از Faceplate اپراتوری DCS قابل تغییر باشد.

موارد زیر باید در سمت DCS تنظیم شوند:

  • مجوز نوشتن (Write Permission)
  • محدودیت‌های مهندسی (Engineering Limits)
  • محدودیت سرعت تغییر مقدار (Rate of Change Clamp)

این محدودیت‌ها بهتر است در سمت DCS اعمال شوند، نه در PLC.

مرحله 5: اختصاص به Graphic / Faceplate

پس از ایجاد Tagها:

  • Tag مقیاس‌شده را به نمایشگر اپراتوری اختصاص دهید.
  • آن را به Graphic یا Faceplate مربوطه متصل کنید.

مثال:

نمایش Tank Level با مقدار 75.50 %

نمایش Tank Temperature با مقدار85.0 °C

کدهای Status, Error and Diagnostic Codes

بلوک‌های:

  • MB_CLIENT
  • MB_SERVER

یک word وضعیت 16 بیتی با نامSTATUS ارائه می‌کنند.

این مقدار باید همیشه به یک Tag متصل شود و در زمان راه‌اندازی در یک Watch Table مانیتور شود.

کدهای متداول STATUS

STATUS (Hex)معنیاقدام پیشنهادی
16#0000بدون خطاعملکرد عادی
16#7001اولین فراخوانی، BUSY=1منتظر DONE یا ERROR بمانید
16#7002فراخوانی بعدی، BUSY=1منتظر DONE یا ERROR بمانید
16#7003ارتباط برقرار شدهفقط اطلاع‌رسانی

کد خطا

16#8188

به معنیInvalid MODE parameter، پارامتر MODE اشتباه است بررسی کنید:

MODE = 0 → Read

MODE = 1 → Write

16#8380

به معنیInvalid DATA_PTR، اشاره‌گر داده اشتباه است. بررسی کنید:

DBوجود داشته باشد.

DBاز نوع Standard Access باشد.

طول داده صحیح باشد.

16#8381

به معنی Invalid MB_DATA_LEN ، طول داده اشتباه است. محدودیت برای خواندن 1 تا 125Word برای نوشتن 1 تا 123Word

16#8382

به معنی Invalid MB_DATA_ADDR ، آدرس Modbus اشتباه است. محدوده مجاز1 تا 65535 برای Holding Register

16#8383

به معنی Invalid MB_MODE ، بررسی کنید پارامتر MODE صحیح باشد.

16#8388

به معنی Connection ID in use ، شناسه ارتباط قبلاً استفاده شده است. راه‌حل برای هر بلوک فعال یک ID متفاوت انتخاب کنید.

16#8390

به معنی CONNECT parameter error ، خطا در پارامترهای UDT اتصال. بررسی مقادیر UDT را با تنظیمات مرجع مقایسه کنید.

خطاهای ارتباطی Modbus TCP

STATUS = 16#80C8

به معنی No response from server ،عدم دریافت پاسخ از سرور این خطا یکی از رایج‌ترین خطاها در راه‌اندازی Modbus TCP است.

علت‌های احتمالی:

  • مشکل شبکه
  • اشتباه بودن IP
  • بسته بودن پورت 502
  • خاموش بودن Modbus Server
  • وجود نداشتن آدرس رجیستر درخواست‌شده
  • بزرگ‌تر بودن MB_DATA_LEN از محدوده رجیسترهای سرور

اقدامات پیشنهادی:

  • بررسی کابل شبکه
  • Ping گرفتن از تجهیز مقابل
  • بررسی IP و Subnet
  • بررسی فعال بودن MB_SERVER در سمت مقابل
  • بررسی محدوده Holding Registerها

STATUS = 16#80D1

به معنی TCP connection refused ،اتصال TCP رد شده است.

علت:

دستگاه مقابل اتصال را قبول نکرده است.

بررسی کنید:

  • پورت Remote درست باشد.
  • سرویس Modbus Server در دستگاه مقابل فعال باشد.
  • تجهیز مقابل در حالت Run باشد.

STATUS = 16#80D2

به معنی TCP connection timeout ،اتمام زمان انتظار اتصال TCP.

علت‌های احتمالی:

  • تأخیر زیاد شبکه
  • مشکل Routing
  • قطع و وصل شبکه
  • تنظیمات اشتباه Gateway

راهکار:

  • بررسی مسیر شبکه
  • بررسی زمان Polling
  • بررسی کیفیت لینک Ethernet

STATUS = 16#80D4

به معنی General TCP error ،خطای عمومی TCP

بررسی کنید:

  • کابل شبکه
  • وضعیت Link پورت Ethernet
  • سوئیچ شبکه
  • آدرس‌دهی IP
  • کیفیت ارتباط

مشکلات رایج اتصالات و شبکه

کابل و Crossover

پورت‌های Ethernet جدید معمولاً قابلیت Auto-Negotiation دارند.بنابراین اتصال مستقیم PLC به سوئیچ DCS معمولاً مشکلی ایجاد نمیکند اما کابل مسی رشته‌ای با طول بیشتر از 80 متر ممکن است باعث خطا شود.

توصیه:

  • استفاده از کابل شبکه Solid Core برای مسیرهای ثابت
  • استفاده از Patch Cord کوتاه‌تر از 10 متر

جداسازی VLAN

اگر شبکه کنترل DCS در VLAN جداگانه باشد باید یکی از موارد زیر انجام شود:

  • تنظیم IP Routing
  • استفاده از Modbus Gateway با IP قابل Route

نکته:

Modbus TCP بدون تنظیمات اضافی، به‌صورت مناسب از NAT عبور نمی‌کند. در صورت استفاده از NAT باید Port Forwarding انجام شود.

Firewall

در بسیاری از استانداردهای امنیتی DCS، پورت 502 بین شبکه کنترل و شبکه سازمانی بسته می‌شود.اقدام لازم با مسئول شبکه DCS هماهنگ کنید تا مسیر ارتباطی Modbus TCP باز شود.

پورت موردنیاز: TCP 502

تمام شدن منابع Connection

هر ارتباط Modbus TCP باز، یک Connection Resource از CPU S7-1200 مصرف می‌کند. CPU 1214Cتعداد محدودی ارتباط باز دارد. قبل از اضافه کردن Client یا Server جدید مسیر زیر بررسی شود:

CPU Properties

→ Communication

→ Connection resources

Optimized DB Access

بلوک‌های:

  • MB_CLIENT
  • MB_SERVER

نمی‌توانند با Optimized Data Block کار کنند. بنابراین DBهای زیر باید با حالت Standard Access ساخته شوند.

روش تأیید و راه‌اندازی سیستم (Verification and Commissioning Procedure)

مرحله 1: بررسی شبکه

از Engineering Station به تجهیزات زیر Ping بزنید:

  • S7-1200
  • Modbus Gateway مربوط به DCS

مقدار قابل قبول: Packet Loss < 0.1%

مرحله 2: بررسی وضعیت آنلاین بلوک‌ها

در TIA Portal: به CPU مدل S7-1214C متصل شوید و بیت Poll_Trigger را Force کنید. سپس وضعیت‌های زیر را بررسی کنید:

  • MB_Client_Done
  • MB_Client_Error
  • MB_Client_Status

در ارتباط سالم ابتدا STATUS = 16#7003 و سپس DONE = TRUE در هر سیکل نشان‌دهنده ارتباط صحیح است.

مرحله 3: تست Read Back

یک مقدار را در DB_DCS_Input وارد کنید. سپس بررسی کنید آیا همان مقدار توسط S7-1200 از طریق MB_CLIENT خوانده می‌شود؟

سپس برعکس یک مقدار در DCS بنویسید و بررسی کنید که در DB_DCS_Input ظاهر شود.

مرحله 4: تست کامل آنالوگ

یک سیگنال کالیبراتور اعمال کنید.

مثلا برای حلقه 4-20mA اگر 12.000 mA بود باید معادل 50% باشد.

بررسی کنید مقدار نمایش داده‌شده در DCS با محدوده مهندسی مستندشده مطابقت داشته باشد. تلورانس قابل قبول±0.1% است.

مرحله 5: تست جهت DCS به PLC

از Faceplate اپراتوری DCS یک Setpoint تغییر دهید. سپس بررسی کنید:

  • مقدار در Offset صحیح DB_Modbus_Server قرار گرفته باشد.
  • برنامه PLC به آن واکنش نشان دهد.

مرحله 6: تست خطا

کابل Ethernet مربوط به S7-1200 را جدا کنید. باید مشاهده شود در MB_CLIENT پارامتر ERROR = TRUE و STATUS = 16#80D4 در حداکثر در مدت 3 ثانیه تغییر کند.

مرحله 7: تست طولانی مدت

ارتباط را حداقل 24 ساعت فعال نگه دارید. داده STATUS را Trend کنید. اگر خطاهای لحظه‌ای بیشتر از1 بار در ساعت رخ دهد، معمولاً نشانه یکی از موارد زیر است:

  • نویز شبکه
  • Polling بیش از حد
  • بار زیاد ارتباطی

ماتریس عیب‌یابی (Troubleshooting Matrix)

این جدول برای شناسایی سریع مشکلات رایج هنگام ارتباط S7-1200 با DCS از طریق Modbus TCP استفاده می‌شود.

مشکل (Symptom)علت احتمالی (Likely Cause)بررسی (Check)راه‌حل (Fix)
DCS برای تمام مقادیر آنالوگ مقدار 0 یا 65535 نشان می‌دهدناسازگاری Byte Swap در مقدار REAL 32 بیتیرجیسترهای خام را در ابزار Diagnostic DCS مقایسه کنیدترتیب Wordها را در سمت PLC یا DCS مطابق استاندارد پلتفرم اصلاح کنید
دیجیتال‌ها کار می‌کنند ولی آنالوگ‌ها کار نمی‌کنندScaling انجام نشده استمقدار خام رجیستر را در DCS بررسی کنیدScaling خطی را در تعریف Tag در DCS تنظیم کنید
بیت‌های Force شده M منتقل می‌شوند ولی مقدار DB منتقل نمی‌شودDB دارای حالت Optimized Access استProperties مربوط به DB → Attributes را بررسی کنیدOptimized Block Access را غیرفعال کنید، Compile و Download مجدد انجام دهید
STATUS = 16#80C8 بعد از اولین Poll موفقمقدار MB_DATA_LEN بیشتر از Buffer سرور استطول درخواست را با DATA_LENGTH در MB_SERVER مقایسه کنیدMB_DATA_LEN را کاهش دهید یا DATA_LENGTH را افزایش دهید
ارتباط هر چند دقیقه قطع می‌شودناسازگاری Timeout مربوط به Keep-AliveSTATUS را برای 16#80D2 بررسی کنیدTCP Keep-Alive را در UDT اتصال فعال کنید یا زمان Polling را کاهش دهید
STATUS = 16#8188 بلافاصله ظاهر می‌شودDATA_PTR به DB ناموجود اشاره می‌کندشماره DB و وجود آن را بررسی کنیدDB ایجاد کنید یا Pointer را اصلاح کنید
DCS نمی‌تواند تجهیز را پیدا کندپورت 502 توسط Firewall بسته شده استاز PC مهندسی تست کنید: Telnet به IP و پورت 502Firewall را باز کنید، Routing VLAN را اصلاح کنید یا Gateway استفاده کنید
ارتباط بین دو CPU فقط در یک جهت کار می‌کندفقط یک سمت دارای MB_SERVER استوجود Instance مربوط به MB_SERVER در هر دو CPU بررسی شوددر CPU فاقد Server، MB_SERVER با DB مجزا ایجاد کنید

عملکرد و محدودیت‌ها (Performance and Limits)

حداکثر تعداد رجیستر در Modbus TCP

حداکثر داده قابل انتقال در یک درخواست برای خواندن 125 Register ، برای نوشتن 123 Register است. اگر حجم داده بیشتر باشد، باید انتقال به چند درخواست MB_CLIENT تقسیم شود.

زمان Polling

برای متغیرهای فرآیندی کند 250 تا 500ms مناسب است.

برای Interlockها و Alarmها 100 تا 200ms توصیه می‌شود.

برای زمان‌های کمتر از50ms بهتر است از پروتکل‌های سریع‌تر مانند PROFINET یا EtherNet/IP استفاده شود.

تعداد Connection در CPU 1214C

CPU 1214C با Firmware سری V4.x حداکثر8 Open User Connections پشتیبانی می‌کند. هر MB_CLIENT یا MB_SERVER یک Connection Resource مصرف می‌کند.

مثلا اگر 2 عدد MB_SERVER و 3 عدد MB_CLIENT داشته باشیم مصرف 5 Connection خواهد بود.

ارتباطات هم‌زمان MB_CLIENT

در یک Connection ID، درخواست‌های هم‌زمان MB_CLIENT پشتیبانی نمی‌شوند.

برای Pollingهای موازی باید Connection ID جداگانه و Instance DB جداگانه استفاده شود.

پرسش‌های متداول (FAQ)

چرا S7-1200 وقتی بیت‌های M را Force می‌کنم ارتباط دارد ولی Tagهای آنالوگ کار نمی‌کنند؟

بیت‌های M معمولاً به‌صورت مستقیم به Coil خوانده‌شده توسط DCS متصل می‌شوند و نیاز به Data Block ندارند اما داده‌های آنالوگ باید:

  1. در یک DB با حالت Standard Access قرار گیرند.
  2. توسط DATA_PTR مربوط به MB_SERVER معرفی شوند.
  3. به محدوده مهندسی مناسب Scaling شوند.
  4. با آدرس Holding Register صحیح در DCS Mapping شوند.

همچنین باید بررسی شود Scaling در DCS با محدوده INT در PLC هماهنگ باشد.

چند نمونه MB_CLIENT و MB_SERVER روی یک CPU 1214C قابل اجرا است؟

CPU 1214C در Firmware V4.x حداکثر8 Connection باز دارد. هر MB_CLIENT و MB_SERVER یک Connection مصرف می‌کند. همچنین باید برای موارد PG/OP و HMI فضای کافی باقی گذاشت.

معنی STATUS = 16#80C8 در MB_CLIENT چیست؟

یعنی No response from Modbus TCP server ، سرور Modbus TCP پاسخ نداده است. بررسی کنید:

  • IP مربوط به DCS Gateway صحیح باشد.
  • پورت 502 باز باشد.
  • Firewall ارتباط را مسدود نکرده باشد.
  • MB_DATA_ADDR در سرور وجود داشته باشد.
  • MB_DATA_LEN بیشتر از محدوده Holding Register نباشد.

آیا برای Modbus TCP در S7-1200 به CP 1243 نیاز است؟

خیر، پورت داخلی PROFINET در CPU 1214C از طریق کتابخانه SIMATIC Modbus TCP از Modbus TCP پشتیبانی می‌کند. ماژول CP در موارد زیر استفاده می‌شود.

  • رابط‌های اضافی
  • تبدیل Modbus RTU از طریق RS-485
  • امکانات امنیتی مانند Firewall/NAT در CP 1243-1

چرا DCS مقدار تگ Float 32 بیتی من را با جابه‌جایی Word بالا و پایین نشان می‌دهد؟

پروتکل Modbus TCP داده‌ها را به‌صورت Wordهای 16 بیتی منتقل می‌کند. اما یک مقدار REAL (32-bit Floating Point) نیاز به دو Word شانزده‌بیتی دارد. بنابراین باید مقدار REAL در PLC به دو قسمت تقسیم شود:

  • High Word
  • Low Word

مشکل اصلی این است که ترتیب قرار گرفتن این دو Word در سیستم‌های DCS مختلف متفاوت است.

آیا دو CPU از نوع S7-1200 می‌توانند از طریق Modbus TCP با یکدیگر تبادل داده داشته باشند؟

بله. دو CPU مدل S7-1200 می‌توانند با استفاده از Modbus TCP با یکدیگر ارتباط برقرار کنند. روش تنظیم CPU اول به‌عنوان MB_SERVER تنظیم می‌شود. CPU دوم به‌عنوان MB_CLIENT تنظیم می‌شود.