You are on page 1of 9

‫منتدى التحكم اآللي واإللكترونيات (م‪ /‬حسن الشحات)‬

‫‪http://hassanheha.forumn.net‬‬

‫التحكم اآللي والحاكمات المنطقية‬


‫الفصل الثامن ‪ :‬التحكم في الحرارة‬
‫‪Hassan el shahat‬‬
‫دورة متقدمة في البرمجة ‪Advanced Course in Step7‬‬
‫تتضمن الدورة المتقدمة التي سنتحدث عنها إن شاء هللا في العناصر اآلتية‪:‬‬

‫منظومة التحكم ‪PID‬‬ ‫‪‬‬


‫العدادات فائقة السرعة ‪High speed counters‬‬ ‫‪‬‬
‫استخدام المدخالت والمخرجات الموزعة ‪Distributed Input /Output units‬‬ ‫‪‬‬
‫االتصال بين وحدتي معالجة ‪CPU 300 – CPU 300‬‬ ‫‪‬‬
‫االتصال بين ‪ CPU-300‬ودرايف سيمنس ‪Profibus‬‬ ‫‪‬‬
‫االتصال بين ‪ CPU-300‬و ‪S7-200‬‬ ‫‪‬‬
‫تتبع األعطال في منظومات ‪S7-300/400‬‬ ‫‪‬‬
‫عناصر المكتبة ‪Library‬‬ ‫‪‬‬

‫منظومة التحكم في الحرارة ‪( PID-Temperature Controller‬الجزء األول)‪:‬‬

‫تعتمد منظومة التحكم ‪ PID‬على إدخال قيمة للضبط ‪ SP_INT‬وقيمة فعلية إما ‪ PV_PER‬أو ‪ PV_IN‬ثم قياس الخطأ‬
‫بينهما ثم إعطاء قيمة معالجة ‪ LMN‬إما في شكل إشارة تناظرية أو رقمية أو في شكل نبضات ‪QPULSE‬‬

‫ويوجد هناك قسمان للمتحكم ‪ PID-Temperature Controller‬األول هو منظومة التحكم نفسها والثاني هو منظومة‬
‫الضبط أو التوليف ‪ Tuning‬لضبط بيانات تصرف الوحدة مع التغيرات‬

‫والعملية بشكل عام تتعامل مع مجموعة من المدخالت والمخرجات ‪ Inputs /Outputs‬منها منطقية ‪ BOOL‬ومنها‬
‫رقمية سواء كانت صحيحة ‪ INT‬أو مضاعقة الدقة ‪ DINT‬أوعشرية ‪ REAL‬أو قيم وقت ‪S5T‬‬

‫ويتم تمرير البيانات إما بشكل مباشر من وإلى البلوك عند استدعائه أو إلى بلوك البيانات المصاحب ‪Instance Data‬‬
‫‪Block‬‬

‫أما عن إدخال القيمة الفعلية للحرارة فيتم هذا عن طريق حساس للحرارة ‪ Temperature Sensor‬باألشكال القياسية‬
‫المتعارف عليها و قراءة ذلك عن طريق مدخل تناظري يتناسب مع الحساس المستخدم وسوف نستعرض فيما يلي كيفية‬
‫إدخال قيمة الحرارة إلى البرنامج‬
‫من أنواع حساسات الحرارة المستخدمة في قراءة درجة الحرارة‪:‬‬

‫‪ -‬الثرموكبل ‪ Thermocouples‬بأنواعها المختلفة ‪B, E, J, K, L, N, R, S, T, U, C‬‬


‫‪ -‬المقاومات ‪ RTD‬بأنواعها ‪Pt100, Pt200, Pt500, Pt1000, Ni100, Ni120, Ni1000, Cu10‬‬

‫وهذه األنواع يتم توصيلها على وحدات مجهزة لذلك بعدد قنوات إدخال محددة تمثل عدد المدخالت التناظرية الممكن‬
‫قراءتها مثل الوحدة ‪ Analog input module AI8xRTD, 16bits ، 6ES7 331-7PF01-0AB0‬والتي يمكن أن‬
‫يوصل عليها ‪ 8‬حساسات من أنواع ‪ RTD‬المختلفة‬

‫كذلك الوحدة ‪ Analog input module AI8xTC, 16bits ، 6ES7 331-7PF10-0AB0‬والتي يمكن أن يتم توصيل‬
‫‪ 8‬حساسات عليها من األنواع ثيرموكبل‬

‫فيتم أوال تحديد أنواع الثرموكبل والوحدات التي سيتم استخدامها بناء على ذلك مثال لو كنا سنستخدم حساس ثرموكبل‬
‫النوع ‪ K‬عدد ‪ 8‬وحدات وسوف نستخدم وحدة ‪Analog input module AI8xTC, ، 6ES7 331-7PF10-0AB0‬‬
‫‪ 16bits‬فسوف نقوم بفتح ‪ HW_Config‬ثم إدراج الوحدة ضمن مكونات النظام‬

‫ثم نقوم بتحديد نوع الحساس من خصائص الوحدة‬


‫مع مالحظة عنوان البداية والقنوات المختلفة والذي سوف نستخدمه داخل البرنامج‬

‫الحظ أن العناوين المتضمنة هي‬


‫‪PIW368‬‬
‫‪PIW370‬‬
‫‪PIW372‬‬
‫‪PIW374‬‬
‫‪PIW376‬‬
‫‪PIW378‬‬
‫‪PIW380‬‬
‫‪PIW382‬‬
‫وهي ‪ 8‬قنوات إدخال كما ذكرنا‬
‫سابقا‬

‫وهنا إن أردنا إدخال قيمة الحرارة مباشرة من الحساس إلى منظومة ‪ PID‬فإن موضع الدخول سيكون ‪ PV_PER‬حيث‬
‫يتم نقل القيمة ‪ PIW368‬مثال إلى ‪ DATA Word‬التي تمثل ‪PV_PER‬‬

‫‪L PIW 368‬‬

‫‪T DBx.DBW4‬‬ ‫‪x: Data Block no.‬‬

‫كما يمكن معالجة القيمة بشكل منفصل لتحويلها إلى رقم عشري يمثل درجة الحرارة أو نسبة مئوية أو كما يرغب‬
‫المبرمج مع مالحظة أنه في الحساسات العادية فإن درجة الحرارة يتم قراءتها برقم صحيح مضروب في ‪ 01‬فمثال ‪52‬‬
‫درجة مئوية تقرأ بالقيمة ‪ 521‬والدرجة ‪ 032‬تقرأ بالقيمة ‪ 0321‬وذلك للحصول على كسر من درجة الحرارة فتصبح‬
‫دقة القراءة حتى ‪ 1.0‬درجة مئوية ولو أردنا مثال الحصول على قيمة عشرية لتمريرها إلى ‪ PV_IN‬حيث صيغته ‪REAL‬‬

‫‪L PIW 368‬‬

‫‪ITD‬‬

‫‪DTR‬‬

‫‪L 10.0‬‬

‫‪/R‬‬

‫‪T DBx.DBD0‬‬ ‫‪x: Instance Data Block number‬‬

‫وهكذا نكون قد قمنا بإعداد طريقة إدخال القيمة الفعلية للمنظومة بشكليها المباشر من المدخل التناظري أو من مصدر‬
‫بيانات معالج‬

‫أما عن القيمة التي نضبط عليها العمل أو المطلوب الوصول إليها ‪ Set value‬فإنه يتم تمريرها إلى ‪ Data Block‬إلى‬
‫المتغير ‪ SP_INT‬حيث يتم تمريرها في شكل رقم عشري بصيغة ‪ REAL‬تمثل درجة الحرارة المطلوب الوصول إليها‬
‫عن طريق عملية التسخين‬
‫أما عن معالجة اإلشارة وكيفية عمل منظومة ‪ PID‬فإن هذا يتضح لنا من الشكل التالي‪:‬‬
‫لو استعرضنا الشكل السابق فسوف نجد فيه البيانات اآلتية‪:‬‬

‫منطقة تحديد بيانات الضبط وقراءة القيمة الفعلية ‪ SP_INT‬و ‪ PV_IN‬أو ‪PV_PER‬‬ ‫‪-‬‬
‫منطقة تهيئة القيمة الفعلية إن كانت ‪ PV_PER‬أي من مدخل تناظري مباشرة حيث يتم اختيار الدقة سواء كانت‬ ‫‪-‬‬
‫‪ 1.0‬أو ‪ 1.10‬أو نسبة ‪ %‬عن طريق ‪ )5-0-1( PER_MODE‬ثم تحديد المقياس ونقطة الصفر ‪Offset,‬‬
‫‪ Scale‬عن طريق ‪ PV_FAC‬و ‪ PV_OFFS‬ويتم االختيار بين ‪ PV_IN‬وبين ‪ PV_PER‬عن طريق‬
‫‪ PVPER_ON‬وهو مفتاح تحويل وصيغته ‪ Binary‬يحدد أي من الطريقين ستمر من خالله القيمة الفعلية‬
‫بعد إدخال القيمتين )‪ SP(Set Point‬و )‪ PV(Process Value‬يتم تكوين الفرق بين االثنين ‪ ERROR‬في‬ ‫‪-‬‬
‫المتغير ‪ ER‬والذي ستتم عليه المعالجة في كل المراحل التالية‬
‫أو منطقة يدخل عليها الخطأ ‪ ER‬هي منطقة ‪ Dead Band‬عن طريق المتغير ‪DEADB_W‬‬ ‫‪-‬‬

‫منطقة ‪ Dead Band‬هي منطقة لنطاق معين للخطأ ال يتم النظر إليه حتى ال تحدث عملية أرجحة حول قيمة معينة‬
‫للمنظومة ‪ Oscillation‬فلو كان الخطأ أقل من حدود ‪ Dead Band‬أو المنطقة الميتة ال يعتبر تغيير في القيمة‬

‫واآلن معنا الخطأ بين القيمة المطلوبة والقيمة الفعلية والمطلوب عالجه ليصل النظام إلى القيمة المطلوبة تماما بشكل‬
‫ناعم ‪ Smooth‬وذلك من خالل مجموعة من العمليات المتتابعة والمتوازية وأول هذه العمليات هو تكبير الخطأ عن‬
‫طريق ‪ GAIN‬إلى الحد المطلوب للدقة ويمكن أن يكون التكبير بالضرب في قيمة أكبر من أو أقل من ‪ 0.1‬وكذلك‬
‫باإلشارة فيمكن أن يتم تكبير الخطأ ‪ ER‬بإشارة موجبة أو إشارة سالبة لنحصل على خطأ مكبر بالضرب في قيمة ‪GAIN‬‬
‫وتتفرع بعد ذلك العملية إلى ثالث طرق بالتوازي لتتعامل مع إشارة الخطأ المكبرة بعد المرور على ‪GAIN‬‬
‫‪ -‬الطريق األول وهو ‪ Kp‬عن طريق ‪ PFAC_SP‬وهو معامل يمثل ‪ Kp‬حيث يتم ضرب القيمة في الخطأ‬
‫‪ -‬الطريق الثاني وهو ‪ )Integral( Ki‬عن طريق المجموعة ‪ INT‬وهي‪:‬‬
‫‪ ‬معامل ‪ Ki‬ويمثله ‪( TI‬قيمة وقت)‬
‫‪ ‬ويمثل المعامل ‪ I_ITL_ON‬حالة تفعيل العملية ‪TI‬‬
‫‪ ‬ويمثل العامل ‪ I_ITLVAL‬القيمة المبدئية للمعامل ‪TI‬‬
‫‪ ‬وهناك مخرجان ‪ BOOL‬وهما ‪ INT_HPOS‬و ‪ INT_HNEG‬وتتحول حالة كل منهما إلى "‪ "0‬في حالة‬
‫الوصول إلى الحد األقصى الموجب أو السالب والذي يتم إدخاله كقيمة قصوى‬
‫‪ -‬الطريق الثالث وهو ‪ )Differential( Kd‬عن طريق المجموعة ‪ DIF‬وهي‪:‬‬
‫‪ ‬معامل ‪ Td‬ويمثله ‪( TD‬قيمة وقت)‬
‫‪ ‬معامل المقياس وهو ‪ D_F‬أي ‪Derivative factor‬‬

‫وبالتالي نحصل على ثالث قيم للمعالجة بالتوازي وهي ‪ LMN_P‬و ‪ LMN_I‬و ‪ LMN_D‬حيث يتم جمعها معا وإضافة‬
‫قيمة هي ‪ DISV‬وتمثل قيمة مضافة إلى المجموع إن كان هذا مطلوبا وإال نحصل على مجموع المعالجات الثالثة لتعطي‬
‫قيمة ‪ LMN_Sum‬والتي تمثل الخطأ بعد معالجته عن طريق المتحكم ‪ PID‬ويتبقى تمرير هذه القيمة إلى وسائل التحكم‬
‫الخارجية والتي تتيح لنا التحكم الفعلي في الحرارة‬

‫أول منطقة تمر عليها اإلشارة المعالجة هي منطقة ‪ Control zone‬ويتم فيها تحديد تفعيل عمل ‪ Control zone‬عن‬
‫طريق ‪ CONZ_ON‬وهو متغير من النوع ‪ BOOL‬فإن كانت حالته "‪ "0‬يتم تفعيل عمل ‪ Control zone‬حيث يتم‬
‫احتساب الخطأ ‪ ER‬فإن تجاوزت قيمته قيمة المتغير ‪ CON_ZONE‬فإنه في هذه الحالة يتم تمرير القيمة القصوى‬
‫الموجبة أو السالبة لإلشارة المعالجة ‪ LMN_LLM‬أو ‪ LMN_HLM‬أما إن كان الخطأ ‪ ER‬داخل حدود ‪Control Zone‬‬
‫فيتم توصيل ‪ LMN_Sum‬من خالله دون تغيير للمرحلة التالية‬

‫المرحلة التالية وهي إخراج القيمة المعالجة عن طريق المنظومة أو إخراج قيمة أخرى يدويا حيث يمكن عن طريق‬
‫معامل مفتاح اختيار ‪ Selector switch‬االختيار بين القيمة المعالجة والقيمة اليدوية والتي يمكن إدخالها في المتغير‬
‫‪ MAN‬عن طريق المفتاح ‪ MAN_ON‬والذي يجب أن يكون في الحالة "‪ "1‬حتى تعمل المنظومة آليا‬
‫المرحلة التالية وهي مرحلة الحد األقصى واألدنى ‪ Limiting‬حيث يتم تحديد حد أقصى للقيمة المعالجة وهو‬
‫‪ LMN_HLM‬وحد أدنى هو ‪ LMN_LLM‬وفي حالة تجاوز أي منهما فإن هناك مخرجان لقياس ذلك وهما من النوع‬
‫‪ BOOL‬تتحول حالتهما إلى "‪ "0‬عن تجاوز القيمة وهما ‪ QLMN_HLM‬و ‪ QLMN_LLM‬وبالتالي نحصل بعدها على‬
‫اإلشارة بعد التحديد‬

‫وندخل بعد ذلك إلى مرحلة اإلخراج النهائي للمنظومة والذي يتم توجيهه إما إلخراج نبضات ‪ Pulses‬عن طريق مولد‬
‫نبضات ‪ PULSEGEN‬يتعامل بنظام ‪ PWM‬حيث يتغير عرض النبضة طبقا لقيمة ‪ LMN‬بنسبة من قيمة قصوى مثال إن‬
‫كان الزمن الكامل للنبضة هو ‪ 0‬ثانية فيكون التغيير من ‪ 1.1‬وحتى ‪ 0.1‬ثانية حسب قيمة ‪ LMN‬وهذا له جزء خاص‬
‫سنتحدث عنه تفصيليا فيما بعد إن شاء هللا‬

‫أما االختيار الثاني فهو إخراج القيمة في شكل رقم فبعد معالجته بمقياس ‪ LMN_FAC‬و ‪ LMN_OFFS‬يتفرع أيضا إلى‬
‫فرعين األول في شكل رقم عشري كما هو من المنظومة في المتغير ‪ LMN‬والثاني في شكل رقم صحيح يمكن تمريره‬
‫مباشرة إلى مخرج تناظري عن طريق ‪LMN_PER‬‬

‫واآلن بعد أن استعرضنا معا كيف تعمل منظومة ‪ PID‬نبدأ في التعرف على توظيف ‪ PID‬داخل برنامج ‪STEP-7‬‬

‫أوال ‪ :‬البد من تحديد نوع المنظومة هل ستكون ‪ PID‬أم ‪ PI‬فقط حيث يفضل الكثيرون استخدام منظومة ‪ PI‬فقط ويتم هذا‬
‫عن طريق المتغير ‪ PID_ON‬فإن كانت قيمته "‪ "0‬تكون المنظومة ‪ PID‬وإن كانت قيمته "‪ "1‬تكون المنظومة ‪ PI‬فقط‬

‫ثانيا ‪ :‬البد من تحديد الخيارات المنطقية كلها أوال مثل ‪ PV_PER‬و ‪ MAN_ON‬و ‪ CONZ_ON‬والتي ستشكل شكل‬
‫استخدام وعمل المنظومة‬

‫ثالثا ‪ :‬البد من تحديد قيم ‪ DEADB_W‬و ‪ CON_ZONE‬و ‪ LMN_HLM‬و ‪LMN_LLM‬‬

‫رابعا ‪ :‬البد من تحديد هل سيتم استخدام ‪ Pulse generator‬أم ال حيث يتم توظيف االستخدام لذلك ‪PULSE_ON‬‬
‫ويتم كذلك تحديد زمن دورة التسخين ‪ PER_TM‬وأقل وقت للتسخين ‪BREAK_TM‬‬

‫ويتم استدعاء البلوك ‪ FB58‬والذي يحمل االسم الرمزي "‪ "TCONT_CP‬داخل أحد بلوكات التنظيم ‪ OB‬الدورية مثل‬
‫‪ OB35‬والذي يتم استدعاؤه كل فترة زمنية محددة ‪ Cyclic Interrupt‬وبالتالي نضمن عمال مرتبطا ارتباطا فعليا‬
‫بالوقت الحقيقي ‪ Real Time‬حيث تكون دورة تنفيذ ‪ OB35‬من مضاعفات دورة تنفيذ عملية ‪ PID‬حيث يوجد عامل‬
‫اسمه ‪ Cycle‬يحدد دورية عمل ‪ PID‬والذي يجب أن يرتبط مع دورية عمل ‪ OB35‬كما ذكرنا‬

‫يتم استدعاء ‪ FB58‬مع تحديد ‪ DB‬المصاحب والذي‬


‫سيتم تمرير جميع البيانات الخاصة بالتشغيل إليه من‬
‫خالل البرنامج‬
‫وال يلزم هنا تمرير بيانات إلى ‪ FB58‬حيث يمكن‬
‫استدعاؤها كما بالشكل المقابل تماما ودون أي شئ‬
‫باستثناء ذكر رقم بلوك البيانات والذي سيتم إنشاؤه‬
‫وتوصيفه عن طريق البرنامج وال دخل لنا بذلك فقط‬
‫سنقوم بتمرير القيم إلى البلوك باستخدام األمر‬
‫‪ Transfer‬مثال وقراءة القيم التي نريدها إن كانت‬
‫رقمية عن طريق األمر ‪ Load‬مثال‬
‫أما المخرجات ‪ BOOL‬فيتم استخدامها مباشرة في‬
‫العمليات المنطقية مثلها مثل أي متغير منطقي‬

You might also like