آموزش

انواع Data Type (نوع داده) در برنامه نویسی PLC های سری S7 زیمنس

انواع داده ها در برنامه نویسی

در این مقاله نمایندگی زیمنس ایران انواع نوع داده در برنامه نویسی PLC های سری S7 زیمنس را بررسی می‌کنیم.

داده ها به صورت باینری در اختیار PLC قرار می‌گیرند. جهت انجام برنامه‌های متفاوت، علاوه بر نوع داده باینری نیاز به انواع داده‌ی دیگر نیز است. به عنوان مثال بیان یک ورودی آنالوگ که 16 بیتی است به صورت باینری اگر چه امکان پذیر است ولی برای انجام کارهای محاسباتی روی آن لازم است که به فرمت داده های دیگر مانند عدد صحیح بیان شود، از این رو تعریف انواع داده ها در PLC ضرورت پیدا می‌کند.

به طور کلی انواع داده های قابل تعریف در STEP7 را می‌توان به سه گروه تقسیم‌ بندی کرد:

  1. Elementary Data Types یا داده های پایه
  2. ex Data Types6 Compl یا داده های پیچیده
  3. Parameter Types یا داده های پارامتری

در هر کدام از گروه‌های فوق، چندین نوع داده وجود دارد. در این قسمت در برنامه‌ نویسی فقط با داده های پایه سر و کار داریم. بنابراین به تشریح این دسته می‌پردازیم. داده های Complex و Parameter در قسمت‌های بعدی توضیح داده می‌شوند.

لازم است توجه شود که برخی داده ها در همه PLC های S7 به کار می‌رود ولی برخی خاص 1200 و 1500 هستند. برخی نیز فقط در 1500 به کار می‌روند.

در بین انواع داده ها، داده های پایه بسیار پر کاربرد در STEP7 می‌باشد. داده های موجود در این گروه در اکثر برنامه های نوشته شده مورد استفاده قرار می‌گیرند.

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

  1. داده های بیتی
  2. داده های اعداد محاسباتی
  3. داده های زمانی
  4. داده کاراکتر

به جز داده کاراکتر که مربوط به بحث این قسمت نیست. سایر داده ها را در ادامه این مقاله از سایت تکنوکلید (واردکننده و توزیع کننده اتوماسیون صنعتی زیمنس) توضیح می‌دهیم.

 

داده های بیتی

این داده ها با یک یا چند بیت معرفی می‌شوند و به انواع زیر تقسیم می‌گردند:

  • Bool: داده تک بیتی
  • Byte: داده 8 بیتی
  • Word: داده 16 بیتی
  • Double Word: داده 32 بیتی
  • Long Word: داده 64 بیتی (خاص S7-1500)

همه این داده ها برای پردازش بیتی به کار می‌روند و نمی‌توانند برای دستورات محاسباتی استفاده شوند.

داده Bool

ممکن است در برنامه نیاز باشد که یک مقدار بیتی را استفاده کنیم به عنوان مثال مقدار 1 یا 0 را به یک حافظه منتقل کنیم. می‌توان به طور مستقیم عدد 1 یا 0 را در برنامه به کار برد. در عین حال می‌توان قبل از 0 یا 1 از پیشوند #2 که معرف مبنای 2 است استفاده کرد ولی الزامی نیست.

 

داده Byte

اگر داده از جنس byte یعنی 8 بیتی باشد قبل از عدد لازم است پیشوند b# 16# را به کار ببریم. حرف b معرف byte است و عدد 16 معرف مبنای 16 یعنی هگز است. حرف b می‌تواند به صورت B نوشته باشد و حروف کوچک و بزرگ اهمیتی ندارد. به عنوان مثال b#16#ff یک عدد هگز است که معادل 8 بیت 11111111 می‌باشد. اگر در فرمت بایت فقط یک عدد هگز به کار رود قبل از آن را صفر در نظر می‌گیرد. به عنوان مثال b#16#f معادل 00001111 است. در برنامه زیر عدد هگز FF به آدرس یک خروجی منتقل شده است.

 

داده word

اگر داده از جنس word باشد 16 بیتی است. قبل از عدد لازم است پیشوند w#16# را به کار ببریم که حرف w معرف word و عدد 16 مبنای هگز را نشان می‌دهد. به عنوان مثال w#16#AAAA یک عدد هگز 16 بیتی است و معادل 16 بیت 1010101010101010 است. در اینجا نیز حروف کوچک و بزرگ اهمیتی ندارند. یک عدد هگز 16 بیتی نیاز به 4 عدد هگز مانند AAAA دارد اگر تعداد ارقام کمتر باشد قبل از آن را صفر در نظر می‌گیرد.

 

داده Double Word

اگر داده از جنس Dword باشد 32 بیتی است. قبل از عدد باید پیشوند DW#16# را به کار ببریم که DW معرف دابل ورد است و می‌تواند با حروف کوچک نیز نوشته شود. به عنوان مثال DW#16#AFBF4CF7 یک عدد هگز 32 بیتی است. در برنامه‌ای عدد 1 به صورت 32 بیتی دابل ورد استفاده شده یعنی همه 31 بیت قبل از آن صفر است. این برنامه هر بار که اجرا می‌شود این 32 بیت را به سمت چپ می‌چرخاند.

 

داده Long Word

اگر داده از جنس Long Word باشد که 64 بیتی و خاص S7-1500 است قبل از عدد باید پیشوند LW#16# را به کار برد.

 

داده های عددی

داده های عددی بیشتر برای کارهای محاسباتی استفاده می‌شوند و به دو نوع Integer و Real تقسیم می‌گردند.
وقتی در برنامه از دستورات محاسباتی استفاده می‌کنیم می توان فرمت عدد را از لیست انتخاب کرد.

نکته قابل توجه این است که برخی CPU ها مانند 1500 فرمت‌های عدد بیشتری را ساپورت می‌کنند و برخی مانند 300 و 400 فرمت های محدودی را می‌توانند به کار ببرند.

هر فرمت از اعداد بازه‌ی خاصی دارد و اگر عدد وارد شده در برنامه خارج از این بازه باشد با پیغام خطا مانند مواجه می‌شویم.

 

اعداد Integer

اعداد صحیح به فرمت های مختلف می‌توانند در برنامه استفاده شوند. این فرمت ها عبارت اند از:

  • INT: عدد صحیح 16 بیتی با علامت
  • UINT: عدد صحیح 16 بیتی بدون علامت (خاص S7-1200 و S7-1500)
  • SINT: عدد صحیح 8 بیتی با علامت (خاص S7-1200 و S7-1500)
  • USINT: عدد صحیح 8 بیتی بدون علامت (خاص S7-1200 و S7-1500)
  • DINT: عدد صحیح 32 بیتی با علامت
  • UDINT: عدد صحیح 32 بیتی بدون علامت (خاص S7-1200 و S7-1500)
  • LINT: عدد صحیح 64 بیتی با علامت (خاص S7-1500)
  • ULINT: عدد صحیح 64 بیتی بدون علامت (خاص S7-1500)

 

عدد INT

INT مخفف Integer و منظور عدد صحیح 16 بیتی است که می‌تواند علامت مثبت یا منفی داشته باشد. با توجه به رزرو شدن یک بیت برای علامت، فقط 15 بیت برای عدد باقی می‌ماند بنابراین بیشترین عدد 32767+ و کمترین عدد 32768- خواهد بود. این اعداد در برنامه همه انواع PLC های S7 به کار برد. عدد را می‌توان بدون پیشوند یا با پیشوند INT# به کار برد که الزامی نیست.

بیت اول از سمت چپ، بیت علامت می‌باشد. بیت علامت می‌تواند مقادیر زیر را داشته باشد:

0: در این صورت عدد صحیح، مثبت در نظر گرفته می‌شود.
1: در این صورت عدد صحیح، منفی در نظر گرفته می‌شود.

جهت محاسبه‌ی عدد صحیح به فرم INT کافیست مراحل زیر طی شود:

مقدار دسیمال موجود در 15 بیت (بدون احتساب بیت علامت) را مطابق روش بیان شده جهت تبدیل باینری به دسیمال، به یک عدد دسیمال تبدیل می‌کنیم.

بیت علامت را با توجه به مقدار درون آن به یک دسیمال تبدیل می‌کنیم. اگر مقدار بیت علامت، عدد صفر باشد که در محاسبات بی‌تاثیر بوده و حاصل همان عدد دسیمالی است که از تبدیل 15 بیت (بدون احتساب بیت علامت) محاسبه شده است.

اگر بیت علامت دارای مقدار یک باشد، به عدد دسیمال تبدیل شده و به صورت منفی در نظر گرفته می‌شود. این مقدار با مقدار به دست آمده از 15 بیت دیگر جمع می‌‎شود.

برای محاسبه بیشترین مقدار یک داده INT کافیست که به غیر از بیت علامت، سایر بیت های آن داده 1 شوند. در این صورت داریم: 32767 = 1-(15^2). همانطور که مشخص است بیشترین مقداری که می‌تواند در یک عدد صحیح شانزده بیتی قرار گیرد، عدد 32767 است.

نحوه محاسبه عدد INT با علامت منفی نشان، چون بیت علامت دارای مقدار 1 است، بنابراین کل عدد یک عدد منفی در نظر گرفته می‌شود. در خانه‌های دیگری که عدد 1 قرار گرفته شده است، عدد 2 به توان شماره خانه رسیده و با سایر اعداد جمع می‌شود. حاصل این جمع با مقدار 15^2- (32768-) جمع شده که حاصل برابر 662- می‌شود. توجه شود که مقدار 15^2- مربوط به مقدار بیت علامت است.

کمترین عدد INT وقتی است که بیت علامت 1 یعنی عدد منفی و سایر بیت ها صفر باشند که این عدد برابر با 15^2- یعنی 32768- خواهد بود.

 

عدد UINT

UINT مخفف Unsigned integer و منظور عدد صحیح 16 بیتی بدون علامت است یعنی منفی نمی‌شود. بنابراین هر 16 بیت برای عدد استفاده می‌شود. حداقل صفر و حداکثر 65535 می‌تواند باشد. این اعداد را فقط در PLC های S7-1200 و S7-1500 می‌توان به کار برد. 300 و 400 این فرمت را ساپورت نمی‌کنند. عدد می‌تواند بدون پیشوند خاص یا با پیشوند UINT# در برنامه استفاده شود.

 

عدد SINT

SINT مخفف Short Integer و منظور عدد صحیح 8 بیتی با علامت مثبت و منفی است. بازه آن می‌تواند بین 128- تا 127+ تغییر کند. این اعداد را فقط در PLC های S7-1200 و S7-1500 می‌توان به کار برد. 300 و 400 این فرمت را ساپورت نمی‌کنند. عدد می‌تواند بدون پیشوند یا با پیشوند SINT# به کار رود.

 

عدد USINT

USINT منظور Unsigned short integer و منظور عدد صحیح 8 بیتی بدون علامت است یعنی منفی نمی‌شود. بنابراین بازه آن بین 0 تا 255 می‌تواند باشد. این اعداد را فقط در PLC های S7-1200 و S7-1500 می‌توان به کار برد. 300 و 400 این فرمت را ساپورت نمی‌کنند.

 

عدد DINT

DINT مخفف Double Integer و منظور عدد صحیح 32 بیتی با علامت است. با توجه به وجود 31 بیت برای عدد این اعداد می‌توانند بین 2147483648- تا 2147483647 باشند. همه PLC های S7 این اعداد را در برنامه نویسی ساپورت می‌کنند. نوشتن عدد می‌تواند بدون پیشوند یا با پیشوند DINT# باشد.

 

عدد UDINT

UDINT مخفف Unsigned Double Integer و منظور عدد 32 بیتی بدون علامت است پس بازه بزرگتری را برای عدد مثبت نسبت به DINT ساپورت می‌کند. این بازه می‌تواند بین 0 تا 4294967295 باشد. این اعداد را فقط در PLC های S7-1200 و S7-1500 می‌توان به کار برد. 300 و 400 این فرمت را ساپورت نمی‌کنند.

 

عدد LINT

LINT مخفف Long Integer و منظور عدد صحیح 64 بیتی با علامت است. فقط S7-1500 این فرمت اعداد را ساپورت می‌کند. بازه این اعداد بین 9.2- تا 9.2+ تریلیون است.

 

عدد ULINT

ULINT مخفف Unsigned Long Integer و منظور عدد صحیح 64 بیتی بدون علامت است. فقط S7-1500 این فرمت اعداد را ساپورت می‌کند. بازه این اعداد بین 0 تا (1018 ) یعنی 18.4 تریلیون است. در برنامه نویسی می‌تواند بدون پیشوند یا با پیشوند ULINT# به کار رود.

 

اعداد Real

اعداد Real همان اعداد اعشاری هستند. در محاسبات PLC به ویژه وقتی با سیگنال‌های آنالوگ سر و کار داریم این اعداد کاربرد فراوانی دارند.
این اعداد به دو دسته تقسیم می‌شوند:

Real: اعداد اعشاری 32 بیتی
Long Real: اعداد اعشاری 64 بیتی (خاص S7-1200 و S7-1500)

Real: اعداد اعشاری 32 بیتی با علامت هستند و در تمام PLC های S7 قابل استفاده است. بازه این اعداد از 38+4e.3- تا 38+4e.3 است. می‌توان بدون پیشوند یا با پیشوند Real آن‌ها را به کار برد که الزامی نیست.

وقتی در برنامه عدد اعشاری خیلی بزرگ یا خیلی کوچک وارد شود آن را به فرمت exponential تبدیل می‌کند.

همانطور که بیان شد، داده Real از 32 بیت تشکیل می‌شود، اما ساختار آن با داده DINT متفاوت است. در DINT یک بیت برای علامت و سایر بیت ها خود عدد هستند ولی در Real ساختار متفاوت است و از فرمول زیر محاسبه می‌شود:

عدد Real = علامت * (1.f) * (2e-127 )

بیت شماره 31 جهت علامت اختصاص یافته شده است. بیت های شماره 23 الی 30 جهت ساختن مقدار e، و مابقی بیت ها جهت ساختن مقدار f به کار می‌روند. هنگامی که مقادیر f و e و علامت (مثبت یا منفی) محاسبه شدند، آن‌ها را در فرمول بالا قرار داده و عدد Real محاسبه می‌شود.

توان خانه‌های مربوط به عدد e، از 20 الی 27 می‌باشد. توان مربوط به خانه های f، از 2-1 الی 2-23 است. اگر عدد f مقدار 0.5 و مقدار e عدد 127 باشد، از قرار دادن مقادیر محاسبه شده در فرمول، مقدار 0.75 محاسبه می‌شود.

 

عدد Long Real

Long Real اعداد اشاری 64 بیتی با علامت هستند. این اعداد را فقط در PLC های S7-1200 و S7-1500 می‌توان به کار برد. 300 و 400 این فرمت را ساپورت نمی‌کنند. بازه این اعداد بین از 308+79e.1 می‌باشد. در برنامه نویسی می‌توان این اعداد را با پیشوند یا بدون پیشوند به کار برد.

 

داده های زمانی

این داده های مربوط به زمان هستند و کاربرد آن‌ها در دستوراتی مانند تایمرها می‌باشد. می‌توان آن‌ها را به صورت زیر لیست کرد:

S5Time: برای مقدار زمان در تایمرهای قدیمی به کار می‌رود و خاص 300 و 400 است.
Time: برای مقدار زمان در تایمرهای موسوم IEC به کار می‌رود و همه PLC های S7 آن را ساپورت می‌کنند.
Date: برای استفاده از تاریخ به کار می‌رود.
Time of Day: برای زمانی از یک روز به کار می‌رود منظور از زمان صفر تا ساعت 24 است.

 

S5Time

داده های از این نوع مربوط به زمان تایمرهای قدیمی است که در Step7 Classic نیز استفاده می‌شد. بنابراین فقط در صورتی که در TIA Portal از PLC های 300 و 400 استفاده شود این تایمرها قابل استفاده هستند. فرمت زمان این تایمرها به صورت S5Time می‌باشد که در S7-1200 و S7-1500 وجود ندارد. در S7-1200 نه تنها تایمرهای قدیمی بلکه فرمت فرمت زمان S5Time وجود ندارد ولی در S7-1500 اگرچه تایمرهای قدیمی وجود ندارد ولی می‌توان در برنامه آنها از فرمت S5Time استفاده کرد.

در فرمت S5Time نوشتن پیشوند S5Time ضروری است البته می‌توان به طور خلاصه به صورت S5t# نیز نوشت. بعد از این پیشوند می‌توان زمان را ذکر کرد. زمان می‌توان به صورت ساعت h، دقیقه m، ثانیه s و میلی ثانیه ms باشد مانند S5T#10s یا S5T#2m و… . زمان می‌تواند به صورت ترکیبی باشد مانند S5T#2m10s50ms. حروف کوچک و بزرگ اهمیتی ندارند. زمان در فرمت s5time به صورت 16 بیتی است و محدودیت دارد. بازه زمان از صفر تا حداکثر 2 ساعت و 46 دقیقه و 30 ثانیه است که به فرم 2H46M30S0MS نمایش داده می‌شود. پله های زمانی در این نوع داده 10 میلی ثانیه‌ای هستند.

 

Time

داده نوع Time به صورت 32 بیتی است و بیشتر برای تایمرهایی که به IEC موسوم هستند کاربرد دارد. این تایمرها توسط همه انواع PLC های S7 ساپورت می‌شوند.
برای به کار بردن این دیتا در برنامه استفاده از پیشوند Time# و T# ضروری است. مقدار زمان علاوه بر ساعت و دقیقه و ثانیه و میلی ثانیه می‌تواند روز d هم باشد. به عنوان مثال یک روز و بیست ساعت به صورت مانند T#1d20h نشان داده می‌شود. این نوع دیتا به صورت 32 بیتی است و بازه زمان آن می‌تواند بزرگتر از S5time باشد. این زمان می‌تواند حداکثر 24D20H31M23S647MS باشد. پله‌های زمانی در این نوع دیتا می‌تواند یک میلی ثانیه‌ای باشد.

 

نوع داده DATE

این نوع داده به صورت شانزده بیتی است. در داده فوق می‌توان اعداد مختلفی به فرم دسیمال بدون علامت قرار داد که به عنوان روز با اضافه شدن به تاریخ 01- 01- 1990، تاریخ جدیدی را به وجود آورد. مثلا اگر در این داده مقدار 20 قرار گرفته باشد، 20 روز به تاریخ 1990- 01- 01 افزوده شده و بیانگر 1990- 01- 21 خواهد بود. حداکثر تاریخ قابل ذخیره سازی در این نوع داده، تاریخ 2168- 12- 31 می‌باشد.

این نوع داده به صورت (تاریخ D#) آدرس دهی می‌شود که علامت D# قبل از تاریخ، بیانگر نوع داده Date است.

 

نوع داده TIME OF DAY

این نوع داده به منظور نمایش زمان مشخصی از روز به فرم TOD#H:M:S:Ms به کار می‌رود که در آن H، M، S، Ms به ترتیب بیانگر ساعت، دقیقه، ثانیه، میلی ثانیه است و علامت TOD# نشان دهنده داده از نوع Time of day است. مثلا مقدار TOD# 10:12:23:00 به ساعت ده و دوازده دقیقه و بیست و سه ثانیه اشاره دارد. این داده دارای اندازه 32 بیتی است. اطلاعات در این داده به صورت دسیمال بدون علامت قرار گرفته و بیانگر زمان مورد نظر در روز بر حسب میلی ثانیه می‌باشد. مثلا اگر در این داده مقدار 50000 هزار قرار بگیرد، نشان دهنده زمان 00:00:50:00 یعنی 50 ثانیه بامداد است.

 

نوع داده LTIME

این نوع داده خاص PLC های سری S7-1500 می‌باشد از 64 بیت تشکیل شده است و مقادیر زمانی با رنج وسیع‌تری را پوشش می‌دهد.

 

نوع داده LTIME_OF_DAY

این نوع داده به منظور نمایش زمان مشخصی از روز به فرم LTOD#H:M:S:Ms به کار می‌رود که در آن H، M، S و Ms به ترتیب بیانگر ساعت، دقیقه، ثانیه و میلی ثانیه می‌باشد. این نوع داده خاص PLC های سری S7-1500 است.

 

پیشنهاد نمایندگی زیمنس ایران این است که مقالات مرتبط زیر در اتوماسیون صنعتی را هم مطالعه بفرمایید:

آدرس دهی متغیر های حافظه

آموزش نصب کابل MPI/PC Adapter

2 نظر در “انواع Data Type (نوع داده) در برنامه نویسی PLC های سری S7 زیمنس

  1. محمد گفت:

    مطالب کامل مفید و کاربردی ، بابت اطلاعات درجه یکتون ممنون🌹💫

    1. گروه تحریریه گفت:

      خواهش میکنم، خوشحالیم که راضی بودید.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد.