من فضلك ادعم الموقع على جوجل بالضغط على علامة g+1

الخميس، 19 أكتوبر، 2017

شرح complex data block فى Siemens PLC

الكاتب elec egypt   بتاريخ   3:02 م   UDT

نكمل كورس PLC من نوع Siemens S7 300
الدرس التاسع : شرح Complex Data Block و ده تكملة للدرس السابق شرح Data Block فى Siemens PLC

معنى Complex data block :

عناصر مركبه من اكثر من عنصر و تشمل اكثر من ذاكرة double word

تحتوى على الاتى :
Date and Time - String - Array - Struct - UDT


ها نشرح كل عنصر على حدى

شرح Date and Time :

من اسمه نستنتج انه يقرا قيمة الوقت و التاريخ معا
يخزن قيمته فى 8 bytes ( اى فى   2 double word )

تنقسم 8 bytes كالتالى :
byte 0 : يحتوى على قيمة السنة و يتراوح من 1990 الى 2089
byte 1 : يحتوى على الشهر و يتراوح من 01 الى 12
byte 2 : قيمة اليوم و يتراوح من 1 الى 30
byte 3 : يحتوى على قيمة الساعة ( من 0 الى 23 )
byte 4 : يحتوى على الدقائق من 0 الى 59
byte 5 : يحتوى على الثوانى من 0 الى 59
byte 6  : يحتوى على جزء من قيم مللى ثانية و تتراوح من 0 الى 99
byte 8 : ينقسم الى جزئين الجزء الاول يحتوى على المتبقى من قيمة مللى ثانية و تتراوح من 0 الى 9
الجزء الثانى يحتوى على day of week اى يحدد اى يوم من الاسبوع و يتراوح من 1 الى 7 ( عدد ايام الاسبوع ) بحيث ان رقم 1 يوازى يوم الاحد

لاحظ كدا ان مللى ثانية بالكامل يتراوح من 0 اللى 999
لاحظ ايضا ان اى قيمة سابقة تخزن بصيغة BCD


صيغة كتابة Date and Time : يكتب بالصيغة التالية
 DT#year - month - day - hour : minute : second : millisecond
مثال :
DT#2017-10-18-14:30:40:800  اى التاريخ 18/10/2017 و الساعة 2 ظهرا و 30 دقيقة و 40 ثانية و 800 مللى ثانية


حدود قيم Date and Time
يتراوح من  DT#1990-01-01-0:0:0.0 الى DT#2089-12-31-23:59:59.999


مثال على ادراج داتا من نوع date and time فى Data Block

نلاحظ الاتى :
ان برنامج Simatic Manager اعطى قيمة initial value تساوى اقل قيمة ممكنة للداتا date and time
ان البرنامج اعطى date and time عدد من bytes يساوى 8 bytes و اصبح المتاح بعدها من اول DBD8



شرح String فى Data Block:

يستخدم فى كتابة اى كلمات داخل plc
و هو يحتوى على عدد 256 bytes مقسمين الى 254 bytes لكتابة الحروف و 2 Bytes يستخدمهم البرنامج فى ترتيب الحروف
و من المعروف ان كل حرف يكتب فى 1 byte
اذا يمكن كتابة عدد 254 حرف فى String واحد
اذا عند ادراج داتا من النوع string داخل Data Block يقوم Simatic Manager بحجز 254 bytes له
و لكن لو انا محتاج كتابة كلمة تتكون من 7 حروف مثل كلمة Siemens مثلا , من غير المفضل حجز 254 bytes لكتابة 7 حروف فقط

لذلك يتم تحديد عدد الحروف المطلوبة بجانب امر string كما سنرى
ايضا يجب كتابة اى كلمة داخل string بين اثنين single quotation marks

مثال لادراج String داخل Data Block


عند ادراج string يقوم البرنامج بحجز 254  bytes لكتابة عدد 254 حرف
و ايضا وضع مسافة فارغة بين اثنين  single quotation marks فى خانة initial value
تعديل string ليستوعب فقط 10 حروف كحد اقصى
و كتابة كلمة PLC داخل initial value


شرح استخدام Array فى Data Block

تخيل معى تطبيق يستخدم 24 عداد مثلا و يتم استخدامهم فى حساب عدد انتاجية الماكينة فى كل ساعة بحيث ان كل عداد يقوم بحساب انتاجية ساعة معينة من اليوم و يقوم البرنامج بعرض انتاجية كل ساعة على شاشة HMI مثلا
اذا انا بحاجة هنا الى 24 متغير من النوع integer ليتم تخزين قيم العدادات عليها
لعمل ذلك بالطريقة العادية يجب ادراج 24 داتا من النوع integer
كما بالصورة

و ده حاجة مملة و غير احترافية نهائيا
و الافضل هنا استخدام Array من النوع integer يحتوى على 24 عنصر
و ده يتم بسرعة جدا و فى سطرين فقط مش 24 سطر


بعد عمل ادراج Array نقوم بكتابة اسم لها و ده اى اسم انا عايز اكتبه مثلا زى product_counters
و اختار عدد عناصر Array و بداية و نهاية ترقيم العناصر
فهنا انا اخترت [ARRAY[1..24  اى العنصر الاول رقمه 1 و الاخير رقمه 24 اذا هنا لدى عدد 24 عنصر
كمان لازم اختار نوع عناصر Array و هنا اخترت integer
نلاحظ هنا ان البرنامج حجز 48 bytes لصالح Array اللى عملتها
لانى ادرجت عدد 24 عنصر و كل عنصر نوعه integer ( اى 2 bytes ) اذا المجموع 48 bytes

المصفوفة السابقة تعتبر one dimension array اى مصفوفة فى اتجاه واحد
و ممكن اعمل Array تحتوى على 2 dimensions او 3 dimensions او اكثر حسب اللى محتاجه

مثال لعمل array تتكون من 3 dimensions


نلاحظ التالى
dimension 1 : يتكون من العناصر 2 الى 5 ( اى 4 عناصر )
dimension 1 : يتكون من العناصر 1 الى 8 ( اى 8 عناصر )
dimension 1 : يتكون من العناصر 3 الى 7 ( اى 5 عناصر )
اذا حجم array السابقة = 4*8*5 = 160 عنصر
اى بكتابة السطر السابق تم ادراج 160 عنصر من النوع real ( تخيل الصعوبة و الوقت الضائع فى عدم استخدام array و ادراج 160 عنصر كل عنصر فى سطر وحده )
بما ان المصفوفة من النوع real و عدد عناصرها 160
اذا البرنامج قد حجز للمصفوفة عدد 4 * 160 = 640 bytes
لاحظ من الصورة ان اول عنصر من array يبدا من byte رقم 48 و ينتهى ب byte رقم 688
688-48=640 ( حجم المصفوفة )


كيفية استدعاء عنصر من عناصر array داخل اى مكان فى البرنامج ( مثل FC او FB )

اولا استدعاء عنصر من one dimension array

مثلا كتابة عنصر من المصفوفة فى بلوك compare integer

ثم نقوم بكتابة رقم العنصر داخل القوسين

نجد ان Simatic Manager قام بكتابة data block address الخاص بهذا العنصر

ثانيا : استدعاء عنصر من three dimension array

ثم نكتب ارقام العناصر حسب ترتيبها فى three dimensions 


نجد ان البرنامج قام بكتابة data block address المرافق للعنصر الذى تم ادراجه
ملحوظة : يمكن استخدام اى نوع عنصر داخل array ان كان elementary او complex data type
فمثلا يمكن استخدام string او ان تحتوى array على array داخلها ( و لكن هذا يمكن ان يكون معقدا و لا يفضل استخدامه )


شرح struct فى data block

struct هو مجموعة من الداتا المختلفة
و ده مهمته يجمع مجموعة من الداتا مع بعض بحيث استخدمهم باسم struct كنوع من التنظيم ليس اكثر

بعد ادراج struct يقوم البرنامج بفتح قائمة اسفل منه
و يمكن وضع اى مجموعة من data مثل Bool و int و s5time و array و حتى struct فرعى
كيفية استدعاء اى data موجودة داخل struct معين فى data block


بكتابة حرف D تفتح القائمة الفرعية و نختار منها data المطلوبة ( و فى المثال تكون test4 )
او يمكن كتابة عنوان test 4 بهذا الشكل Complex Data Block".x.test4" بحيث ان
Complex Data Block : هو اسم Data Block
x : هو اسم struct الذى تم انشاءه
test4 : هو اسم integer data المراد استدعاءه

اذا نستنتج ان استخدام struct هو للتنظيم فقط و لا يغير فى data و لا يعتبر نوع داتا بحد ذاته


شرح UDT داخل data block

و هى User Defined Data 
و سيتم شرحها بالتفصيل عند شرح UDT Block فى درس اخر


انتهى الشرح شكرا للمتابعة
هذا الشرح حصرى لموقع electrical-engineering يرجى عند النقل

الأربعاء، 18 أكتوبر، 2017

شرح Data Block فى Siemens PLC

الكاتب elec egypt   بتاريخ   12:18 ص   shared

نكمل كورس Siemens PLC
و موعدنا مع الدرس الثامن 

ها نشرح كيفية ادراج data block و ايه هى عناصرها بالكامل Elementary و Complex
و ها نشرح الفرق بين Shared و instance data block 

يعنى ايه Data block ؟

data block هى مكان لتخزين البيانات داخل CPU بطريقة معينة انا بحددها
حتى يتم استخدامها داخل عناصر البرنامج مثل function و function block

يوجد نوعين اساسيين من Data Blocks هى :

Shared data block : اى تمكن استخدامها فى اى مكان داخل البرنامج زى مثلا اى function او اى function block او OB و ديه انا اللى بكتب عناصرها بنفسى بالكامل

Instance data block : و ديه يتم استخدامها فقط مع Function block او system function block 

و ديه لا يتم كتابة عناصرها عن طريق المبرمج بل يتم ادراجها تلقائيا عند عمل call لاى FB او SFB
بحيث يكون لكل function block يتم عمل instance data block خاص بيه فقط و نفس الوضع مع system function block
Instance Data Block ها يتم شرحها مع function block فى درس خاص

لادراج data block اضغط right click فى اى مكان فارغ داخل صفحة blocks و اختار insert new object و اختار Data Block
و طبعا ها يكون نوعها Shared 


ها اختار رقم data block حسب المطلوب و لو عايز اكتب symbolic name او اكتب comment عن وظيفة data block ديه
و غيرها من المتغيرات زى مثلا اسم مبرمج data block 


بعد كدا اختار OK
بعد فتح data block نجدها بهذا الشكل

انواع عناصر Data block
تنقسم الى نوعين اساسيين 

Elementary Data Block : و ده يحتوى على العناصر المبسطة
Complex Data Block : و ده يحتوى على العناصر المعقدة 

شرح Elementary Data Block

ها نشرح كل عنصر

bool : و هى قيمة تتكون من bit واحدة اى تكون اما 1 او 0
0 تسمى False و 1 تسمى True


Byte : اى قيمة تحتوى على 8 bits
و تكتب هنا بصيغة hexadecimal فقط اى لكتابة قيمة مثلا 12 داخل data block بحجم byte تكتبB#16#C
راجع صيغة hexadecimal فى درس شرح تمثيل الاعداد داخل Siemens PLC


Word : اى تحتوى على 16 bits
و يتم كتابة قيمتها بصيغة hexadecimal مثلا لكتابة القيمة 14 داخل ذاكرة بحجم word تكون كالتالى W#16#E 


DWord : اى double word و تحتوى على 32 bits
و يتم كتابة قيمتها بصيغة hexadecimal مثلا لكتابة القيمة 14 داخل ذاكرة بحجم word تكون كالتالى D#16#E 


int : اى integer و تحتوى على 16 bits و تتراوح قيمتها من -32768 الى +32767
و يتم كتابة قيمتها داخل data block بالشكل decimal العادى مثلا اكتب 98 او اكتب -166 و هكذا


Dint : اى double integer و تحتوى على 32 bits و تتراوح قيمتها من -2147483648 الى +2147483647
و يتم كتابة قيمتها داخل data block بالشكل decimal العادى و كلن بالشكل L#Value مثلا لكتابة الرقم 899 تكتب L#899


Real : و تحتوى على 32 bits و هى الداتا الوحيدة فى PLC التى يمكن ان تحتوى على قيمة عشرية
مثلا لكتابة القيمة 99.6 يقوم برنامج Simatic manager بتحويلها تلقائيا الى 9.960000e+001
راجع درس شرح تمثيل الاعداد داخل Siemens PLC


S5Time : و هى الصيغة الوحيدة لكتابة قيمة وقت داخل Timers
و تشغل مساحة 16 bits
و لكتابة وقت مثلا ( ساعة و 53 دقيقة و 30 ثانية و 20 مللى ثانية ) يتم كتابة S5T#1H53M30S20MS
و اقصى قيمة لها S5T#2H46M30S0MS
و سيتم شرح S5Time بالتفصيل الممل فى درس شرح timers لاحقا


Time : و هى صيغة كتابة الوقت ايضا و يتم استخدامها فى الاساس مع IEC timers
و تشغل مساحة 32 bits
و نفس وقت مثلا ( 3 ايام و 10 ساعات و 40 دقيقة ) يتم كتابة T#3d10h40m


Date : تستخدم فى كتابة التاريخ
و تشغل مساحة 16 bits
لكتابة تاريخ مثلا 15/3/2013 نكتب D#2013-3-15
و تتراوح قيمة التاريخ من D#1990-1-1 الى D#2168-12-31


time of day : و تستخدم لكتابة وقت ما
و تشغل مساحة 32 bits
مثلا لكتابة الوقت الساعة 2 ظهرا و 30 دقيقة و 20 ثانية يتم كتابة TOD#14:30:20.000
و تتراوح قيمة الوقت من TOD#0:0:0.000 الى TOD#23:59:59.999


CHAR : و هى اختصار character و تستخدم لكتابة حرف
و تشغل مساحة 8 bits
مثلا لكتابة حرف F يتم كتابتها كالتالى  'F'


كدا احنا شرحنا كل نوع على حدى و الحجم الذى يشغله و فيما يستخدم
دلوقتى ها نقوم بأدراج كل العناصر السابقة على Data Block اللى انشأناها

نجد ان هناك الخانات الاتية :
name : و فيه يتم ادراج اسم القيمة حسب اختيارى مثلا انا كتبت test
type و ده نوع data اللى تم شرحه بالتفصيل
initial value : و ديه القيمة الابتدائية اللى PLC ها يدرجها عند عمل download للداتا بلوك
و القيمة ديه البرنامج يضعها تلقائيا بصفر و لكن ممكن اغير فيها حسب المطلوب
و بمجرد ان يعمل البرنامج بعد عمل download تتغير قيمة الداتا حسب البرنامج اللى انا كاتبه
Comment : و ده لو انا عايز اكتب كومنت يذكرنى بأستخدام الداتا ديه مثلا


نلاحظ الاتى : يقوم برنامج Simatic manager بحجز ذاكرة لكل عنصر انا بدرجه
مع ملاحظة ان عند استخدام داتا بذاكرة bool يقوم البرنامج بحجز ذاكرة 1 byte كامله لها
و عند استخدام داتا بذاكرة byte يقوم البرنامج بحجز ذاكرة 1 word كامله لها


كيفية استدعاء اى data تم ادراجها داخل Data Block 

bool : يتم استدعائه على هذه الصيغة DB1.DBX4.0 مثلا ( هنا رقم data block يساوى 1 و نقصد bit رقم 0 داخل byte رقم 4 )

و لاستدعاء القيمة المخزنه على byte يتم كتابة الامر بهذه الطريقة DB1.DBB3 بهذا الشكل تم استدعاء BYTE رقم 3 فى data block رقم 1

و لاستدعاء القيمة المخزنه على word يتم كتابة الامر بهذه الصيغة DB4.DBW6 ( بهذا الشكل تم استدعاء WORD رقم 6 فى data block رقم 4 )

و لاستدعاء القيمة المخزنه على double word يتم كتابة الامر بهذه الصيغة DB5.DBD8 ( بهذا الشكل تم استدعاء double word رقم 8 فى data block رقم 5 )

و ذلك بعض النظر عن نوع الذاكرة 


دلوقتى ها نستدعى كل العناصر اللى كتبناها فى data block 1

لاستدعاء test1 : نكتب DB1.DBX0.0 و ذلك لانها مخزنه على ذاكرة BIT
لاستدعاء test2 :  نكتب DB1.DBB1 و ذلك لانها مخزنه على ذاكرة byte
لاستدعاء test3 :  نكتب DB1.DBW2 و ذلك لانها مخزنه على ذاكرة word
test4 :  نكتب DB1.DBD4 و ذلك لانها مخزنه على ذاكرة double word
test5 :  نكتب DB1.DBW8 و ذلك لانها مخزنه على ذاكرة word
test6 :  نكتب DB1.DBD10 و ذلك لانها مخزنه على ذاكرة double word
test7 :  نكتب DB1.DBD14 و ذلك لانها مخزنه على ذاكرة double word
test8 :  نكتب DB1.DBW18 و ذلك لانها مخزنه على ذاكرة word
test9 :  نكتب DB1.DBD20 و ذلك لانها مخزنه على ذاكرة double word
test10 :  نكتب DB1.DBW24 و ذلك لانها مخزنه على ذاكرة word
test11 :  نكتب DB1.DBD26 و ذلك لانها مخزنه على ذاكرة double word
test12 :  نكتب DB1.DBD30 و ذلك لانها مخزنه على ذاكرة double word


مثال عملى على استخدام Data Block

داخل FC3 ها نعمل برنامج يقوم بمقارنة رقمين و تشغيل خرج حسب المقارنة
عشان تفهم المثال راجع درس شرح اوامر Comparator داخل Siemens PLC

هنا استخدمت DB1.DBX0.0 كنقطة مفتوحة تستخدم مع I 10.0 فى تشغيل compare block
و استخدمت DB1.DBW8 فى عملية المقارنة نفسها
لاحظ ان البرنامج اظهر اسم DB1 و هو learn data block و اظهر اسم المتغير اللى ادرجته test 1 و test 5

البرنامج السابق بلغة STL



كدا باقى عناصر Complex Data Block
و هى : Date and Time - String - Array - Struct - UDT
و هيتم شرحهم بالتفصيل الدرس القادم من الكورس


شكرا للمتابعة 

الجمعة، 13 أكتوبر، 2017

شرح عمليات المقارنة comparator فى Siemens PLC

الكاتب elec egypt   بتاريخ   9:26 م   STL

نكمل كورس شرح Siemens S7 300
و موعدنا مع الدرس السابع
شرح المقارنات بين الاعداد 

المقارنات هى عملية تؤثر فقط على حالة RLO 
اى ان الخرج من عمليات المقارنة اما 1 او 0
توجد ثلاث انواع من المقارنات

integer comparator : اى يتعامل مع ارقام integer اى تتكون من 16 bits و تكون موجبة او سالبة
double integer comparator : اى  يتعامل مع ارقام double integer تتكون من 32 bits و ايضا موجب او سالب
real comparator : اى يتعامل مع ارقام real تتكون من 32 bits و ايضا موجب او سالب


طرق المقارنة بين عددين


بالنظر الى الصورة المرفقة نجد 6 طرق من المقارنات تتكرر للثلاث انواع integer , double integer , real
الطرق 6 هى :
EQ اى equal و رمزها ( == ) : و هنا اذا كان العدد الاول يساوى العدد الثانى , يكون خرج المقارنة = 1
NE اى not equal و رمزها ( <> ) : و هنا اذا كان العدد الاول لا يساوى العدد الثانى , يكون خرج المقارنة = 1
GT اى greater than و رمزها ( < ) : و هنا اذا كان العدد الاول اكبر من العدد الثانى , يكون خرج المقارنة = 1
LT اى less than و رمزها ( > ) : و هنا اذا كان العدد الاول اصغر من العدد الثانى , يكون خرج المقارنة = 1
GE اىgreater than or equal و رمزها ( =< ) : و هنا اذا كان العدد الاول اكبر من او يساوى العدد الثانى , يكون خرج المقارنة = 1
LE اى less than or equal و رمزها ( => ) : و هنا اذا كان العدد الاول اصغر من او يساوى العدد الثانى , يكون خرج المقارنة = 1


كيفية كتابة اوامر المقارنة فى لغة Ladder Diagram

لمقارنة الاعداد integer 

نلاحظ ان عنوان البلوك I< : حرف I يدل على ان المقارنة من النوع integer و العلامة < تعنى greater than
compare block : يتكون من
compare enable : و ده المسئول عن تشغيل عملية compare يعنى لازم تكون RLO قبله = 1 ( فى هذا المثال لازم يكون I0.1 = 1 و M 0.0 =0 )
IN 1 : و ده مكان كتابة الرقم الاول و هنا لازم يكون حجمه WORD بسبب انى مسىتخدم مقارنة من نوع integer
IN 2 : و ده مكان كتابة الرقم الثانى و هنا لازم يكون حجمه WORD ايضا
خرج المقارنة و يكون اما 1 او 0
اذا لكى يعمل الخرج Q 10.6 يجب ان يكون MW 20 اكبر من MW 16 


ماذا يحدث لو استخدمت حجم بيانات خطا يعنى مثلا استخدمت MD 20 بدلا من MW 20
البرنامج ها يعطى ERROR و لا يمكن عمل save او downlaod

نلاحظ ظهور رسالة error معناها ان IN1 يجب ان تحتوى على قيمة WORD 


لمقارنة الاعداد double integer 

نلاحظ ان عنوان البلوك D== : حرف D يدل على ان المقارنة من النوع Double Integer و العلامة == تعنى equal
نفس تكوين compare block و الاختلاف هو نوع data المسموح بكتابته فى IN 1 و IN 2
اى يجب ان يكون IN 1 و IN 2 من النوع double integer

لمقارنة الاعداد Real


ملحوظة :
عند كتابة اى رقم real يتم تحويله بشكل اوتوماتيك الى الصيغة  ((Sign) • (1.f) • (2^(e-127)و ده تم شرحه بالتفصيل فى درس شرح طرق تمثيل الاعداد داخل Siemens PLC

اذا عند كتابة الرقم 10.6 يتم تحويلها مباشرة الى 1.060000e+001
للتحويل العكسى : نضرب 1.06 فى 10 ^ 1 = 1.6

شكل compare block بعد كتابة المتغيرات

نلاحظ ان عنوان البلوك R=> : حرف R يدل على ان المقارنة من النوع Real و العلامة => تعنى less than or equal


كيفية كتابة اوامر المقارنة فى لغة statement list

لمقارنة الاعداد integer فى لغة STL


لكتابة امر compare يجب كتابة )A قبله و كتابة ( بعده اى ان ما بين القوسين هو امر المقارنة )
الامر L MW 20 يقوم بتحميل العدد MW 20 على ACCUMULATOR 1 
الامر L MW 16 قام بتحميل العدد MW 16 على ACCUMULATOR 1  و ترحيل العدد MW 20 على ACCUMULATOR 2

(  accumulator 1 , 2 : هى اماكن تخزين الاعداد لكى يتم عمل اى عمليات حسابية او منطقية عليها داخل PLC و يوجد فى S7 300 عدد 2 accumulator فقط )

الرمزI<  : يعنى ان المقارنة من النوع integer و المقارنة greater than
بفرض ان M 0.0 = 0 و I 0.1 = 1
هنا compare تقوم بتشغيل الخرج Q 10.6 عندما يكون MW 20 اكبر من MW 16 اى عندما يكون accumulator 2 اكبر من accumulator 1 

لمقارنة الاعداد double integer فى لغة STL

نفس الطريقة و لكن هنا تم كتابة D== اى ان المقارنة من النوع double word

لمقارنة الاعداد Real فى لغة STL

تم كتابة R فى امر المقارنة اى ان المقارنه من النوع REAL

ملحوظة : طبعا معروف ان الرمز // يعنى ان ما بعده مجرد تعليق على الكود و لا يؤثر اى تأثير على الكود نفسه

انتهى الشرح شكرا للمتابعة


شرح طرق تمثيل الاعداد داخل Siemens PLC

الكاتب elec egypt   بتاريخ   2:29 ص   PLC

النهارده ها نشرح الدرس السادس من كورس شرح Siemens PLC S7 300 , S7 400
ها نشرح انواع  طرق تمثيل الاعداد Data Formats داخل PLC

الدرس ده من اهم الدروس لانه تمهيد و اساس لكل العمليات الحسابية و المقارنات و التحويلات
ها نشرح الانواع الاتية : integer - double integer - Real (floating points numbers) -BCD numbers

integer numbers و اختصارها INT :

و ده نوع من الاعداد يتكون من 16 bits كل bit تحتوى على قيمة 1 او 0
و حسب ترتيب bits و قيمها يتم حساب قيمة الرقم

النوع integer يمكن ان يمثل ارقام موجبة و ايضا ارقام سالبة و لكن يجب ان تكون الارقام ارقام صحيحة فقط اى انه لا يقبل العلامة العشرية
مبدئيا كدا integer data type يمكن ان يستوعب ارقام من - 32768 الى +32767
لازم نكون عارفين ان لو حملت رقم اكبر من 32767 او اقل من -32768 نجد ان CPU اعطى fault

اولا : تمثيل العدد الموجب بذاكرة نوعها integer

يمكن تمثيل الارقام integer بثلاث طرق :
طريقة decimal و هى التمثيل العادى للرقم مثل +662
طريقة binary او ( bin ) اى نجد 16 خانة كل خانة تحتوى فقط على 0 او 1
طريقة Hexa-decimal و تحتوى هنا على 4 خانات فقط

التمثيل من النوع BIN
عشان اوضح لل PLC ان طريقة قراءة الرقم هى binary لازم اكتبها بالصيغة الاتية :  #2 ثم نكتب الرقم
نجد ان الخانة رقم 15 ( اخر خانه ) هى خانة تحديد الاشاره بحيث عندما تكون 0 هذا يعنى ان الرقم موجب و عندما تكون 1 يعنى ان الرقم سالب
كيفية قراءة قيمة الرقم اى التحويل من الصيغة binary الى الصيغة العددية decimal :
نقوم بضرب قيمة كل خانة فى 2 ^رقم الخانة اى ان
 الخانة الاولى قيمتها 0*2^0
الخانة الثانية قيمتها 1*2^1
و هكذا فنجد ان قيمة الرقم = 0*2^0 +  1*2^1 + 1*2^2 +  0*2^3 + 1*2^4 +  0*2^5 + 0*2^6 +  1*2^7 +  0*2^8 +  1*2^9 +  0*2^10 +  0*2^11 + 0*2^12 +  0*2^13 + 0*2^14 +  0*2^15 = +662

تمثيل الرقم بطريقة Hexadecimal
عشان اوضح لل PLC ان طريقة قراءة الرقم هى hexadecimal لازم اكتبها بالصيغة الاتية : (W#16#(value
معنى W ان قيمة العدد من النوع word اى تحتوى على 16 bits
معنى 16 اى ان نوع طريقة قراءة الرقم من النوع hexa-decimal
الرقم نفسه يتكون من 4 خانات فقط
ممكن كل خانة تحتوى على ارقام من 0 الى 9 و حروف A-B-C-D-E-F
اى ان A = 10 و B =11 و C = 12 و D = 13 و E = 14 و F = 15
التحويل من binary الى hexadecimal format
بقوم بأخذ كل 4 خانات و احسب قيمة رقمها و ذلك من اليمين لليسار
بمعنى ان :
0110 : عند حسابها بالطريقة العادية نجد انها تساوى : 6
1001 = 9
0110 =2
0000 = 0
اذا الرقم يساوى : W#16#0296


كيفية حساب قيمة الرقم الممثل بطريقة hexadecimal :
W#16#0296
لو انا عايز احسب قيمة الرقم العددى :
نفس طريقة حساب binary و لكن الاساس 16 بدلا من 2
اذا الرقم بالصيغة العددية = 6*16^0 +  9*16^1 + 2*16^2 +  0*16^3 = 662


ثانيا : تمثيل العدد السالب بذاكرة نوعها integer

نجد ان اخر خانة ( رقم 15 ) تحتوى على 1 اى ان العدد سالب
كيفية التحويل من binary الى decimal
قيمة الرقم = 0*2^0 +  1*2^1 + 0*2^2 +  1*2^3 + 0*2^4 + 1*2^5 + 1*2^6 +  0*2^7 +  1*2^8 +  0*2^9 +  1*2^10 +  1*2^11 + 1*2^12 +  1*2^13 + 1*2^14 - 1*2^15 = - 662


الصيغة hexa decimal :
هنا من الخطا استخدام الصيغة hexa decimal فى تمثيل الرقم integer السالب لان hexa decimal format لا تعرف الاشارة السالبة
بمعنى لو انا حولت من binary الى hexa decimal بالطريقة المعتادة ( كل 4 خانات برقم )
0101 = 10 = A
0110 = 6
1101 =13 = D
1111 = 15 = F
اذا الرقم يساوى : W#16#FD6A ( الرقم ده خطا و لا يساوى -662 باى شكل من الاشكال )
لاثبات ذلك , لو حسبنا القيمة السابقة بالتحويل من hexa decimal الى decimal
قيمة الرقم  بالصيغة العددية = 10*16^0 +  6*16^1 + 13*16^2 +  15*16^3 = 64874
و ده رقم مختلف تماما عن - 662
نفهم من كدا ان لا يجوز انى استخدم الصيغة hexa decimal مع رقم integer سالب


الاعداد بصيغة Double integer و اختصارها DINT :

نفس طرق integer بالضبط و لكن الفارق هنا ان الرقم يحتوى على 32 bits
و هنا الرقم double integer يمكن ان يستوعب ارقام من - 2147483648 الى +2147483647 و ايضا يجب ان تكون الارقام ارقاما صحيحة فقط
يمكن تمثيل الارقام double integer  بثلاث طرق :
طريقة decimal و هى التمثيل العادى للرقم مثل +100787#L   و لاحظ انى كتبت #L عشان اعرف PLC ان ده رقم double integer
طريقة binary او ( bin ) اى نجد 32 خانة كل خانة تحتوى فقط على 0 او 1
طريقة Hexa-decimal و تحتوى هنا على 8 خانات 

طريقة تمثيل الرقم double integer الموجب

الصيغة decimal : نكتب 540809+#L
الصيغة binary : نجد 32 bit و تكون bit الاخيره تحتوى على 0 اى ان الرقم موجب
و لحساب الرقم فى حالة تمثيله بصيغة binary format
قيمة الرقم العددى = 1*2^0 +  0*2^1 + 0*2^2 +  1*2^3 + 0*2^4 +  0*2^5 + 0*2^6 +  1*2^7 +  0*2^8 +  0*2^9 +  0*2^10 +  0*2^11 + 0*2^12 +  0*2^13 + 1*2^14 +  0*2^15 + 0*2^16 +  0*2^17 + 0*2^18 +  1*2^19 + 0*2^20 +  0*2^21 + 0*2^22 +  0*2^23 +  0*2^24 +  0*2^25 +  0*2^26 +  0*2^27 + 0*2^28 +  0*2^29 + 0*2^30 +  0*2^31 = +540809


االصيغة hexa decimal :
للتحويل من binary الى hexa decimal نأخذ كل 4 ارقام و نحسبها بالطريقة العادية
1001 = 9
1000 = 8
0000 =0
0100 = 4
1000 = 8
0000 = 0
0000 =0
0000 = 0
اذا الرقم بالصيغة DW#16#00084089 = hexa decimal  ( لاحظ انى كتبت DW مش W عشان اوضح ان ده double integer )
للتحويل من hexa decimal الى القيمة العددية decimal
9*16^0 +  8*16^1 + 0*16^2 +  4*16^3 + 8*16^4 +  0*16^5 + 0*16^6 +  0*16^7 = +540809


طريقة تمثيل الرقم double integer السالب



الصيغة decimal : نكتب 540809- #L
الصيغة binary : نجد 32 bit و تكون bit الاخيره تحتوى على 1 اى ان الرقم سالب
و يمكن التحويل بنفس الطريقة من binary format الى decimal
الصيغة hexadecimal :
كما الحال فى integar data السالبة يكون لل double integer السالبة
اى انه من الخطا تمثيل القيمة double integer السالبة بالصيغة hexadecimal لان hexadecimal format لا تعرف الاشارة السالبة


 الارقام العشرية real و يطلق عليها ارقام floating point :

و هى الطريقة الوحيدة التى يقبلها PLC لتمثيل رقم عشرى
و يمكن ان يستوعب ارقام موجبة او سالبة
يحتوى الرقم floating point على 32 bits
طريقة تمثيل الرقم العشرى :
((Sign) • (1.f) • (2^(e-127)
بمعنى لو ان الاشارة موجبة
و F= 5
و e=126
اذا الرقم = 0.75

لاحظ ان : انا غير مطالب بكتابة الرقم عن طريق format السابق كل اللى بكتبه مثلا 200.76 و PLC يقوم بالتحويل الى الصيغة السابقة اوتوماتيكيا
كيفية توزيع الرقم على 32 bits

انظر الرسم الموضح :



الخانات من 0 الى 22 : تحتوى على قيمة المعامل f
الخانات من 23 الى 30 : تحتوى على قيمة المعامل e
الخانة الاخيرة : خانة الاشارة بحيث ان ( 0 = موجب , 1 = سالب )
الموجود بالرسم هو تمثيل الرقم 0.75


الاعداد بصيغة BCD : 

اختصار BCD يعنى Binary Coded Decimal 
توجد منه نوعان word و يحتوى على 16 bits و يستوعب ارقاما من -999 الى +999
 و double word الذى يحتوى على 32 bits و يستوعب ارقاما من -9999999 الى +9999999
اختصارا للوقت نستطيع ان نقول مجازا ان BCD هو التمثيل بصيغة hexadecimal مع امكانية تحديد الاشارة اى يحدد اذا كان موجب او سالب
بحيث ان اخر Bit تحتوى على الاشارة ( 0 تعنى موجب و 1 تعنى سالب )
انظر كيفية تمثيل العدد 296

نجد انه للتحويل من binary الى BCD
تم اخذ كل 4 bits و حساب قيمتهم بالضبط عند التحويل الى hexadecimal
و ايضا فى حالة BCD double word التى تتكون من 32 bits تم اخذ كل 4 خانات و حساب قيمتهم و تم حساب قيمة 8 ارقام بدلا من 4
من اشهر تطبيقات BCD format هى العدادات Counters و حسابات الوقت و التاريخ ( سيتم شرحهم فى درس اخر )

انتهى الشرح شكرا للمتابعة
هذا الشرح حصرى لموقع electrical engineering-eg نرجو عدم النقل


الأحد، 1 أكتوبر، 2017

شرح positive and negative edge فى siemens PLC

الكاتب elec egypt   بتاريخ   8:44 م   statement list

نكمل الدرس الخامس من كورس شرح siemens PLC
ها نشرح positive edge و negative edge
و ده يعتبر تكملة للدرس السابق شرح bit logic فى siemens PLC

رقم 11 : positive edge 
و ده امر يجعل ما قبله يعمل لمدة cycle واحدة فقط
بمعنى لو RLO قبل امر positive edge يساوى 1
يقوم positive edge بتشغيل ما بعده لمدة sycle واحدة

عندما يكون I 1.0 =1 و I 1.1 =1
يعمل M8.0 لمدة 1 cycle
انظر الرسم الموضح

طيب ايه M 1.0 اللى مكتوبه فوق امر POSITIVE EDGE ؟
ده مجرد marker عشان اخزن عليه نتيجة positive edge و اراعى انه لا يكون مستخدم فى اى مكان اخر فى البرنامج


امر positive edge فى لغة STL

فى اول سطر I 1.0 =1 لذلك تكون RLO =1
فى تانى سطر I 1.1 = 1 لذلك تكون RLO = 1 ايضا
عند استخدام positive edge و هو امر FP نجد ان RLO = 1 لمدة cycle واحدة فقط
لذلك M 8.0 تعمل لمدة cycle واحدة فقط


امر رقم 10 : negative edge و رمزه FN
و ده عكس positive edge تماما
اى عندما تتحول RLO قبلها الى 0
تقوم بالعمل و تشغيل ما بعدها لمدة cycle واحدة ايضا

عندما يكون I 1.0 =0 و I 1.1 =0
يعمل M8.0 لمدة 1 cycle
انظر الرسم الموضح

و ايضا M 1.1 هى مجرد marker لتخزين قيمة negative edge عليها

negative edge فى لغة STL


النوعين السابقين من positive edge و negative edge يتعامل مع RLO قبله اى مع حالة كل ما يسبقه
يوجد ايضا نوعان من positive edge و negative edge يسمى Address اى ليس له علاقة بحالة RLO قبله
و لكن يعمل على اساس marker المكتوب فوقه


رقم 14 : امر address positive edge 

هنا حالة positive edge او negative edge تعتمد على حالة الدخل I 1.1 فقط
M 10.0 و M 10.1 مجرد markers لتخزين قيم P edge و N edge

انظر الرسم 


عند استخدام لغة Statement list 

الفرق هنا استخدام الاقواس و ده عمل تخصيص positive او negative edge على I 1.1 فقط


انتهى الشرح و اى سؤال اتفضل اسأل فى تعليقات facebook

هذا الشرح حصرى لموقع electrical engineering يرجى عدم النقل

الأربعاء، 27 سبتمبر، 2017

شرح اوامر bit logic فى siemens plc

الكاتب elec egypt   بتاريخ   1:12 ص   STL

كنا وقفنا عند الدرس الثالث اللى شرحنا فيه ان scan cycle و عرفنا ازاى CPU بيقرا البرنامج و ينفذه
الرابط شرح scan cycle فى PLC Siemens

نكمل الدرس الرابع و ها نشرح اوامر البرمجة الاساسية فى لغة Ladder و لغة Statement list
ها نفتح FC 1 اللى عملناها و نفتح قائمة bit logic اللى على اليسار
نجد مجموعة من الاوامر اساسية فى اى برنامج بكتبه

شرح كل رمز حسب الرقم بجانبه
رقم 1 و 2
النقطة المفتوحة open contact و النقطة المغلقة closed contact  و ليهم حالتين
اول حاجة لو جه معاهم input خارجى من اى digital input module زى ما استخدم معاهم I0.0 مثلا
كدا لو استخدمت open contact يعنى بقول ان حالة النقطة ديه مماثل لحالة النقطة خارج PLC
و لو استخدمت closed contact معناها ان حالة النقطة مخالف لحالة النقطة خارج PLC
مثال : لو استخدمت I0.2 مع closed contact كدا لو الدخل حالته on خارج PLC ها يقوم البرنامج بعكس حالتها و جعلها OFF داخل network
و العكس صحيح يعنى لو حالة النقطة off خارج plc يقوم البرنامج بجعلها on داخل network


طب لو استخدمت open contact و closed contact مع marker M او timer T او اى حاجة software
كدا open contact معناها نقطة مفتوحة عادى خالص و closed contact معناها نقطة مقفولة
مثال على كدا مثلا فى الصورة السابقة ده برنامج start stop و تم شرحه بالتفصيل فى درس شرح blocks فى PLC Siemens


عايزين نكتب نفس البرنامج ده بس بلغة statement list
عشان ابدل بين لغات البرمجة الثلاثة بختار view ثم بختار اللغة المطلوبة

لاحظ ان تم التحويل تلقائيا من Ladder Diagram الى statement list
ملحوظة : اى برنامج Ladder diagram يمكن تحويله بالكامل الى statement list و العكس غير صحيح
يعنى بعض اكواد statement list يمكن تحويلها Ladder و البعض لا يمكن 

لكتابة نقطة مفتوحة فى statement list بكتب A + عنوان و اسم النقطة مثال
A I0.0
A M10.6
و هكذا
لحتابة نقطة مغلقة بكتب AN + عنوان و اسم النقطة
AN  I9.3
AN Q0.0
و هكذا

قبل الانتقال لرقم 3 لازم نفهم يعنى ايه RLO
RLO هو اختصار Result of Logic Operations اى نتيجة العمليات المنطقية
و ديه بتكون bit بيتخزن عليها نتيجة اى عملية منطقية على هيئة 0 او 1
مثال :
لو انا كتبت AN I0.0
و رحت شغلت الدخل I0.0 خليته ON
عند تطبيق السطر ده من البرنامج CPU ها يلاقى I 0.0 بواحد بس AN تقوم بعكس النقطة من open الى close و العكس
عشان كدا RLO فى حالة السطر ده من البرمجة ها يكون 0
لاحظ ان RLO بيتغير كل ما بعمل اى logic operation 


شرح رقم 3 : الامر NOT 
و ده يقوم بعكس حالة RLO قبله
يعنى لو قبل الامر NOT كانت RLO بصفر ها يحولها 1
و لو كانت RLO بواحد ها يحولها 0


انظر الصور التوضيحية


هام جدا : شرح حالة RLO عند كل خطوة و تأثيره على الخرج
بفرض ان كل الدخل شغال يعنى انا مشغل I0.0 و I0.1 و I0.2


رقم 1 : RLO = 1 و ده سببه ان I0.0 =1
رقم 2 :  RLO = 1 و ده سببه عملية AND بين عدد 2 دخل يعملان فتكون النتيجة 1
رقم 3 : RLO = 0 لان امر NOT قام بعكس حالة RLO قبله
رقم 4 : RLO = 0 و السبب عملية AND بين I0.2 التى تعمل و حالة RLO قبلها التى قيمتها 0
رقم 5 :  الخرج لا يعمل لان حالة RLO قبله مباشرا تساوى 0


شكل الكلام ده عند التحويل للغة Statement List

لاحظ الاتى : 

عشان اعمل coil او خرج يتم كتابة الرمز = و بعده اسم و عنوان الخرج و فى الحالة ديه رمز = يسمى assign
عشان اكتب اى كومنت فى اى سطر داخل statement list بكتب علامة / مرتين و اكتب اى كومنت و كدا CPU شايف الكلام بعد // مجرد كلام ليس له اى علاقة بالبرمجة
رقم 4 : الخرج او coil و ده ممكن يكون Q ( خرج من output module ) او marker M و غيرها


رقم 5 : علامة (#) :
ده معناه خرج وسطى Midline Output
و يتم استخدامه عند الحاجة لعمل خرج داخل سطر البرمجة نفسه


فى حالة الكود فى network رقم 2
بفرض ان I1.0 = 1
I 1.2 = 0
I 1.3 = 0
شرح كل خطوة
(1) RLO = 1 لان I 1.0 =1 اى يعمل
(2) RLO = 1 لان I 1.2 = 0 و عكسها = 1 و عند عمل AND بينها و بين RLO قبلها تكون النتيجة 1
(3) output Q1.0 =1 اى يعمل لان RLO قبله =1
(4) RLO = 0 لان I 1.3 = 0 و تم عمل عملية AND بينها و بين ما قبلها فكانت النتيجة = 0
(5) output Q0.2 = 0 اى لا يعمل لان RLO قبله = 0


البرنامج السابق بلغة steatement list 

لاحظ ان فى حالة statement list عشان اعمل midline output بستخدم الامر (=) عادى جدا
لاجظ كمان انى اضطريت استخدم السطر A Q 0.1 بعد midline output لان فى حالة statement list عند استخدام اى خرج يقوم البرنامج بعدها بالبدء من جديد اى لا يتذكر ما سبق
رقم 6 : امر Reset و اختصاره R
رقم 7 : امر Set و اختصاره S
اولا امر set
و هو يعتبر خرج عادى مثله مثل امر =
و لكن الفرق انه يقوم بتشغيل الخرج المكتوب عنده حتى بعد انقطاع التغذية قبله
مثال


لو  M5.0 = 1 الى يعمل
نجد ان Q10.0 = 1
طيب لو M5.0 اصبحت بصفر اى لا تعمل
نجد ان Q 10.0 تبقى ما هى تعمل اى = 1
و لكى يتم اطفاء Q 10.0 نحتاج الى امر Reset ( اختصاره R ) و هو عكس امر SET اى يقوم بتحويل الخرج المكتوب عليه الى 0

هنا عندما تكون M6.1 = 1 يتم اطفاء Q10.0 اى يصبح 0
المشكله هنا لو M5.0 =1 و فى نفس الوقت M6.1 = 1 كدا CPU ها يشغل Q10.0 و لا ها يطفيه ؟
الاجابة ان CPU دائما ينفذ اخر امر مر عليه
اذا هنا سوف يتم جعل Q10.0 =0


شكل اوامر set و reset فى حالة STL

رقم 8 و 9 : و هى اوامر RS و SR
و هى اوامر تجمع بين عملية set و عملية reset فى بلوك واحد و هذا فقط لتسهيل الاستخدام
RS اختصار reset and set : اى ان اخر عملية يتم تنفيذها هى set اى ان set لها الاولوية

بكتب اسم و عنوان الخرج المراد تشغيله فوق البلوك
هنا لو I 15.3 =1 نجد ان الخرج Q20.2 لا يعمل
و لو I 15.4 =1 نجد ان الخرج Q20.2  يعمل
و لكن ماذا لو ان I 15.3 =1 و I 15.4 =1 ؟
سوف يقوم البرنامج بتنفيذ الامر الاخير و هو امر set اى Q20.2 =1


العكس عند استخدام SR اى set and reset و هنا امر reset هو الاخير و له الاولوية 

فى حالة network 6
لو M2.0 =1 و M2.1 =1
نجد ان Q25.1 =0 
لان امر reset هو الاخير

الكود فى حالة استخدام STL


ملحوظة : السطر NOP 0 هو اختصار no operation
و ده سطر احيانا يقوم البرنامج بكتابته عند التحويل من LAD الى STL
و هو هنا ليس له اى اهمية و يمكن حذفه ايضا


رقم 12 : الامر SAVE
و ده امر يستخدم فى نقل القيمة الموجودة فى RLO الى bit تسمى BR و ديه ها يتم شرحها لاحقا عند شرح status bits و ده كمان اكثر من درس لانها حاجة more advanced


رقم 10 و 11 و 13 و 14 خاصين positive and negative edge و ده ها يتم شرحه الدرس القادم مباشرة


عملية OR بين اكثر من bit
امر OR فى حالة LAD يشابه بشكل كبير التوصيل توازى فى الكلاسيك كنترول 

مثال


لو M2.7 =1
و M2.6 =1
اذا تكون محصلتهم = 1
و اذا كانت I2.0 =1
اذا يعمل الخرج M8.0


شكل الكود بلغة STL


لاحظ ان قبل بداية عملية OR يجب استخدام  )
و بعد انتهاء العملية يجب استخدام (   


انتهى الشرح و اى استفسار اتفضل اسأل فى تعليقات facebook

هذا الموضوع حصرى لموقع electrical engineering يرجى عدم النقل

متابعى الموقع

Back to top ↑
كن على تواصل واتصال معنا

احذر.. الموقع محمى بحقوق الملكية الفكرية

Google+ Followers

© 2013 موقع الهندسة الكهربية . WP Mythemeshop Converted by Bloggertheme9
Blogger templates . Proudly Powered by Blogger .