پیکربندی 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 منتقل شوند.
این مرجع، روند کامل راهاندازی را توضیح میدهد:
باید توجه داشت
دستورالعملهای توضیح دادهشده مربوط به کتابخانه باز SIMATIC Modbus TCP برای S7-1200 با Firmware نسخه V4.0 و بالاتر است.
نسخههای قدیمیتر Firmware (V1.0 تا V3.0) به کتابخانه متفاوتی نیاز دارند و تعداد ارتباطات کمتری پشتیبانی میکنند.
قبل از انتخاب بلوکها، نسخه Firmware را از مسیر زیر در TIA Portal بررسی کنید:
Online → Accessible devices
پرسشهای متداول
| توضیحات | مشخصات | |
|---|---|---|
| Firmware نسخه V4.2 یا بالاتر توصیه میشود | S7-1214C DC/DC/DC یا DC/DC/RLY | CPU |
| رفتار MB_CLIENT و MB_SERVER یکسان است؛ نسخه V4.4 به بعد عیبیابی بهتری دارد | V4.2، V4.3، V4.4، V4.5 | Firmware |
| کتابخانه SIMATIC Modbus TCP نسخه 4.0 به بالا | V15.1، V16، V17، V18، V19 | TIA 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 | شبکه |
قبل از نوشتن برنامه، موارد زیر را بررسی کنید:
باید توجه داشت که ارتباطات PG/OP، HMI و S7 Routing نیز از همین منابع استفاده میکنند.
این موضوع تعیین میکند که آیا در سمت S7-1200 نیاز به جابهجایی Byte یا Word وجود دارد یا خیر.
توپولوژی معمول معمولاً به این صورت است که S7-1200 و کنترلر DCS )یا Gateway مربوط به (Modbus آن در یک زیرشبکه IP یکسان قرار میگیرند.
برای یک PLC منفرد، اتصال نقطهبهنقطه (Point-to-Point) قابل قبول است؛ اما برای چند PLC استفاده از یک سوئیچ مدیریتی کوچک توصیه میشود.
جدول نمونه پیکربندی شبکه:
| آدرس IP | Subnet Mask | پورت | نقش | تجهیز |
|---|---|---|---|---|
| 192.168.10.11 | 255.255.255.0 | 502 | سرور Modbus TCP (MB_SERVER) برای خواندن توسط DCS؛ کلاینت برای ارسال داده به DCS | S7-1214C (CPU 1) |
| 192.168.10.12 | 255.255.255.0 | 502 | مشابه CPU 1، تبادل داده Peer-to-Peer | S7-1214C (CPU 2) |
| 192.168.10.200 | 255.255.255.0 | 502 | سرور Modbus TCP، منبع اصلی داده | Modbus Gateway مربوط به DCS |
| 192.168.10.50 | 255.255.255.0 | – | TIA Portal / ابزار مهندسی DCS | Engineering Station |
نکته مربوط به تداخل پورت
پروتکل Modbus TCP بهصورت پیشفرض از پورت TCP شماره 502 استفاده میکند.
اگر چند CPU از نوع S7-1200 در یک پروژه نیاز داشته باشند که همزمان نقش MB_CLIENT و MB_SERVER داشته باشند، موارد زیر باید رعایت شود:
مراحل تنظیم پروژه:
مرحله 1
یک پروژه جدید ایجاد کنید یا پروژهای که شامل ایستگاه S7-1214C است را باز کنید.
مرحله 2
در درخت پروژه، CPU را انتخاب کنید و مسیر زیر را باز کنید:
Properties → PROFINET interface [X1] → Ethernet addresses
در این بخش موارد زیر را وارد کنید:
همچنین بررسی کنید که نام دستگاه PROFINET تنظیم شده باشد.
توجه اگر فقط از Modbus TCP استفاده میکنید و PROFINET کاربردی ندارد، نام دستگاه PROFINET الزامی نیست.
مرحله 3
مسیر زیر را باز کنید:
Properties → Communication → Connection resources
تعداد ارتباطات باز Modbus TCP را حداقل روی مقدار 2 قرار دهید:
مرحله 4
اگر کتابخانه Modbus TCP نصب نیست مسیر زیر را باز کنید:
Options → Manage libraries
جستجو کنید SIMATIC Modbus TCP سپس نسخه سازگار با TIA Portal خود را نصب کنید. مثلا
مرحله 5
در پروژه مسیر زیر را باز کنید:
Program blocks → System blocks → Communication
بلوکهای زیر را به پروژه اضافه کنید:
کتابخانه Modbus TCP به صورت یک Global Library ارائه میشود و شامل موارد زیر است:
برای پیکربندی موردنظر) دو CPU مدل 1214C که با یکدیگر تبادل داده دارند و به DCS متصل هستند(، سیگنالهای آنالوگ ورودی PLC معمولاً از یکی از ماژولهای زیر دریافت میشوند:
یک پیکربندی استاندارد:
| ماژول | محدوده آدرس پیشفرض | کاربرد | Slot |
|---|---|---|---|
| CPU 1214C | ندارد | پردازنده | 0 |
| SM 1231 AI4 × 13-bit | IW64 تا IW70 | سیگنالهای فیلد 4-20mA | 1 |
| SM 1232 AQ2 × 14-bit | QW64 تا QW66 | خروجی آنالوگ اختیاری به DCS | 2 |
| SM 1234 DI8/DO8 | I0.0 تا Q1.7 | وضعیتهای دیجیتال (Coils) | 3 |
نکته مهم درباره ورودیهای آنالوگ
ورودی آنالوگ (Analog Input Words) مقدار خام (Raw Count) را برمیگردانند:
برای سیگنال Unipolar: 0 تا 27648
برای سیگنالBipolar : -27648 تا +27648
این مقادیر خام باید قبل از انتقال به محدوده Holding Register مربوط به Modbus، به واحد مقدار معنادار تبدیل شوند. مثلا
در غیر این صورت اپراتور DCS فقط مقادیر خام غیرقابلمعنا مشاهده خواهد کرد.
برنامهنویسی MB_SERVER
دستورالعمل MB_SERVER درخواستهای Modbus TCP که از سمت DCS ارسال میشوند را پاسخ میدهد.
DCS از کدهای تابع Modbus زیر برای تبادل داده با PLC استفاده میکند:
تمام این عملیات روی 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 را بهصورت جداگانه با نام مشخص تعریف کنید.
نمونه ساختار رجیسترها
| Symbol | Type | Source | Description | Offset |
|---|---|---|---|---|
| HR_Tank1_Level | WORD (INT) | Scaled from IW64 | سطح مخزن 1، مقدار 0-10000 معادل 0.00 تا 100.00 درصد | DBW0 |
| HR_Tank1_Temp | WORD (INT) | Scaled from IW66 | دمای مخزن 1، مقدار -500 تا +1500 معادل -50.0 تا +150.0 درجه سانتیگراد | DBW2 |
| HR_Pump_Run | WORD | Bit-packed status | وضعیت پمپها | DBW4 |
| HR_Setpoint_Flow | WORD (INT) | From DCS via write | مقدار تنظیم جریان از DCS | DBW6 |
توضیح رجیستر
در رجیستر HR_Pump_Run اطلاعات دیجیتال بهصورت Bit Packing ذخیره میشوند. مثلا:
فراخوانی 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 دریافت کند و در منطق کنترلی محلی استفاده کند.
مثال کاربردها:
در این حالت:
زمانبندی 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);
توضیح:
مثال:
اگر ورودی آنالوگ مقدار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
این روش باعث میشود:
پیکربندی سمت 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 اسن که:
مثال بر اساس ساختار ایجادشده در PLC:
| آدرس Modbus | Tag در DCS | توضیح |
|---|---|---|
| 40001 | Tank1_Level | سطح مخزن 1 |
| 40002 | Tank1_Temp | دمای مخزن 1 |
| 40003 | Pump_Status | وضعیت پمپ |
| 40004 | Setpoint_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 تنظیم شوند:
این محدودیتها بهتر است در سمت DCS اعمال شوند، نه در PLC.
مرحله 5: اختصاص به Graphic / Faceplate
پس از ایجاد Tagها:
مثال:
نمایش Tank Level با مقدار 75.50 %
نمایش Tank Temperature با مقدار85.0 °C
کدهای Status, Error and Diagnostic Codes
بلوکهای:
یک 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 را با تنظیمات مرجع مقایسه کنید.
STATUS = 16#80C8
به معنی No response from server ،عدم دریافت پاسخ از سرور این خطا یکی از رایجترین خطاها در راهاندازی Modbus TCP است.
علتهای احتمالی:
اقدامات پیشنهادی:
STATUS = 16#80D1
به معنی TCP connection refused ،اتصال TCP رد شده است.
علت:
دستگاه مقابل اتصال را قبول نکرده است.
بررسی کنید:
STATUS = 16#80D2
به معنی TCP connection timeout ،اتمام زمان انتظار اتصال TCP.
علتهای احتمالی:
راهکار:
STATUS = 16#80D4
به معنی General TCP error ،خطای عمومی TCP
بررسی کنید:
مشکلات رایج اتصالات و شبکه
کابل و Crossover
پورتهای Ethernet جدید معمولاً قابلیت Auto-Negotiation دارند.بنابراین اتصال مستقیم PLC به سوئیچ DCS معمولاً مشکلی ایجاد نمیکند اما کابل مسی رشتهای با طول بیشتر از 80 متر ممکن است باعث خطا شود.
توصیه:
جداسازی VLAN
اگر شبکه کنترل DCS در VLAN جداگانه باشد باید یکی از موارد زیر انجام شود:
نکته:
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
بلوکهای:
نمیتوانند با Optimized Data Block کار کنند. بنابراین DBهای زیر باید با حالت Standard Access ساخته شوند.
روش تأیید و راهاندازی سیستم (Verification and Commissioning Procedure)
مرحله 1: بررسی شبکه
از Engineering Station به تجهیزات زیر Ping بزنید:
مقدار قابل قبول: Packet Loss < 0.1%
مرحله 2: بررسی وضعیت آنلاین بلوکها
در TIA Portal: به CPU مدل S7-1214C متصل شوید و بیت Poll_Trigger را Force کنید. سپس وضعیتهای زیر را بررسی کنید:
در ارتباط سالم ابتدا 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 تغییر دهید. سپس بررسی کنید:
مرحله 6: تست خطا
کابل Ethernet مربوط به S7-1200 را جدا کنید. باید مشاهده شود در MB_CLIENT پارامتر ERROR = TRUE و STATUS = 16#80D4 در حداکثر در مدت 3 ثانیه تغییر کند.
مرحله 7: تست طولانی مدت
ارتباط را حداقل 24 ساعت فعال نگه دارید. داده STATUS را Trend کنید. اگر خطاهای لحظهای بیشتر از1 بار در ساعت رخ دهد، معمولاً نشانه یکی از موارد زیر است:
ماتریس عیبیابی (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-Alive | STATUS را برای 16#80D2 بررسی کنید | TCP Keep-Alive را در UDT اتصال فعال کنید یا زمان Polling را کاهش دهید |
| STATUS = 16#8188 بلافاصله ظاهر میشود | DATA_PTR به DB ناموجود اشاره میکند | شماره DB و وجود آن را بررسی کنید | DB ایجاد کنید یا Pointer را اصلاح کنید |
| DCS نمیتواند تجهیز را پیدا کند | پورت 502 توسط Firewall بسته شده است | از PC مهندسی تست کنید: Telnet به IP و پورت 502 | Firewall را باز کنید، 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 جداگانه استفاده شود.
چرا S7-1200 وقتی بیتهای M را Force میکنم ارتباط دارد ولی Tagهای آنالوگ کار نمیکنند؟
بیتهای M معمولاً بهصورت مستقیم به Coil خواندهشده توسط DCS متصل میشوند و نیاز به Data Block ندارند اما دادههای آنالوگ باید:
همچنین باید بررسی شود 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 پاسخ نداده است. بررسی کنید:
آیا برای Modbus TCP در S7-1200 به CP 1243 نیاز است؟
خیر، پورت داخلی PROFINET در CPU 1214C از طریق کتابخانه SIMATIC Modbus TCP از Modbus TCP پشتیبانی میکند. ماژول CP در موارد زیر استفاده میشود.
چرا DCS مقدار تگ Float 32 بیتی من را با جابهجایی Word بالا و پایین نشان میدهد؟
پروتکل Modbus TCP دادهها را بهصورت Wordهای 16 بیتی منتقل میکند. اما یک مقدار REAL (32-bit Floating Point) نیاز به دو Word شانزدهبیتی دارد. بنابراین باید مقدار REAL در PLC به دو قسمت تقسیم شود:
مشکل اصلی این است که ترتیب قرار گرفتن این دو Word در سیستمهای DCS مختلف متفاوت است.
آیا دو CPU از نوع S7-1200 میتوانند از طریق Modbus TCP با یکدیگر تبادل داده داشته باشند؟
بله. دو CPU مدل S7-1200 میتوانند با استفاده از Modbus TCP با یکدیگر ارتباط برقرار کنند. روش تنظیم CPU اول بهعنوان MB_SERVER تنظیم میشود. CPU دوم بهعنوان MB_CLIENT تنظیم میشود.