سایت اقدام پژوهی - گزارش تخصصی و فایل های مورد نیاز فرهنگیان
1 -با اطمینان خرید کنید ، پشتیبان سایت همیشه در خدمت شما می باشد .فایل ها بعد از خرید بصورت ورد و قابل ویرایش به دست شما خواهد رسید. پشتیبانی : بااسمس و واتساپ: 09159886819 - صارمی
2- شما با هر کارت بانکی عضو شتاب (همه کارت های عضو شتاب ) و داشتن رمز دوم کارت خود و cvv2 و تاریخ انقاضاکارت ، می توانید بصورت آنلاین از سامانه پرداخت بانکی (که کاملا مطمئن و محافظت شده می باشد ) خرید نمائید .
3 - درهنگام خرید اگر ایمیل ندارید ، در قسمت ایمیل ، ایمیل را بنویسید.
در صورت هر گونه مشکل در دریافت فایل بعد از خرید به شماره 09159886819 در شاد ، تلگرام و یا نرم افزار ایتا پیام بدهید آیدی ما در نرم افزار شاد : @asemankafinet
با گسترش روز افزون صنایع قطعه سازی و ایجاد رقابت در تولید قطعات با کیفیت برتر، اندازه گیری و کنترل کیفیت از جایگاه مهم و ویژه ای برخوردار است.چرا که اندازه گیری و به کارگیری روش های مناسب برای کنترل خط تولید برای تولید قطعات همسان (در محدود تولرانس) وظیفه واحد کنترل کیفیت بوده که با تهیه کردن سخت افزار ها و نرم افزارهای موردنیاز وبا ایجاد و به کارگیری روشهای مناسب برای کنترل قطعات تولید، بهترین راهنمای واحد تولید برای تولید قطعات با کیفیت با کیفیت مناسب و تیراژ ممکن است که در نتیجه از تولید قطعات معیوب جلوگیری می کند.
جهت کنترل اجباری بعضی از قطعات به مواردی برمی خوریم که نمی توان از وسائل اندازه گیری عمومی مانند کولیس، میکرومتر، ساعتها اندیکاتور و.... استفاده نمود در چنین مواردی می توان از دستگاه اندازه گری سه بعدی CMM استفاده نمود.این دستگاه از یک میز دقیق به همراه 3 خط کش دیجیتالی و الکترونیکی که برروی آن یک بازوی متحرک تعبیه شده است تشکیل شده است. و با حرکت این بازو در فضا می توان مختصات نقاط مورد اندازه گیری را از روی خط کش ها اندازه گیری نمود. با استفاده از نرم افزار آن می توان گزارش های اندازه گیری شده را مورد بررسی قرار داد. به طور کلی ساختار CMM روی یاتاقانها هوا شناور است به همین جهت نیرها قابل اغماض و ناچیز بوده و با مراقبت مناسب می توان تا ده ها سال از آن استفاده نمود. به گفته براین سامپسون (Brian Sampson) مدیر خدمات
پشتیبانی درLKINE تولید کننده CMM طول عمر این دستگاه را به طور بالقوه بینهایت می داند ولی به هر جهت برای افزایش طول عمر CMM قطعات
مکانبکی ماشین همچون سیستمهای هدایتی، سیستمهای اهرمی، ترازهای شمارنده و قرقره ها و همچنین کنترل کنده CMM و نرم افزار آن نیاز به تعویض خواهد داشت. نرم افزارها دست کم هر 2 سال به روز می گردد و با کمترین هزینه ارتقاء سطح می یابند.
این دستگاه ها که به عنوان یک مرکز اندازه گیری محسوب می شوند دارای 3 محور حرکتی x، y،z می باشند و در بعضی از آنها از محور چرخشی c نیز استفاده می شود. اساس کار این دستگاه ها ر تجزیه تحلیل نقاطی که توسط پرابهای اندازه گیری روی قطعه لمس شده است می باشد این تجزیه تحلیل توسط یک رایانه که مجهز به نرم افزارهای ویژه ای می باشد انجام می شد.
یک دستگاه CMM را می توان از دو جهت نرم افزاری و سخت افزاری مورد مطالعه قرار داد.
سخت افزار: قسمت ها ی مختلف یک دستگاه CMM عبارتند از :
1- راهنمای محورX :این قطعه همجنس میز دستگاه و از گرانیت می باشد که توسط چند پچ به میز ماشین ثابت می شود. و شش تا هشت بالشتک هوایی این قطعه را از سه یا چهر طرف احاطه کرده اند. میز این دستگاه ها در ابعاد متنوعی ساخته می شوند.CMM هایی که جهت کنترل قطعات بسیار دقیق ساخته می شوند ابعاد کوچکتری دارند. به عنوان مثال 500 ´ 500 mm و حتی کوچکترو CMM هایی که جهت کنترل قطعات بزرگ ساخته می شودند دارای ابعادی در حدود6000´4000mm و حتی بزرگتر می باشند. این میز توسط سه پایه بر روی بستر خود تنظیم م شود.
2- قوای محرکه سیستم : یک دستگاه سه بعدی دارای سه یا چهار موتور الکتریکی می باشد. سه موتور برای جابه جایی محورهای x،y،z ویک موتور جهت دوران محور c.این موتورها بر روی مورها نصب شده اند و توسطیک چرخ تسمه و یک کلاج الکتریکی و یک پولی دوران خود را به میله کشش منتقل می کنند و محورها را جابه جا می نماند.
موتورها از بین برق دستگاه تغزیه می شوند و قادرند با سه سرعت متفاوت عمل کنند و از کامپیوتر و joystick فرمان می گیرند.
3- روکش بالشتکهای هر سه محور :این روکشها از جنس فلز یا نوعی پلاستیک و یا الیاف فشرده چوب ساخته می شوند و از بالشتکها و سیم ها و لوله های عبور هوا و تجهیزات موتوهای الکتریکی محافظت به عمل می آورند.
بالشتکها و مسیر آنها بسیار حساس می باشند زیرا بالشتکها ویفه دارندبدون ایجاد تماس و سایش محورها را بر روی یکدیگ به حالت تعلیق نگهدارند بدون ایجاد تماس و سایش محورها بر روی یکدگر به حالت تعلیق نگهدارند تا محورها به راحتی جابه جا شوند. ین بالشتکها از چهار طر محور x ،y،z را احاطه کرده اند و هنگامی که جریان هوا در زیر بالشتکها برقرار م شود فاصله ای بین 0.005mm الی 0.010mm بین بالشتکها و مسیر بالستکها ایجاد می شوند. کنترل جریان هوای بالشتکها توسط شیرهای الکتریکیاجام می شود. و این شیرها جهت قطع و وصل کردن جریان هوا از joystick فرمان می گیرد.
4- خط کش: هر محور دستگاه دارای یک خط کش می باشد. این خط کش از جنس شیشه و ترکیی از نوعی فلز می باشد که آن را تقسیم بندی کرده است. این خط کشهابر روی محورها نصب شده ان و ضمن حرکت کحور تقسیمات آن توسط یک چشم الکترونیکی خوانده و تجزیه و تحلیل می شود.
معروفترین سازنده این خط کش ها که محصولات خود را در ابعاد وسیعی ارائه می دهد شرکت HEIDEN HAIN می باشد و این خط کشها در ماشنهای ابزار CNC نیز کاربرد فراوان دارند.
5 و 6- پل فلزی و ستون راهنمای محور Y:این ستون از دو طرف بر روی دو ستون دیگر قرار گرفته است.ای ستون که راهنمای محور Y دستگاه
محسوب می شودبا دقت 0.001 / 500 mm بر حسب محور X دستگاه عمود است. بر روی این ستون خط کش محور Y بسته شده است و مانند محور X دارای الکتروموتور است.این ستون که مقطع آنبه شکل مستطیل یا ذوزنقه می باشد دارای بعاد بسیار دقیق و کیفیت سطح عالی می باشد. زیرا از چهار طرف توسط هشت عدد بالشتک احاطه شده است. تجهیزات الکترونیکی و ستون محور Z و نگهدارنده بالشتکهای محورYوZ و همچنین تجهیزات تعادلی محور Z که درون ی جعبه قرر دارند درطول این محور حرکت می کند.
7- ستون محور:Zاین محوربه سطح میز ماشین عمود است و به بالا و پائین حرکت می کند.و ازچهار طرف توسط هشت عدد بلشتک احاطه شده است.این ستون در بالا توسط یک دکمه به موتورالکتریکی ارتباط دارد و توسط یک کابل فلزیه تجهیزات تعادلی ارتباط دارد.این ارتباط جهت ایجاد یک حرکت کنترل شده و بدون ارتعاش وجود دارد و همچنین هنگامی که دستگاه خاموش است محور در اثر وزن خود به طرف پائین حرکت نکند به میز برخورد ننماید. در قسمت پائین این محور تجهیزات پراپ گیر بسته می شودکه در بعضی از ماشینها این پراپ گیر می تواند به صورت اتوماتیک°±180 دوران کند.
8- قطعه تعادل ستون محور Z: این تجهیزات شامل وزنه ای تقریبا" هم وزن محور Z سته شده است و توسط یک کابل فلزی که از بالای یک قرقره عبور کرده است و به انتهای محور Z بسته شده است و سبب می شود که الکتروموتور محور Z با یک سرعت کنترل شده و با نیروی بسیار کمی محور Z را بالا کشیده و پائین ببرد. این تجهیزات می تواند به صورت یک سیلندر و پیستون باشدکه توسط هوای فشرده تغذیه می شود.
9- کابین برق :در این جعبه جریان پس از عبور از کلید اصلی وارد مدار هاو بردهایی می شود و سپس به قسمتهای مختلف دستگاه فرستاه می شود. در ضمن بردهایی درون کابین وجود دارد که پیام های دستگاه پراپ را دریافت کرده، و به ورت مختصات محاسبه کرده و به کامپیوتر دستگاه می فرستد.
همچنین بردهایی که دستورات اپراتور را از طریق کامپیوتر به سیستم پراپ می دهد و یا پیام هایی مبتنی بر حرکت محورها که توسط joystick ارسال می شود را به موتورهای الکتریکی دستگاه می فرستد و به صورت همزمان همه قسمت ها را با یکدیگر در تماس نگه می دارد، در این کایبن جاسازی شده است.
10- کامپیوتر: به همراه هر دستگاه یک کامپیوتر مانیتور و چاپگر و سایر تجهیزات جانبی وجود دارد. ظرفیت حافظه کامپیوتر متناسب با نرم افزار دستگاه و سیستم عاملی است که بر روی آن قرار دارد.
11- سیستم حساس(پراپ)Probe system: حساسه ها وسایلی هستند که از جنس یاقوت مصنوعی و به شکل کروی- دیسکی –استوانه ای کاسه ای و در قطرها و طول های مختلف ساخته می شود. این حساسه ها توسط وسائل الکترونیکی به واحد کنترل دستگاه CMM متصل می باشند.بابرخورد این حساسه ها به سطح قطعه کار و با وارد کردن حداقل 10 گرم نیرو کافی است مختصات نقطه مورد نظر در واحد کنترل دستگاه ثبت
گردد. یکی از نکات مهم در حساسه ها تعداد و ترتیب قرار گرفتن آنها می باشند.دستگاه CMM معمولا" می تواند از 1تا5 پراپ را کنترل کند .معمولا" با
توجه به پیچیدگی سطوح ودقت اندازه گیری و نحوه قید و بند به تعداد پراب
ها و طول و نوع آن تعیین می گردند، حساسه ها در دو نوع مکانیکی الکترونیکی و لیزری ساخته می شوند.
الف- حساسه های مکانیکی- الکترونیکی: این حساسه هابا لمس سطوح سیگنالهایی به واحد کنترل مرکزی ارسال می کنند .
ب- حساسه لیزری: بعضی از دستگاه های CMMمجهز بهسیستمی می باشند که می توان به کمک آن بدون لمسقطعه توسط پراب قطعات را اندازه گیری کرد.از این سیستم برای اندازه گیری قطعات اسفنجی یا جدار نازک پلاستیکی می توان استفاده کرد.زیرا در این نوع قطعات با برخورد پراب به قطعه دفرمگی در قطعه ایجاد شده و اندازه واقعی دچار خطا می شود.در ضمن در مورد قطعاتی که محلی برای برخورد پراب ندارند نیز می توان ازاین سیستم استفاده کرد.نرم افزار ین دستگاه ها قادر است چنین پرابی را درحافظه خود نگه دارد.البته مشخصاتی که نرم افزار جهت شناسایی یک پراب به آن نیاز دارد عبارت است از :1-قطر پراب 2- مختصات مرکر کره پراب.
12 - سنسورهای توقف اضطرری:محور X و Y این گونه دستگاه ها دارای میله کشش است . میله کشش از بین بلبرینگ و یک فولی عبور کرده و گردش الکتروموتور سبب می شود که فولی گردش کرده و چون فولی تحت نیروی منابس با میله کشش در تماس است ایجاد یک حرکت خطی نموده و محورها را بر روی راهنماهایشان جا به جا می نماید. اما حرکت محور X وY و همچنین محور z محدود است یعنی بستگی به طول محور دارد . بنابراین پیشبینی شده ست که اگر اپراتور هنگام جابه جایی محورها متوجه نشود که محور به انتهای کورس خود رسیده وسیله باید موتور الکتریکی را از کار
پیشبینی شده است که اگر این سنسورها عمل نکند stop هایی از جنس لاستیک در ابتدا و انتهای کورس بعد از stop های سنسور الکتریکی روی محور و راهنما بسته می شود تا سیستم را با قدرتی مطمئن نگه دارد.
همان طور که اشاره شد این دستگاه ها بسیار حساس بوده و نیاز به مراقبت شدید دارد سیستم تعلیق دستگاه که توسط قشار هوا انجام وظیفه می کند مجهز به یک واحد مراقبت است این واحد مراقبت دارای فیلترهایی است که رطوبت و چربی هوای فشرده را تا حد ممکن جدا می کند و درون مخازنی می ریزد.این مخزن ها باید به موقع تخلیه شده و فیلترهای درون آن به موقع تعویض شود تا رطوبت و چربی به زیر بالشتک ها را پیدا نکد زیرا سبب خرابی آنها می شود.
در شروع هر سیکل کاری اپراتور باید قبل از حرکت دادن دستگاه مسیر حرکت بالشتک ها را تمیز نماید تا وجود ذرات خارجی و گردوغبار ،این سطوح بسیار دقیق را دارای خش و زدگی ننماید.
همچنین سازنده تست هایی را جهت اطمینان از صحت کار دستگاه پیشنهاد می کند و دوره ای را برای انجام ای تست ها در نظر می گیرد .به عنوان مثال تست عمود بودن محور z بر میز دستگاه باید هر دو ماه یکبار انجام گیرد و تست تراز بودن میز ماشین باید هر 6 ماه یکبار انجام گیرد.
13- کره مبنا: وسیله ای برای کالیبره کردن و معرفی پراب ها و قطر و موقعیت آنها به کار می رود که لازم است قبل از شروع اندازه گیری و هر بار خاموش و روشن کردن دستگاه ابتدا پراب ها با کره مبنا کالیبره و سپس اقدام به اندازه گیری نمائیم، اندازه کره مبنا روی ستون آن به سه رقم اعشار نوشته شده است که توسط اپراتور در هنگام کالیبره کردن پراب ها به کامپیوتر داده می شود.
14 -سنگ گرانیتی: با توجه به دقت عمل این دستگاهها و دقت اندازه گیری و اصول اندازه گیری باید ابتدا سطح اف و مبنایی داشته باشیم تا بتوان قطعه را نسبت به آن سطح محکم کرده و سپس نسبت به سطح مبنا(رفرنس) اندازه گیری را آغاز کرد. این سنگهای گرانیتی توسط ابزارهای دقیق سنگ سمباده و شابر و نیروی انسانی با دقت زیاد ساخته می شود و مورد استفاده قرار می گیرد. این سنگها در ابعاد گوناگون ساخته و پایه و ستون دستگاه را شامل می شود. و وسائل اندازه گیری ستونها، محورها و بلکه متعلقات دستگاه CMM روی آن قرار دارند. و این سنگ توسط 3 الی 5 پایه بر روی زمین قرار می گیرد و نیز سنگ باید توسط تراز نسبت به زمین در حد صدم تراز شود.
15- مجموعه ریدرهنگ (digtalreidrout) :این مجموعه روی ستون در مقابل خط کش نصب می گردد و با عبور خط کش از جلوی آن اندازه ها را می خواند و سیگنالهایی به واحد کنترل سیستم داده تا اپراتوربتواند اندازه ها را روی صفحه نمایش بخواند.
نرم افزار وظیفه دارد که بین اپراتور و اجزاء متحرک سخت افزار ارتباط بر قرار کند همچنین داده ها را پردازش نماید. یک دستگاه CMM علاوه برکنترل مواردی که قبلا" ذکر شد قابلیت پردازش اطلاعات به صورت آماری و گرافیکی را دارا می باشد.
بعضی از این دستگاه ها را هنگام اندازه گری فقط به صورت دستی و با joystick می توان هدایت کرد ولی گونه هایی نیز ساخته شده اند که برای اندازه گیری برنامه نویسی می شوند یعنی می توان برای یک قطعه یک مرتبه برنامه نویس کرد و این برنامه را در حافظه کامپیوتر نگهداری نمود و برای دفعات بعدی همان برنامه را load نمود تا دستگاه قطعه را به صورت CNC و بدون دخالت تپراتور اندازه گیری نماید و نتایج اندازه گیری را هم به صورت گرافیکی و عددی نمایش داده و هم توسط چاپگر نتیجه را چاپ نماید.
این نرم افزار که توسط شرکت AXEL ارائه شده است به منظور دریافت اطلاعات از وسائل اندازه گیری سه بعدی نظیر CMM کاربرد دارد. نرم افزار در محبط گرافیکی خودکه تحت سیستم عامل Windows است به کاربر این امکان را م دهد تا به سادگی هر جزء از قطعه را اندازه گیری می کند روی صفحه نمایش مشاهده نماید.
این نرم افزار پس از اندازه گیری هر جزء از قطعه نظیر سوراخها، استوانه، فواصل و ... به تفکیک در پنجره های متفاوت اطلاعاتی نظیر شکل، اندازه ها، رواداریها(Tolerance) و ... را به صورت هم زمان نمایش می دهد.
AXEL ضمن آنکه یک نرم افزار ساده برای کار با CMM است و امکانات اولیه اندازه گیری را به کاربر می دهد از قسمتهای پیچیده نظیر بخش لوله(Pioe)، بخش آمار (Spe)، بخش مقطع(profile) و بخش سطح(Surface) نیز برخوردار است.
بخش لوله امکان بازرسی لوله ها را به کاربر می دهد و در عین حال بخش سطح این قتبلیت را در اختیار می گذارد تا با خواند پرونده های اطلاعاتی نظیر IGS و DXF در محیط برنامه کار اندازه گیری روی قطعه انجام شود و مقادیر خوانده شده با نقشه های کشیده شده مقایسه شوند.
اکسل می تواند به سادگی با انواع دستگاه های CMM کار کند و اطلاعات آنها را بخواند.ضمن این که این نرم افزار قدرتمند می تواند در CMM هایی که قدیمی هستند و قرار است به تازگی بازسازی شوند(Upgrade) نیز استفاده می شود.اگر چه برخی از شرکتها برای خواندن اطلاعات و استفاده از امکانات کامپیوتری CMM های خود را به نرم افزار های دیگر شرکتها متصل می کنند ولی در صورتی که این قبیل CMM ها کالیبره نباشند و اطلاعات پرونده های Error map در نرم افزارها داخل نشده باشد و به کار گرفته نشود اندازه محاسبه شده در نرم افزار ارزشی ندارد و نمی توان به آنها اعتماد کرد.
AXEL ضمن آنکه کلیه قابلیتهای یک نرم افزار خوب CMM را دارد می تواند فایلهای Error map را نیز خوانده و در حین کار به طور خودکار خطاهای اندازه گیری شده حین کالیبراسیون دستگاه را نیز اعمال و اصلاح نماید.
راهنمای جامع و کامل نرم افزار در هر لحظه به کابر این امکان را می دهد تا در هر نقطه ازنرم افزار بتواند روش اندازه گیری را فرا بگیرد.
نمایش اجزای اندازه گیری شده به چهار طری XZ ، YZ، XZ و ISO و همچنین تغییر زاویه دید دیگر امکانا خوب نرم افزار است.
AXEL امکان ارسال اطلاعات به اشکال مختلف نظیر پرونده(File) یا درگاه RS232 را داراست و همچنین می تواند روی قطعه کار چندین محور مختصات تعریف نماید و در هر لحظه تا تغییر محور مختصات و مبداء اندازه گیری کار را برای کاربر بسیار ساده نماید.
این برنامه می تواند با تمام CMM های دستی (Manual) و خودکار(CNC) کار کند و برنامه های از پیش آموزش داده شده را اجرا کند.
از این نرم افزار جهت محاسبات آماری برروی قطعاتی که با تیراژ بالا تولید می شوند استفاده می شود. به عنوان مثال خلاصه ارزیابی قطعات به صورت آماری و لگاریتمی و منحنی های توزیع فراوانی، توزیع نرمال و توزیع واقعی را برای تمامی قطعات رسم و اطلاعات مربوط به آنها را دسته بندی نمود.
از این نرم افزار جهت برنامه نویسی با کامپیوتر دستگاه هنگامی که دستگاه مشغول اندازه گیری قطعات می باشد استفاده می شود یا به عبارت دیگر به کمک این نرم افزار ما می توانیم هنگامی که ماشین در حال کار است برنامه قطعات دیگر را توسط کامپیوتر بنویسیم.
از این نرم افزار برای اندازه گیری کلیه منحنی های مشخص هندسی و منحن های نامشخص استفاده می گردد و به کمک آن می توان تصاویر دو بعدی و سه بعدی از منحنی های قطعات را توسط پلاتر رسم نمود.
الف_ از نظر شکل ظاهری:دستگاه CMMدر دو نوع مختلف ساخته می شود.
1- شکل دروازه ای 2- شکل بازوی
که هرکدام از این دستگاهها دارای قابلیت خاصی می باشند با توجه به موارد کاری مورد نظر آنها را انتخاب نمود. قدرت مانور در سیستم بازوی بسیار زیادی ولی دقت حرکت در شکل دروازه ای بسیار زیاد می باشد. و ما می توانیم ب توجه به این مطالب و مشخصات دیگر دستگاه را انخاب نمود.
ب _ از نظر شکل نوع حرکت: دستگاه با توجه به دقت و نوع حرکت در دو نوع گوناگون ساخته می شوند:
1-air bring : در این سیستم نیروی محرکه در حقیقت فشار هوا و نیروی دست اپراتور می باشند با استفاده از فشار هوا نیروی اصطکاک بین محورها
و بدنه دستگاه کم گشته و در حقیقت محورها در روی بلشتکی از هوا قرار می گیرند و با نیروی دست می توان محورها را حرکت داد، با قطع شدن فشار هوا بالشتک هوا نیاز از بین رفتنه و اصطکاک بین محورها و بدنه زیاد شده و محور دیگر حرکتی نمی کند، و استفاده از این نوع CMM ها که معمولا" با دقت میکرون کار می کند.محیط باید کاملا" تمیز و با تهویه (air cond ion) باشد
2- roiler bring : در این سیستم محورها که توسط بلبرینگ روی بدنه دستگاه نصب شده است توسط دنده شانه ای و چرخ دنده های مربوطه آن به حرکت درمیآید دنده شانه ای ها محور و چرخ دنده مربوط آن روی بدنه اصلی دستگاه می باشد که چرخ دنده ها را می تواند به شکل دستی یا موتوری به حرکت درآید دقت اندازه گیری در این نوع CMM ها در حد صدم می باشد و معمولا" CMM های کارگاهی معروفا" و محیط مربوطه باید تمیز و پاکیزه و همراه با تهویه باشند.
ابتدا باید قطعات دستگاه از نظر زنگ زدگی، آسیب دیدگی ناشی از حمل دستگاه مورد بررسی قرار داد. و سپس کلیه قطعات را با پروفرف مربوطه چک و از بورن کلیه قطعات مطمئن شد سپس به ترتیب اولویت اقدام به نصب دستگاه نمود.ابتدا پایه های سنگ را در روی سطح مناسب قرار داد بهد سنگ اصلی (میز دستگاه) را روی پایه هاقرا داده و اقدام به تراز(اولیه) سنگ
کرد.پس از تراز پروفیل P شکل مربوط به ریل محور YوZ را روی سنگ متصل نموده خط کش محور X را روی آن نصب می کنیم.محور Y و z را که روی هم منتاژ شده اند و قسمت پائین آن دارای بلبرینگ می باشد داخل ریل جا زد.
سپس دو انتهای ریل را مهار کرده که دیگر محور از ریل خارج نشود بعد میز دستگاه را تراز نموده و دستگاه آماده کار می باشد.
ODBC يك API ارتباطي مستقل از سيستم عامل و پايگاه داده ها مي باشد كه به يك برنامه سرويس گيرنده امكان مي دهد تا از طريق فراخواني توابع مبتني بر استاندارد به پايگاه داده back – end و بدون تكيه بر پروتكل هاي ارتباطي اختصاصي مختص پايگاه داده ارتباط برقرار كند .
چرا اين مهم است ؟ چرا نبايد فقط با Oracle يا SQL Server يا Informix كار كرد و كار را با آنها به پايان برد ؟ چندين دليل وجود دارد . مشخص نبودن سكو و پايگاه داده در يك برنامه ، قابليت حمل و آزادي را فراهم مي كند . اهميت اين آزادي وقتي به سرعت مشخص مي شود كه محدوديت هاي فقط يك پايگاه داده و سكو را در مورد مقياس پذيري ، سرعت ، گواهي يا هر عامل متغير ديگري بين سيستم هاي توليد مختلف در نظر بگيريم . ODBC همچنين امكان ايجاد برنامه ها بر روي محيط هاي ايجاد و توسعه desktop را با حداكثر استفاده روي سكو فراهم مي كند .
همچنين هر پايگاه داده اي براي هر كاري خوب نيست . MySQL به شكل كنوني خود يك پايگاه داده فقط خواندني است كه براي سايت هاي وب ، محتويات را فراهم مي كند ، ولي ممكن است ترجــيح دهيد كه براي يك warehouse داده ها يا Virtuoso ازOracle به عنوان پايگاه داده استفاده كنيد .
تاريخچــه و اهداف ODBC :
حدود سال 1990 ، عرضه كنندگان پايگاه داده UNIX شامل Oracle ، Informix و IBM به عنوان بخشي از SQL Access Group ، يك CLI (Call – Level Interface) را ارائه كردند تا امكان استفاده از SQL را به روش قابل انتقال فراهم كند .
قبل از SAG CLI ، تنها راه استفاده از SQL به صورت Embedded SQL بود ، به اين معني كه دستورات SQL در زبان برنامه نويسي شما مي بايستي از يك پيش كامپايلر مختص زبان رد مي شد كه دستورات را به زبان API پايگاه داده مورد نظر مي شكست . Embedded SQL ، دست و پا گير بود و عرضه كنندگان پايگاه داده در SAG و گروه X/Open مربوطه جمع شدند تا يك واسط SQL قابل حمل را ايجاد كنند كه بتواند بين پايگاه داده هاي مختلف و بدون پيش كامپايلر خاص زبان مورد استفاده قرار گيرد .
SAG CLI مبتني بر يك زير مجموعه از مشخصات SQLبنام Static SQL مي باشد كه ANSI SQL86 نيز ناميده مي شود . اين مشخصه طوري گسترش يافت كه Dynamic SQL را نيز پوشش داد و عرضه كنندگان مختلفي مثل IBM و Informix به سرعت اين CLI را به عنوان استاندارد بدون چون و چرا ، براي SQL در پايگاه داده هاي خود اتخاذ كردند .
در سال 1992 ، مايكروسافت ، SQL CLI را در يك مجموعه از واسط ها به نام ODBC پياده سازي كرد و SAG CLI را طوري گسترش داد كه شامل توابعي براي پرس و جو و كنترل درايورها و دستيابي به كاتالوگ پايگاه داده شود . مايكروسافت با درك اين مطلب كه يك مجموعه از ابزارهاي گرافيكي و SDK ها اتخاذ را ممكن مي كنند ، قابليت استفاده از SAG CLI را بهبود بخشيد و شروع به حمايت شديد از ODBC در برابر شركاء و مشتريان خود كرد .
بعد از چند سال ، مايكروسافت OLE – DB را به عنوان جايگزين ODBC پياده سازي كرد . OLE – DB در ابتدا مي تواند به صورت يك لايه آبجكتي تلقي شود كه به ODBC اضافه شده است ، ولي مايكروسافت خيلي زود درايورهاي OLE – DB را پياده سازي كرد كه نياز به پشتيباني از ODBC نداشتند . اين مي تواند به عنوان يك حركت تجاري استراتژيك براي كنترل دستيابي به داده ها توسط مايكروسافت تلقي شود ، زيرا OLE – DB فقط به سكوي ويندوز محدود است ، ولي اين ناموفق بود . ODBC استاندارد بدون چون و چرا براي دستيابي به موتورهاي مبتني برSQL شده بود و براي رابطه هاي بين سكويي به كار مي رفت .
معمــاري ODBC :
معماري ODBCاز چند بخش تشكيل شده است . بياييد با شروع از سرويس گيرنده در يك اتصال ساده حركت كنيم . براي اين بحث ، سرويس گيرنده را به وسيله محل برنامه ( مثلا PHP ) شناسايي مي كنيم .
برنامه PHP مثل يك سرويس گيرنده براي سرور پايگاه داده عمل مي كند . با حركت از PHP در طول اين اتصال معمولا به يك Data Source Name ( DSN ) ، درايور ODBC ، مدير درايور ( DM ) ODBC ، يك لايه ارتباطي و خود سرور پايگاه داده ، برخورد مي كنيم :
درايور MyODBC براي MySQL ، درايور MS براي MS Access و درايورهاي OpenLink ODBC ، مثال هايي از درايور ODBC هستند . مديرهاي درايور شامل Microsoft ODBC administrator روي ويندوز و Iodbc تحت nix مي باشند .
در اينجا تفاوت اساسي بين DM در ويندوز و DM در برخي اشكال لينوكس يا يونيكس وجود دارد . ODBC administrator تحت ويندوز به همراه سيستم عامل موجود است و يك محصول closed source است و اين خبر بدي است . ولي خبر خوب اين است كه اين مدير در هر سيستم ويندوزي موجود است . برنامه نويسان PHP با يك سرويس گيرنده UNIX ، Linux و Mac OS X ، ممكن است نياز داشته باشند كه يك مدير درايور را نصب كنند .
يك راه حل ، جايگزين open source بين سكويي كه به وسيله OpenLink Software حفظ مي شود ، Iodbc مي باشد . Iodbc به عنوان يك راه حل جايگزين براي مدير درايور مايكروسافت ايجاد شد و تحت گواهي LGPL يا BSD به صورت رايگان موجود است . اين مدير نه تنها شامل كتابخانه هاي مدير درايور مي باشد ، بلكه شامل يك SDK براي ايجاد درايورها يا برنامه هاي سازگار با ODBCو يك واسط گرافيكي مي باشد .
حال به معماري اتصال خود بپردازيم و اجزاي آن را از نظر كاري كه انجام مي دهند ، تعريف كنيم . مدير درايور ، يك مجموعه از پارامترهاي درايور ODBC به نام ( DSN) Data Source Name را ثبت مي كند . PHP در مدير درايور به دنبال DSN مي گردد و بعد پارامترهاي اتصال موجود در آن را به درايور مناسبي كه اتصال را برقرار مي كند ، ارسال مي كند .
لايه ارتباطي كه نشان داده شده است ، بسته به نوع درايور ODBC ي كه استفاده مي كنيد ، مكن است لازم باشد يا لازم نباشد . در برخي درايورهاي ODBC يك پروتكل ارتباطي خاص پايگاه داده ، تعبيه شده است و يا مستلزم اين هستند كه كتابخانه هاي سرويس گيرنده پايگاه داده به همراه PHP موجود باشد . درايورهاي ODBC ديگر شما را قادر مي كنند تا كتابخانه هاي سرويس گيرنده پايگاه داده را دور بزنيد ، ولي ممكن است مستلزم اين باشند كه شما اجزاي ارتباطي را روي سرور پايگاه داده نصب كنيد . اين مي تواند به ميزان گسترده اي بين درايورهاي ODBC فرق كند .
استانداردهاي SQL :
ODBC معمولا از مشخصات SQL92 پشتيباني مي كند . يك درايور ODBC كه خوب پياده سازي شده باشد قابليت SQL اضافي را روي پايگاه داده هاي back – end اعمال مي كند ، حتي اگر از آن پشتيباني نكنند . يك مثال خوب در اين زمينه ، cursor ها يا مجموعه نتايج قابل پيمايش مي باشد . يك درايور ODBC خوب ، يك مدل را با چند cursor پياده سازي خواهد كرد كه هم به سمت جلو و هم به سمت عقب قابل پيمايش باشد و نيز نسبت به تغييرات در داده هاي مربوطه ، حساس باشد . به طور ايده آل ، يك ODBC Driver از طزيق پياده سازي ODBC API ، مسائل همخواني با SQL در پايگاه داده مربوطه را از ديد برنامه نويس پنهان مي كند .
بااين حال ، هنوز محدوديت هايي روي قابليت پايگاه داده مورد استفاده قرار دارد . براي مثال ، هيچ درايور ODBC و پايگاه داده MySQL 3.x را قادر نخواهد كرد كه كليدهاي خارجي يا stored procedure ها را مديريت كند .
نصب PHP و ODBC بر روي ويندوز :
نصب ODBC تحت ويندوز قبلا انجام شده است ، زيرا مايكروسافت ، ODBC را به عنوان بخشي از سيستم عامل در يك بسته بنام MDAC ( Microsoft Data Access Components ) نصب مي كند . MDAC نه تنها شامل ODBC administrator مي باشد ، بلكه شامل يك مجموعه از درايورهاي ODBC استاندارد و DLL هاي لازم مي باشد .
در ضمن ديگر لازم نيست كه دستورات php – odbc.dll را در فايل php.ini از حالت توضيحات در آوريد . زيرا ODBC به صورت پيش فرض در نصب PHP روي ويندوز، فعال است . پيكربندي DSN ها در ODBC administrator صورت مي گيرد . PHP به DSN ها احتياج دارد كه بر حسب تعريف ، در دسترس همه كاربران روي ماشين قرار دارد .
API براي ODBC در PHP :
حال كه ديد كلي در مورد ODBC پيدا كرديد و پيش نيازها را درك كرديد ، مي توانيم به توابع PHP كه براي كار با API ODBC به كار مي روند بپردازيم . در زير پر استفاده ترين توابع ODBC در PHP را شرح مي دهيم . براي كسب ليست كامل و يا جزئيات بيشتر در مورد مواردي كه در زير ليست شده اند ، به مستندات online در آدرس http://www.php.net/odbc/ مراجعه كنيد .
اين توابع به چهار گروه اصلي تقسيم مي شوند : اتصال ، متاداده ها ، تراكنش ها و بازيابي داده ها . بايد توجه شود كه PHP با اختصاص دادن خروجي پرس و جو ها و دستورات پايگاه داده اي ديگر به شناسه هاي نتيجه ، با داده ها كار مي كند . شناسه نتيجه به وسيله بسياري از توابعي برگردانده مي شود كه به عنوان يك نقطه ارجاع به يك مجموعه از داده هاي ايجاد شده توسط دستور SQL عمل مي كنند . به طريق مشابه ، PHP از شناسه هاي اتصال براي ارجاع به يك اتصال پايگاه داده باز استفاده مي كند .
اتصال به پايگاه داده :
مجموعه اول از توابع ، مراحل اوليه اي كه در هنگام كار با ODBC در كد PHP خود انجام مي دهيد را پوشش مي دهد .
odbc-connect()
Int odbc-connect(string dsn, string user,
String password [, int cursor-type])
اين تابع بر اساس پارامترهاي مشخص شده در connection string ، يك اتصال به يك ODBC DSN برقرار مي كند و در صورت موفقيت يك شناسه به اتصال را به صورت يك عدد مثبت و در صورت عدم موفقيت ، مقدار صفر را برمي گرداند .
odbc-close-all() و odbc-close()
Void odbc-close(int connection-id)
Void odbc-close-all()
هر دوي اين توابع ، اتصالات ODBC را مي بندند . odbc-close() يك شنلسه اتصال را به عنوان آرگومان خود مي گيرد و odbc-close-all() روي تمام اتصالات باز ODBC عمل مي كند . ممكن است بخواهيد كه خود را نگران استفاده از اين توابع نكنيد . وقتي كه اسكريپت به پايان مي رسد ، اتصالات به صورت خودكار بسته مي شوند . اگر تراكنش هاي باز روي شناسه اتصال وجود داشته باشد ، اين توابع با شكست مواجه مي شوند و اتصال را باز مي گذارند .
odbc-pconnect()
Int odbc- pconnect(string dsn, string user,
String password [, int cursor-type])
اين تابع يك اتصال دائمي را باز مي كند . تفاوت اصلي بين اين تابع و تابع odbc-connect() اين اسـت كه اتصال هايي كه با پارامتـرهاي اتصال يكسان باز مي شونــد ،
به جاي باز كردن يك اتصال جديد ، از يك اتصال موجود استفاده خواهند كرد . اين مي تواند به بهبود كارآيي كمك كند ، زيرا به بار اضافي باز كردن مجدد اتصال ، نيازي ندارد . يك تفاوت رفتاري ديگر با odbc-connect() اين است كه وقتي اسكريپت به پايان مي رسد ، اتصال به صورت خودكار بسته نخواهد شد . همچنين odbc-pconnect() در هنگامي كه PHP به صورت يك ماژول CGI نصب شده باشد ، كار نمي كند بلكه مثل odbc-connect() عمل مي كند .
كار با فرا داده ( Meta Data ) :
فراداده ها در حقيقت ، داده هايي درباره داده هاست . در مورد برنامه نويسي پايگاه داده PHP ، از فراداده ها براي كسب اطلاعات در مورد وضعيت پايگاه داده ، چگونگي ايجاد جدول و سطرها و شرايط خطايي كه ممكن است وجود داشته باشد ، استفاده مي كنيم . اين اطلاعات مي توانند فوق العاده سودمند باشند . اين اطلاعات نه تنها به شما كمك مي كند تا برنامه هاي خود را اشكال زدايي كنيد ، بلكه به شما امكان مي دهد تا برنامه هايي بنويسيد كه در آن وضعيت پايگاه داده را در هنگام اجرا تغيير دهيد .
odbc-errormsg() و odbc-error()
string odbc-error([int connection-id])
string odbc-errormsg([int connection-id])
odbc-error() طوري تعريف شده است كه كد خطاي ODBC كه گاهي يك ارجاع ناپيدا به شرط خطاست را برگرداند . در عمل ، هر دو تابع اغلب اطلاعات يكساني ، شامل حالت خطاي ODBC و پيغام خطا را بر مي گردانند . پارامتر connection-id اختياري است و اگر از آن استفاده نشود ، تابع آخرين حالت خطاي يك اتصال را بر مي گرداند . اگر هيچ شرط خطاي فعالي وجود نداشته باشد ، يك رشته تهي برگردانده مي شود .
odbc-field-name()
string odbc-field-name(int result-id, int field-number)
اين تابع يك شماره ستون ( فيلد) را مي گيرد و اسم فيلد را در هر موقعيت بر مي گرداند ( شماره گذاري فيلدها از يك شروع مي شود ) .
odbc-field-num()
int odbc-field-num(int result-id, string field-name)
اين تابع برعكس تابع odbc-field-name() مي باشد و اسم يك ستون را مي گيرد و شماره آن را برمي گرداند ( شماره گذاري فيلدها از يك شروع مي شود ) .
اين تابع يك شماره ستون را مي گيرد و نوع داده آن ستون را برمي گرداند ( شماره گذاري فيلدها از يك شروع مي شود ) .
odbc-field-hen() و odbc-field-precision()
int odbc-field-len(int result-id, int field-number)
string odbc-field-precision(int result-id, int field-number)
اين توابع شبيه هم هستند . هر دو شماره يك ستون را مي گيرند و طول يا دقت آن ستون را برمي گردانند ( شماره گذاري فيلدها از يك شروع مي شود ) . دقــت (Precision ) يعني طول نوع داده اي كه براي آن ستون تعريف شده است .
كار با تراكنش ها ( Manipulating Transactions ) :
تراكنش ، يك مجموعه از دستورات SQL است كه مي خواهيد يا همه با هم انجام شوند و يا هيچكدام انجام نشوند . تا وقتي كه به چيزي مثل تراكنش هاي مدل فكر نكنيد ، اين ممكن است در ابتدا كمي غير منطقي و عجيب باشد .
odbc-autocommit()
int odbc-autocommit(int connection-id [, int onoff])
اين تابع رفتار auto-commit ( اثر كردن خودكار ) را براي يك شناسه اتصال مشخص تنظيم مي كند و مي پرسد . اعمال دستورات SQL در برخي پايگاه داده ها لازم است و نيز در تراكنش ها به كار مي رود . معمولا يك دستور UPDATE , INSERT يا DELETE قبل از اينكه دستور اثر كند ، مي تواند بي اثر شود . غير فعال كردن اين رفتار به چندين دستور امكان مي دهد تا اجرا شوند و موفقيت آنها امتحان شود و يا متوقف شوند . اگر از پارامتر OnOff استفاده نشود ، وضعيت جاري برگردانده مي شود .
odbc-commit()
int odbc-commit(int connection-id)
اين تابع ، شناسه اتصال را به عنوان يك پارامتر مي گيرد و تمام تراكنش هاي معلق روي آن اتصال را اعمال مي كند .
odbc-rollback()
int odbc-rollback(int connection-id)
اين تابع تمام دستورات معلق روي شناسه اتصال مشخص شده را بي اثر مي كند و تراكنش را خالي مي كند .
بازيابي داده ها و Cursor ها :
ODBC ، چهار روش براي اجراي دستورات SQL دارد . اين روش ها ، اجراي مستقيم ، اجراي آماده شده ، stored procedure ها و فراخواني هاي كاتالوگ مي باشند .
odbc-exec() و odbc-do()
int odbc-exec(int connection-id, string query-string)
int odbc-do(int connection-id, string query-string)
اين دو تابع ، شبيه هم هستند و هر دو يك شناسه اتصال را به عنوان پارامتر مي گيرند و دستور SQL را مستقيما اجرا مي كنند . يعني اينكه دستور SQL روي يك طرح اجرا ، تجزيه و كامپايل مي شود و اين طرح بلافاصله اجرا مي شود . با اينكه اين روش ساده ترين روش براي فرستادن يك دستور SQL است ، بهتر است فقط براي يك دستور SQL يكبار مصرف به كار رود .
odbc-cursor()
string odbc-cursor(int result-id)
اين تابع ، اسم cursor مربوط به يك شناسه نتيجه مشخص را برمي گرداند .
odbc-fetch-into()
int odbc-fetch-into(int result-id [, int rownumber, array result-array])
اين تابع يك شناسه نتيجه را مي گيرد و يك سطر از مجموعه نتايج را در يك آرايه كه اندازه آن با تعداد ستون ها در مجموعه نتايج يكي است ، بازيابي مي كند . آرايه بدست آمده شامل مقاديري با يك انديس عددي است كه از صفر شروع مي شود .
odbc-num-fields()
int odbc-num-fields(int result-id)
اين تابع ، شناسه نتيجه را به عنوان پارامتر مي گيرد و تعداد ستون هاي موجود در مجموعه نتيجه را برمي گرداند .
odbc-num-rows()
int odbc-num-rows(int result-id)
اين تابع براي دستورات INSERT ، UPDATE و DELETE ، تعداد سطرهايي كه تحت تاثير قرار گرفته اند را برمي گرداند و براي دستور SELECT ، تعداد سطرهاي موجود در مجموعه نتايج را برمي گرداند .
مشكلات معمول :
در هر برنامه نويسي به مشكلاتي برخورد خواهيد كرد . رايج ترين مشكلات در رابطه با ODBC و PHP به علت مسائل DSN مي باشند . در زير تعدادي از رايج ترين خطاهاي برگردانده شده توسط تلاش براي اتصال به ODBC و علت احتمالي آنها را مشاهده مي كنيد :
خطـا
علت
SQL error: SQL state 01000 in SQL Connect
اين يك " خطاي كلي " است . DSN ( يا درايور ) شما با شكست مواجه شده است .
Syntax error or access, SQL state 37000 in SQLExecDirect
يك خطاي دستور زماني SQL در دستور SQL خود به دنبال خطا بگرديد .
پيش نيازهاي اتصالات ODBC :
اينكه چگونه مي توان اتصالات ODBC را به پايگاه داده هاي ويندوزي ايجاد كرد ، شايد يكي از سوالاتي باشد كه بيشتر از همه در ليست هاي mailing در مورد ODBC پرسيده مي شوند . يك دليل براي اين امر اين است كه برنامه نويسان ويندوزي به طور متوسط بيشتر با ODBC كار كرده اند و مزاياي آن را هم از طريق تجربه مستقيم و هم از طريق معماري مشابه از نظر مفهومي OLE-DB و Active Data Objects ( ADO ) كه در ويژوال بيسيك به كار مي رود درك كرده اند .
استفاده از Ms SQL Server :
از طريق ويندوز ، نصب كمي لازم است . بايد يك DSN را از طريق Start / Setting / Control Panel / Administrative Tools / Data Sourse(ODBC) ايجاد كرد . مي توانيد از Ms driver for SQL استفاده كنيد كه روي اكثر سيستم ها نصب مي شود و يا از يك درايور ODBC از شركت ديگر استفاده كنيد . مي توانيد در برگه Drivers از ODBC administrator ، درايورهايي را كه نصب كرده ايد را مشاهده و بررسي كنيد.
برگه System DSN را انتخاب كنيد و New را انتخاب كنيد . درايور مناسب را از ليست انتخاب كنيد و مقادير مورد نياز در system DSN جديد را پر كنيد . اين پارامترهاي اتصال بايد با معني باشند . اگر نامطمئن هستيد به DBA يا مستندات SQL Server خود مراجعه كنيد . براي كمك به شما ، SQL Server به طور پيش فرض ، يك پايگاه داده نمايشي بنام Northwind با اسم كاربري sa و كلمه عبور خالي نصب كرده است .
استفاده از MS Access :
پيش نياز هاي اتصال با MS Access تحت ويندوز ، با پيش نيازها براي SQL Server يكي است . مطمئن شويد كه يك پايگاه داده كاري MS Access داريد . همچنين وجود يك درايور MS براي Access را بررسي كنيد و يك system DSN ايجاد كنيد .
تحت لينوكس نيز ، پيش نياز هاي اتصال يكسان هستند ، اگر چه نصب DSN كمي ترفند مي خواهد . تفاوت اصلي بين اتصالات Access از طريق لينوكس و اتصالات SQL Server از طريق لينوكس اين است كه هيچ درايور Access ي موجود نيست . براي تاثير گذاشتن روي اين اتصال ، بايد از درايور ODBC چند لايه OpenLink استفاده كنيد . با انتخاب سرويس گيرنده ( Linux ) ، سرور ( ويندوز ) و پايگاه داده ( MS Access ) خود ، اين درايور را از سايت OpenLink ، دريافت كنيد . اين يك ODBC Agent نصب شده بر روي ويندوز را به شما ارائه مي كند كه به جاي مرتبط شدن مستقيم به يك پايگاه داده مي تواند به يك DSN موجود مرتبط شود .
انتزاع پايگاه داده :
ماوراي انتزاع مفهومي پايگاه داده در ODBC ، چند روش در PHP اتخاذ شده است تا برنامه نويس PHP را بيشتر در برابر تغييرات غير قابل پيش بيني پايگاه داده هاي مختلف محافظت كند .
·Unified ODBC
اين شامل يك سري توابع در PHP مي باشد كه ODBC را از نظر مفهومي شبيه سازي مي كند . شايان ذكر است كه اگر واقعا از يك درايور و ODBC DSN استفاده نمي كنيد ، از ODBC API نيز استفاده نخواهيد كرد . كاري كه توابع Unified ODBC انجام مي دهند اين است كه معناي توابع ODBC را فرض مي گيرند و فراخواني هاي اصلي پايگاه داده را در پوشش اسم توابع ODBC ارائه مي كنند . پايگاه داده هايي كه از طريق اين روش پشتيباني مي شوند ، Adsbas ، DB2 ، Solid و Sybase هستند .
·ADODB
اين يك كلاس ديگر Wrapper پايگاه داده شيءگراست كه به ميزان زيادي مثل PEARDB عمل مي كند . ADODB مخفف Active Data Objects Data BASE مي باشد و از نظر قابليت ADO-like مربوط به آن ، براي برنامه نويسان ASP آشناست .
·PEARDB
PEAR مخزن كد مشترك در PHP است . اين يك پروژه آرماني است كه هنوز در دوران اوليه حيات خود به سر مي برد . پروژهPEAR در حال حاضر روي دو چيز تمركز كرده است . ابتدا ، مشخص كردن استاندارد هاي كد كردن براي مخزن و دوم ، ايجاد ابزارهايي براي فراهم كردن يك بنياد چارچوب تشكيل دهنده با ثبات براي مخزن .
يكي از ابزارهاي تشكيل دهنده اي كه در حال ايجاد شدن مي باشد ، PEARDBاست كه يك لايه انتزاع پايگاه داده شي گرا براي PHP مي باشد .
·Metabase
Metabase يك مجموعه شيءگرا از كلاس ها از يك شركت ديگر براي دستيابي و مديريت داده ها به روش مستقل از پايگاه داده ها مي باشد . اين روش ريزه كاري هايي دارد كه متد هاي ديگر ندارند و ممكن است براي اكثر پروژه ها ، نياز به مهارت زيادي داشته باشد . اين قابليت ها شامل يك كتابخانه توابع كه واسطي براي درايورهاي خاص پايگاه داده ها فراهم مي كند و پشتيباني از تعريف داده هاي مبتني بر Schema ي XML و يك تجزيه كننده XML براي ايجاد Schema مي باشند .
آشنايي با مفاهيم ADO و ODBC :
اشياء داده هاي ActiveX يا ADO يك واسطه برنامه نويسي ما بين صفحات پايگاه داده هاي مبتني بر وب و منابع مختلف داده ها است . ADO نيز مانند منابع داده هاي زيرين خود داراي مجموعه اي گسترده از اشياء ، خواص و متد هاست .
اتصال پايگاه داده هاي باز ( ODBC ) يك منبع داده هاست كه امكان دسترسي به بسياري از سيستم هاي مديريت پايگاه داده ها ، از جمله اكسس و SQL Server را فراهم مي آورد .
نمودار شكل زير نحوه گردش اطلاعات در جريان پردازش يك صفحه پايگاه داده هاي
مبتني بر وب را نمايش مي دهد . اين فرايند در چندين مرحله و چند سطح ، به شرح زير ، انجام مي شود :
.
لايه هاي نرم افزاري درگير در پردازش صفحات پايگاه داده هاي مبتني بر وب
1.يك بازديد كننده وب با تسليم كردن درخواست خود به سرور وب ، فرايند را آغاز مي كند . معمولا بازديد كننده اين كاررا از طريق كليك كردن بر روي يك ابر لينك يا دكمه submit ، در تماشاگر خود ، انجام مي دهد .
2.سرور وب ، درخواست را دريافت مي كند و چون مشاهده مي كند كه صفحه وب درخواستي داراي پسوند .ASP است ، پردازنده اسكريپت ASP را به راه مي اندازد .
پردازنده اسكريپت ASP شروع به خواندن صفحه درخواستي مي كند و دستورات اسكريپت سمت سرور موجود در آن را ، اجرا مي كند .
دستورات اسكريپت سمت سرور ، اشياء مختلف ADO را بار مي كنند ( يعني موارد جديدي از آنها را ايجاد مي كنند ) و سپس با به كارگيري متدهاي ارائه شده توسط اين اشياء داده هاي موجود در منابع داده هاي سرور را مورد دسترسي قرار مي دهد .
ODBC يكي از اين منابع داده هاست . ADO به بيشتر سيستمهاي پايگاه داده هاي رابطه اي ، و البته نه به همه آنها ، از طريق ODBC ، دسترسي مي يابد . منابع داده هاي ODBC ، امكانات لازم براي باز كردن پايگاه داده ها ، باز كردن جدول ها ، پردازش دستورات SQL و انجام ساير كارها را در اختيار قرار مي دهند .
ADO ، چه مستقيما و چه از طريق منبع داده ها ، دستورات لازم را به تامين كننده داده ها ارسال مي كند . تامين كننده داده ها يك لايه نرم افزاري است كه مستقيما با پايگاه داده ها ارتباط برقرار مي كند .
سرانجام ، دستورات لازم توسط تامين كننده به پايگاه داده ها ارسال مي گردند و پايگاه داده ها پس از اجرا كردن دستورات ، نتايج آن را به تامين كننده باز مي گرداند . سپس نتايج حاصل توسط تامين كننده ، مستقيما يا از طريق منبع داده هاي ODBC ، به اشياء ADO ارسال مي گردند . ADO بلافاصله كد وضعيت را به دستورات ASP ارسال مي كند و درصورتيكه در نتيجه اجراي دستور ، ركوردهايي حاصل شده باشند ، امكان انجام عمليات بر روي آن ركوردها را نيز در اختيار اسكريپت قرار مي دهد . در نهايت پس از اجراي دستورات اسكريپت ، صفحه اي ساخته مي شود كه نتيجه كار را به بازديد كننده ، نمايش مي دهد .
تعريف كردن نام منابع داده هاي ODBC :
هر نام منبع داده ها ( DSN ) در ODBC ، نوع ، محل و پارامترهاي عملياتي يك پايگاه داده هاي قابل استفاده در ODBC را ( در يك محل خاص از هر كامپيوتر ) تعريف مي كند . اين امر جابجا كردن محل فايل هاي پايگاه داده ها و يا ارتقاء نرم افزار آن را آسان مي سازد . در اينجا به جاي به روزآوري آدرس پايگاه داده ها در همه صفحات وب ، به روزآوري يك DSN ، كفايت مي كند . در ODBC دو نوع DSN وجود دارد كه " كابر " و " سيستم " ناميده مي شوند . DSN كاربر تنها توسط يك كاربر خاص قابل استفاده است . و به همين دليل براي كار با پايگاههاي داده هاي مبتني بر وب ، مفيد نيست . DSN سيستم توسط همه كاربران و حتي فرآيندهاي پشت صحنه ، قابل استفاده است . يعني حتي در شرايطي كه هيچ كاربري وارد سيستم نشده است باز هم فرآيندها مي توانند از اين DSNها استفاده كنند . بنابراين صفحات وبي كه از DSN استفاده مي كنند ، حتما DSN سيستم را به كار مي گيرند . فرآيند تعريف DSN به نوع سيستم عامل ، نوع پايگاه داده ها و نگارش ODBC ، بستگي دارد .
باز كردن مدير منابع داده هاي ODBC :
تعريف كردن يك DSN سيستم در ويندوز 95 ، ويندوز 98 ، ويندوز NT و ويندوز
2000 ، مشابه است . براي اين كار بايد به صورت محلي يا از طريق يك كنسول سرور
ترمينال ، و به عنوان مدير ( Administrator ) ، وارد كامپيوتر مورد نظر شويد .
براي برپا سازي يك DSN بايد مراحل زير را انجام دهيد :
1.از طريق Control Panel ( و احيانا آيكون ابزارهاي مديريتي ) ، آيكون Data Sources ( ODBC ) يا 32-bit ODBC را پيدا كنيد و روي آن دو كليك كنيد .
2.پس از ظاهر شدن ديالوگ زبانه system DSN را انتخاب كنيد . در اين زبانه ، هر كدام از دكمه ها به شكل زير عمل مي كنند :
·دكمه Add يك DSN سيستم جديد را مي سازد .
·دكمه Remov ، DSN سيستم انتخاب شده را حذف مي كند .
·دكمه Confhgure ، مشخصات يك DSN سيستم موجود را جهت اصلاح ، نمايش مي دهد . با دو كليك كردن هر DSN نيز مي توان آن را اصلاح كرد .
3.روي دكمه Add كليك كنيد تا ديالوگ بعدي ظاهر شود .
4.درايور مناسب براي پايگاه داده هاي مورد نظر خود را انتخاب و روي دكمه Finish كليك كنيد .
از اين مرحله شكل ديالوگ بستگي به نوع پايگاه داده ها دارد .
نكات ديگري درباره ODBC :
با استفاده از اين روش هر برنامه ODBC ، از جمله آن صفحات asp كه از ADO استفاده مي كنند ، قادر خواهند بود ، به شكلي يكنواخت و بر مبناي يك نام واحد ( يعني يك DSN سيستم ) با پايگاه داده ها كار كنند . ODBC ، نوع درايور ، محل فيزيكي و نام پايگاه داده ها را از روي اطلاعات موجود در DSN ، استخراج خواهد كرد .
نسخه هاي جديدتر درايورهاي ODBC مرتبا عرضه مي شوند . و هر بار كه يك نرم افزار جديد را نصب مي كنيد آخرين نسخه اي درايوهاي ODBCمربوط به آن نيز نصب مي گردند . مهمترين عامل بروز اشكال در درايوهاي ODBC ، عدم تناسب نگارش آن است . اگر با مشكلات سيستمي مواجه مي شويد ، بهتر است بر زبانه about ديالوگ مديريت منبع داده هاي ODBC كليك كنيد و شماره نگارش مدول هاي درايو را ملاحظه نماييد . اگر مدول ها داراي يك شماره نگارش يكسان نيستند ، بهتر است ، همه آنها را با آخرين نگارش درايور مربوطه ، جايگزين كنيد .
Automationstudio يك طرح نرمافزاري انيميشني و شبيهسازي است. آن در صنعت اتوماتيكي ايجاد كرد راهحلهاي خاصي براي نيازهاي آموزشي و هندسي. نرمافزارهاي Workshop با دقت كمي با نرمافزاري كه عكس عادت متداول در صعنت است متحد شدند و ارتباط پيدا كردند. شبيهسازي سودمند Automationstudio را يك ابزار لايق و كارآمدي براي تصديق فرآيند و برنامههاي اتوماتيكي ساخت.
در محيط Automationstudio تمام ابزارهاي طراحي در دسترس و حاضر و آماده هستند. محتواي هسته سيستم سه فايده (قسمت) دارد:
يكDiagramEditor (ويراستار طرح)، يك ProjectExplorerو يك Library Explorer .
DiagramEditor به شما اجازه ميدهد كه توليد و شبيه سازي كنيد طرحها را معرفي كنيد توليدات را تا زماني كه ProjectExplorer مديريت فايل را كنترل ميكند .و طبقهبندي مي كند همه پوشههايي را كه به شبيهسازي يك پروژه و طرح ارتباط پيدا ميكند. Library Explorer نمونههايي از منابع لازم را براي ايجاد طرحهايي كه صفحه بندي مي كند پروژههاي شما را عرضه ميكند.
سرانجام اين نرمافزار اجازه ميدهد به شما كه پروژهتان را به صورت سند و پوشه درآوريد . شما ميتوانيد چاپ كنيد و صادر كنيد طرحهايتان را همراه با فهرستهاي ارتباطي مختلف و گزارشات به اجتماع يك فايل كاري كامل و واقعي.
حدود (در مورد) Automation Studio :
Automation Studio يك بسته نرمافزاري شبيهسازي است كه به صورت مدلهاي مختلف ممكن قرار داده شده است .
هر مدل همچنين يك Workshop ناميده ميشود. كه شامل يك منبع قطعات ميشود كه شما ميتوانيد انواع مختلفي از مدارها را به عنوان مثال: هيدروليك، هوايي ، الكتريكي و غيره ايجاد كنيد. اين مدارات مي توانند ايجاد شوند و به وسيله خودشان و يا با تركيب كردن با انواع مدارات ديگر. Automation Studio تنظيمات و تصحيحات، شبيهسازي ، فايل و مديريت طرح،چاپ و نمايش عملكردها را كنترل ميكند.
اطلاعات عمومي و كلي:
ارائه اسناد و پوشه كاري Automation Studio يك سبك مقياسي دارد. محتواي راهنماي كاربر، Automation Studio معمولي و رايج (اطلاعاتي در مورد عملكردهاي مهمي از , Library Explorer, ProjectExplorerDiagramEditor در نرمافزارهاي Workshop استاندارد، (هيدروليك،پنماتيك ، كنترلهاي الكتريكي، عددي، طرح هاي درآمده) و چگونگي شبيهسازي ميباشد. براي هر نرمافزار Workshop غير استاندارد شما پيدا خواهيد كرديك راهنماي كاري كه تأمين ميكند اطلاعات مخصوص و معيني كه شامل يك شروع سريع است. راهنمايي كه سرعت كمك ميكند به شما كه آشنا شويد خودتان با عملكردهاي مختلف وابسته به Workshop.
رشته اي از وظايف شرح داده شده در اين بخش و انعكاسي ميدهد از رشته اي كه معمولا در زير است زمانيكه مورد استفاده هسته سيستم مي باشد. در حقيقت در شدت جريان يك پروژه، اغلب تجهيزاتي كه تعدادي مراحل تكرار ميشود يا درباره شروعسازي ميشود تغيير ميدهد و اصطلاح ميسازد. به علاوه اين بخش هاي راهنما تنها به صورت عمومي و كلي از Automation Studio مي باشد و بنابراين عملكردهاي مخصوص در نرماقرارهاي Workshop. در اين پوشه شرح داده نميشوند. (شكل 1-1)
راهنماي كاربر نرمافزار Workshop، مكمل اين راهنماي هسته سيستم است. Workshop. ، پوشه ها را به صورت تئوري و استفاده كردن از نرمافزار را با اجرا و مثال ها شرح و توضيح ميدهد كه بنابراين نرمافزار Workshop.تكنولوژي است كه به آساني قابل فهم ميباشد. رجوع كردن به راهنماي كاري نرمافزارهاي Workshop. براي بدست آوردن اطلاعاتي در مورد عملكردهاي مختلف، اجزاء قطعات و مثالهايي از درخواست نيازها است براي يادگرفتن و استفاده كردن ازAutomation Studio .
همه نيازهاي آموزشي كه استفاده ميشود در عملكردهايي كه شركت دارند در همه نرمافزارهاي Workshop مي توانيد بفهميد در اين راهنماي كاربر به ويژه كه اينها گنجانده شدهاند در محيطهاي , ProjectExplorThe Librany Explorer و DiagramEditor همراه با دستورات و جعبههاي ديالوگشان. آموزشهايي كه لازم و ضروري هستند در شبيهسازي تكنولوژي نرمافزارهاي مختلف Workshop. نيز شرح داده شده است.
آموزشهايي معرفي شدهاند به ترتيبي كه كار بايد اجرا شود. مضمون و محتوا تشكيل داده شده به طوريكه هر مرحله در هر بخش، مرحله بعدي را با دقت فراوان دنبال مدل ميكند. در واقع سيستم Automation Studio اصلي واساسي ميتواند ياد دهد به وسيله تفسير اين راهنما و رشتهاي از فصول كه آنها ارائه شدهاند. براي وظايف ويژه و مخصوص يك Workshop. شما بايد بخوانيد راهنماي كاربر را كه عرضه و تأمين كرده Workshop. مخصوص شما ممكن همچنين اطلاعات لازم را به وسيله مشاور شاخص و فهرست و ضميمه پاياني اين پوشه براي يك خلاصه از داده اشاره شده فراهم كنيد.
اين مهم است كه آيينهاي قراردادي استفاده شده در اين راهنما را بدانيد. آنها براي نشاندادن اطلاعات اين پوشه يك راه ساخت يافته و واضح را معرفي ميكنند اينها همانند آيينهاي قراردادي استفاده شده در راهنماهاي كاربر همه نرمافزارهاي Workshop. مختلف ميباشد.
و به موارد دو اصطلاح قراردادي كه در اين پوشه استفاده ميشود. يكي براي شرايط اتصالي و ارتباطي با استفاده از موس دومي براي استفاده از آيكونها در اين پوشه ميباشد.
1-اشاره به يك گزينه ياعنصر: قراردهيد اشارهگر موس را روي يك عنصري از صفحه
2-كليك كردن: فشار دهيد و بلافاصله رها كنيد شستي موس را، مگر اينكه اشاره به آن طور ديگري باشد. كليك كنيد با شستي چپ موس
3-2 بار كليك كردن: شستي موس را 2 بار به سرعت و به صورت متوالي فشار دهيد . اين عمل و استفاده از شستي چپ موسا نجام مي شود.
4-عمل كشيدن: فشار دهيد و نگه داريد شستي چپ موس را و حركت دهيد نشانگر موس را از يك طرف به طرف دلخواهتان در صفحه
اخطار و راهنمايي:
كمك رايج و معمولي پوشه استفاده كردن از ايكون هايي كه نشان مي دهنده يادداشت هاي مهم و او راهنمايي هايي كه آسان مي كننددستوراتي را كه مي تواند استفاده كند.
اين صل روشهايي اصل و اساسي در حالت و كاربرد واسط و مياني را شرح مي دهد.
* شروع Automation studio
وجود اين تكنيك هاي مختلفي براي شروع Automation studio شما ممكن است انتخاب كنيد شروع دلخواهتان را كه بهترين مناسبت را با نيازتان دارد. بعد از اينكه Automation studio نصب شد يك آيكون آن را در ميز كار ويندوز نمايش مي دهد.
براي شروع Automationstudio:
1-كليك كنيد روي منوي استارت كه قرار گرفته در پايين صفحه
2-انتخاب كنيد قسمت C program
3-انتخاب كنيد قسمت Automationstudio :
4-Commond
نكته: 2 بار كليك كنيد رو ي آيكون Automationstudioكه روي ميزكار و فيروزتان قرارگرفته است.
پنجره مهم Automationstudio بازمي شود كه نشان داده شده درشكل 2-1.
با بازشدن پنجره Automationstudio يك طرح و دياگرام خالي نمايش داده ميشود.
آن همچنين DiagramEditorو ProjectExplor و Library Explorer و نوارابزارهاي پيوسته اش را معرفي ميكند.
محتواي فصل زير را مفصل و جزء به جزء پنجره مهم Automationstudio را شرح ميدهد . در محتواي اطلاعات راهنما، عملكردهاي ظاهرشده در منوها، نوارابزارها و منوهاي pop-up كه به تنهايي شزح خواهند داد و داخل منوها را اشاره خواهند كرد از همه جهت به راهنماي كاربر از سختي زيادي پرهيز شده است.
اين بخش را با شرح مفصلي از ساختمان هر يكي از آيتمهاي پنجره مهم Automationstudio آغاز ميكنيم. آيتم ها در اين پنجره مهم به دو دسته تقسيم ميشوند: (طبق شكل 1-3)
1- استاتيك 2- ديناميك
Aنوار عنوان (استاتيك)
Bنوا منو(استاتيك)
Cنوار ابزارهاي مختلف(استاتيك)
DLibrary Explorer(ديناميك)
EProjectExplor(ديناميك)
Fمثالي از منوي pop- up (ديناميك)
منوي View:
اين منو شامل همه دستوراتي است كه مربوط ميشود به تغيير اصلاح ديد و نظر ميكرد كه ملاك يك طرح است.
Grid اين دستور اجازه ميدهد به كاربر كه كاربرد شبكه را در بردن نمونهها به داخل مكان مورد نظر نمايش ميدهد.
Rulers :اين دستور اجازه ميدهد كه كاربر خطهاي عمودي و افقي را نمايش دهد يا ندهد.
Contactpoints : اين گزينه اجازه ميدهد به كاربر كه نقاط برخورد و اتصال هر نمونه روي طرح را ببيند.
Connection ports: اين گزينه اجازه ميدهد به كاربر كه وضعيت هاي اتصالي هر نمونه را روي طرح ببيند.
Connection ports name: اين گزينه اجازه ميدهد به كاربر كه نام همه وضعيت هاي ارتباطي و اتصالي هر نمونه روي طرح را ببيند.
Component snap: اين گزينه در زمان تطبيق بدست ميآورد نمونههايي از منابع را كه جداسازي خواهند شد در شبكه روي طرح.
منوي Insert: اين منو شامل دستوراتي است كه مربوط به ايجاد عناصر طراحي و فضاي متن در يك طرح ميشود ميباشد. اين منو تنها زمانيكه يك طرح فعال است نمايان و فعال ميباشد.
Line: اين گزينه اجازه ميدهد به كاربر كه خطوط را روي يك طرح استفاده كند.
Rectanye: اين گزينه اجازه ميدهد به كاربر كه مربع و مستطيل را روي يك طرح استفاده و طراحي ميكند.
Arc: اين گزينه اجازه ميدهد به كاربر كه قوسها و كمانها را روي يك طرح استفاده و طراحي كند.
Ellipse: اين گزينه اجازه ميدهد به كاربر كه بعضي ها را در اندازههاي مختلف روي يك طرح طراحي و استفاده كند.
Polygom: اين گزينه اجازه ميدهد به كاربر كه چند ضلعي را در اندازه هاي مختلف روي يك طرح استفاده و طراحي كند.
Text : اين گزينه اجازه ميدهد به كاربر كه فضاي متن را در يك طرح وارد كند.
Picture: اين گزينه اجازه ميدهد به كاربر كه يك JPGو BMP را به شكل عكس در يك طرح وارد كند.
Field: اين گزينه اجازه ميدهد به كاربر كه فضاهاي اتوماتيكي و خودكار حاوي طرحهاي معمولي را وارد كند.
Bill of materials: اين گزينه اجازه ميدهد به كاربر كه در يك طرح يك آگهي از ماده حاوي مقدار و نام حقيقي قطعه را وارد كند.
اين منو شامل همه دستوراتي ميشود كه به تغيير جهتيابي و موقعيت و قسمتبندي عناصر داخل يك طرح مربوط است.
اين منو تنها در زمانيكه يك طرح فعال است، نمايان و مرئي است.
در اين نمونه يك موضوع ميتواند يك نمونه، يك گروه، يا يك مجموعه متعدد و گوناگوني از اين عناصر ميباشد.
اگر مجموعه يك گروه است، تقسيمبندي عملكردها، عملي وقابل اجرا خواهد بود روي محور تقارن و روي محور چرخشي گروه- اگر آن يك مجموعه متعدد و گوناگون است، تقسيم بندي عملكردها عملي و قابل اجرا خواهد بود به صورت مجزا و اختصاصي روي هر عنصر مجموعه.
اين منو شامل دستورات مربوط به شبيهسازي يك پروژه يا نقشه است. شبيهسازي جستو جو ميكند. . شبيهسازي موتوري قسمت انتخاب شده از طرح مدار را تخمين ميزند و رفع ميكند به رفتار و نمونههاي انيميشني عكسالعمل نشان ميدهد.
Normal:
اين گزينه به كاربر اجازه ميدهد كه يك مدار را به روش نرمال شبيهسازي كند. اين روش مطابق با حداكثر سرعت شبيهسازي بدل بر اساس نصب ميباشد.
توانايي نمايش پنجرههاي متعدد و گوناگون به صورت همزمان كه آسان ميكند مبادله اطلاعات بين پنجرههاي باز مختلف روي صفحه شما را كه به صورت باز هستند. در Automationstudio اين قابليت و توانايي يك ابزار تجزيه و تحليل بسيار مفيد براي درخواستهاي زير ميباشد:
1-ارزيابي كردن يك يا چندين طرح در هنگام شبيه سازي.
2-بخشهاي روشن و هايلايت طرح شخصي كه رفتاري مطيع شبيهسازي دارد درباره سود و بهره مخصوص و ويژه است.
اين قسمت زمانيكه كار روي مدارهاي پيجيده شامل طرح هايي در سايز بزرگ يا هنگام شبيه سازي يك پروژه حاوي طرح هاي زياد باشد مفيد است. عكس زير مربوط به يك نمونه اي از چگونگي نمايش يك پنجره چند قسمتي است كه به كاربر اجازه مي دهد و 2 پنجره مختلف را در زمان يكسان ببندد ( شكل 13-3)
Window layout
از اين منو شما مي توانيد طرح باز كردن پنجره ها را در طي جلسه كاريتان سازمان دهي كنيد.
در زير يك شرحي از دستورات مختلف داخل اين منو مي باشد. پنجره هاي راهنماي كاربر را براي اطلاعات بيشتر روي تشكيلات پنجره ها مي بينيد.
منوي windows شامل دستوراتي است كه تشكيلات پنجره ها و دو نسخه اي كردن نمايش پنجره هاي مخصوص مربوط مي شود ( شكل 14-3)
Newview: اين گزينه به كاربر اجازه مي دهد كه پنجره جديدي را باز كند كه منظره هاي مختلفي از طرح معمولي را نشان مي دهد.
Close all windows : اين گزينه اجازه مي دهد به كاربر كه همه پنجره هاي پروژه هاي معمولي را ببندد.
Display اين گزينه به كاربر اجازه مي دهد كه برنامه هاي سودمند مختلف را براي مديريت نمايش دهد.
Automation studioمانند نوارهاي ابزار كاربر محكي كه در كار درخواست مي شود مفيد و خوب مي باشد.
Tool bars: اين دستور اجازه مي دهد به كاربر كه نوارهاي ابزار نمايش داده شده روي صفحه را انتخاب كند و بخش نوارهاي ابزار را كه بيشتر حدود همه نوار ابزارها را پيدا مي كند را ببيند.
براي نمايش دادن يا مخفي كردن يك نوار ابزار انتخاب كنيد
Windowè displayè toolbars
سپس نواز ابزار را كنترل كنيد يا نكنيد اين گزينه همچنين به واسطه كليد F6 يا به واسطه يك منوي popup فراهم و در دسترس است. هنگاميكه اشاره گر موس در مكاني روي نواز ابزار مي باشد تحريك كنيد يك نوار ابزار را كليك كنيد روي آن و بدون اينكه شستي موس را رها كنيد حركت دهيد موس را در مكاني كه مي خواهيد نوار ابزار قرار گيرد. طرح نوار ابزار شامل همه شستي هايي كه مطابق است با بيشترين دستورات مورد استفاده در poojeef explorer، diagram explorer مي باشد. نوار ابزار خود كار در عملكرد سودمند خود را ميزان مي كند. زمانيكه گزينه غير فعال است رنگ شستي آن تيره است و بنابر اين غير قابل استفاده مي باشد.
محتواي نوار ابزار در گزينه هاي زير بيان شده است ( شكل 18-3)
Newproject ايجاد يك طرح جديد
Open باز كردن يك طرح فعلي
Save ذخيره يك پروژه معمولي و رايج
Print پرينت گرفتن از مطلب مورد نظر
Newreport ايجاد يك آگهي از مطلب bom يا نوعي گزارش مجزا از پوشه ها
New SFC ايجاد يك SFC جديد. اين گزينه يك نمونه غير استاندارد است كه مي تواند سودمند باشد تنها اگر اجازه آن صادر شود.
Project explorer پنجره مربوط به خودش را باز و بسته مي كند
Library explorer پنجره مربوط به خودش را باز و بسته مي كند
Variable explore پنجره مربوط به خودش را باز و بسته مي كند
اين نوار ابزار در طرح editor ظاهر مي شود به وسيله default تنها اگر يك طرح فعال باشد محتواي نوار ابزار در گزين هاي زير بيان شدهاست. ( شكل 19-3) به علت سادگي از آن صرف نظر مي شود.
Simulation toolbar
اين نوار ابزار حاوي شستي هاي زير مي باشد ( 20-3)
Normal يك مدار را با سرعت نرمال شبيه سازي مي كند
Stepby step شبيه سازي مي كند يك مدار را جايي كه هر كليك موس مطابق با يك سيكل باشد
Slow mation شبيه سازي مي كند يك مدار را با سرعت خيلي آهسته
Pauseمانع شبيه سازي مي شود.
Stop متوقف مي كند شبيه سازي را
Project simulation همه طرح هاي پروژه معمولي و رايج را زمانيكه شبيه سازي راه انداخته مي شود انتخاب مي كند
Document simulation طرح معمولي را زمانيكه شبيه سازي به راه مي افتد انتخاب مي كند
Selection simulation آيتم هاي برگزينه را زمانيكه شبيه سازي به راه مي افتد انتخاب مي كند
Select item to simulate جعبه ديالوگ طرح ها را براي شبيه سازي كردن پروژه رايج و معمولي باز مي كنمد
اين نوار نوع منوها و دستورات را نمايش مي دهد زمانيكه به وسيله كاربر انتخاب مي شود. آن محتواي اطلاعات مختلف است را نمايش مي دهد. به روش معمولي. حالت ويژه كليدهاي may, num, DEF INS به علاوه در طرح editor به كاربر روي محل اشاره گر در طرح اطلاع مي دهد. (اطلاعات زير نشان داده مي شود در جهت دست راست نوار وضعيت ( شكل 25-3)
St xx.xx:xx.xx زمان گذشته از شروع شبيه سازي
X=xxx,y=yyy تعيين مي كند اشارهگر را در طرح
X%نشان مي دهد عامل بزرگ نمايي را كه به طور معمول در طرح استفاده مي شود
(طرح و نقشه كش) به كاربر اجازه مي دهد كه سير تكاملي در زمان را با متغيرهاي مختلف در يك پنجره گرافيك در طي شبيه سازي مي ببنيد. چندين قطعه مختلف متغير مي توانند به صورت همزمان در يك تك نمودار ديده شوند. يك plotter در پروژه ذخيره است.
1) خطوط ورودی خروجی داده ( گذرگاه مشترک) Data Bus.
2)خطوط آدرس(گذرگاه آدرس) Adress Bus.
3)واحد محاسبه و منطق Alu.
4)واحد حافظه Memory Unit.
1) کار خطوط مشترک داده انتقال داده از بخشی به بخش دیگر است بنابراین در یک زمان واحد تمام واحدها به خطوط مشترک داده متصل هستند ولی تمام بخش ها از اطلاعات روی آن استفاده نمی کنند.
1)این خطوط مشخص می کنند که اطلاعات دقیقا از چه دستگاهی وارد یا خارج شوند این خطوط نیز به تمام واحدها متصل هستند.
2)وظیفه این واحد انجام محاسبات و عملیات منطقی پایه است این اعمال منطقیand,or,xor,not هستند و اعمال محاسبات پایه شامل تمام جمع کننده (Full Adder) و معکوس کننده (Inverter) هستند که به طور سخت افزاری در Cpu قرار دارند.
3)برای اینکه Cpu بتواند کاری انجام دهد باید اطلاعات خود را در جایی ذخیره کند این کار را واحد حافظه در Cpu انجام می هد و داده های مورد نیاز Cpu را به طور موقت در خود ذخیره می کند و واحد آن ثبات یا Register است .
نکته:
تعداد آدرس = دو به توان تعداد خطوط آدرس
خانواده های Cpu هایی که در PC مورد استفاده قرار می گیرند عبارتند از:
خانواده های X86
8086: PC XT,JR A:20bit D:16bit
8088: PC XT,JR A:20bit D:8bit
80286: PC AT A:24bit D:16bit
80386: PC AT A:24bit D:16bit
80486: PC AT A:24bit D:32bit
80586: PC AT A:24bit D:64bit
در 80286 از تکنولوژی ISA استفاده می کنند در 80386 از تکنولوژی EISA استفاده می کنند در 80486 از تکنولوژی EISA,VESA استفاده می کنند در 80586 از تکنولوژی PCI استفاده می کنند .
تکنولوژی جدیدی که در X586 استفاده می شود تکنولوژی AGP نامیده می شود.
ثبات یا Register:
محلی است که در CPU قرار دارد و اطلاعات را به طور موقت در خود ذخیره می کند ثبات از سلول های حافظه به نام فلیپ فلاپ (flipflap) تشکیل شده است یک فلیپ فلاپ می تواند دارای مقدادیر صفر یا یک باشد یعنی کار یک بیت را انجام میدهد.
خواص ثبات:
1) قابلیت Load داشته باشد. یعنی بتوانیم به ثبات مقدار اولیه بدهیم.
2)قابلیت Regist داشته باشد. یعنی بتوانیم داده ها را در آن ذخیره کنیم.
3)قبلیت Change داشته باشد. یعنی بتوانیم مقدار آن را تغییر بدهیم این تغییرات عبارتند از:
الف) بتواند setشود. یعنی تمام بیت هایش به یک تبدیل شود.
ب) بتواند clear شود . یعنی تمام بیت هایش به صفر تبدیل شود.
ج) بتواند complement شود. یعنی بتواند یک واحد از آن کم شود.
د) بتواند incerement شود. یعنی بتواند یک واحد به آن اضافه شود.
ه) بتواند shift شود. یعنی قابلیت انتقال داشته باشد.
انواع ثبات:
1) ثبات های عمومی (general- pwpose register). 2) ثبات های خاص (special-pwpose register).
ثبات های عمومی ثبات هایی هستند که برای آن ها کار خاصی در نظر نمی گیریم و در همه ی کار های cpu قرار می گیرند. این ثبات ها قابلیت و توانایی تمام ثبات های دیگر را نیز دارد و می توان به جای هم مورد استفاده قرار گیرند.
ثبات های خاص ثبات هایی هستند که یک کاربر با وظیفه ی خاص دارند یعنی بسته به نوع کاری که انجام می دهیم ممکن است اجازه استفاده از آن ثبات را داشته باشیم یا خیر . ثبات های این خانواده دارای وضعیت بحرانی (critical) می باشند.
انواع ثبات های عمومی:
8bit: AL,AH,BL,BH,CL,CH,DL,DH
16bit: AX,BX,CX,DX
32bit: EAX,EBX,ECX,DX
eax یا accumulator یا ثبات انباره:
این ثباتی همه کاره است یعنی تمام دستور العمل هایی که درزبان اسمبلی داریم روی این ثبات می تواند انجام شود eax تنها ثباتی است که با فضای بیرون از cpu ارتباط مستقیم دارد و به طور مستقیم به خطوط داده متصل است پس eax می تواند به طور مستقیم اطلاعات را بگیرد یا به طور مستقیم اطلاعات را بفرستد. مبدا و مقصد بسیاری از دستورات اسمبلی این ثبات است.
ثبات ebx یا base register یا ثبات پایه:
این ثبات امکان انجام برخی از محاسبات را دارد و در نقل و انتقال اطلاعات شرکت می کند مهمترین وظیفه ی آن این است که نقش مرکز پایه را برای دسترسی به بخش یا بخش هایی خاص از سیستم فراهم کند.
ثبات ecx یا conter register یا ثبات شمارنده:
یک ثبات عمومی است که می تواند در عمل نقل و انتقال اطلاعات و یا برخی اعمال محاسباتی شرکت کند و از آنجایی که توانایی انجام اعمال شمارشی را دارد به آن ثبات شمارنده می گویند هر جا در اسمبلی به شمارنده نیاز داشته باشیم از این ثبات استفاده می کنیم.
ثبات edx یا ثبات data regisret یا ثبات داده:
این ثبات یک ثبات عمومی است که می تواند در عمل نقل و انتقال اطلاعات و یا برخی از اعمال محاسباتی شرکت کند وظیفه اصلی این ثبات دریافت و ارسال اطلاعات است این ثبات همچنین می تواند با عنوان ثبات کمکی در کنار دیگر ثباتها قرار گیرد.
ثبات های خاص:
الف) ثباتهای اشاره گر یا pointer:
از ثبات های اشاره گر در آدرس دهی داده ها در بخش های مختلف حافظه استفاده می کند این ثبات ها عبارت اند از:
ebp,eip,esp
ebp یا base pointer یا اشاره گر پایه:
از این ثبات 32بیتی برای آدرس دهی بخشهای مختلف حافظه و به عنوان مرکزی برای برداشت اطلاعات استفاده می کند.
eip یا instruction pointer یا اشاره گر دستور:
از این ثبات 32بیتی برای دسترسی به دستور العملی که هم اکنون باید اجرا گردد استفاده می شود این اشاره گر همواره به ابتدای یک بخش از حافظه که دستور العمل در آن دارد اشاره می کند بسته به نوع عمل اجرا شده eip ممکن است یک یا چند خانه افزایش یابد.
esp یا stack pointer یا اشاره گر پشته:
از این ثبات 32بیتی برای دسترسی به بخش حافظه موقت یا پشته در یک برنامه زبان اسمبلی استفاده می شود.
ب) ثبات های شاخص یا index register:
این ثبات ها عبارتند از esi,edi:
edi یا destination index یا شاخص مقصد و esi یا source indexیاشاخص مبدا:
این ثبات های 32بیتی به صورت جفت در نقل و انتقال اطلاعات بین بخش های مختلف حافظه استفاده میشود همچنین از این دو ثبات برای ساخت آدرس استفاده می گردد محتویات این دو ثبات فقط آدرس اند نه داده.
ج) ثبات های eflag:
این ثبات 32 بیتی ثباتی است که وظیفه ی اعلام وضعیت داخلی cpu به استفاده کننده است و شامل شرایطی همچون وجود یا عدم وجود بیت نقلی (cary) بیت توازن(parity) بیت نقلی کمکی(auxiliary) بیت صفر(ziro) بیت علامت(sign) بیت اجرای دستورات(trap) بیت وجود وقفه(intter up) بیت جهت انتقال(direction) بیت سریز(overflow) بیت ها مربوط به کارکردن cpu در وظعیت حفاظت شده (modeprotected ) می باشد.
ساختار eflag:
cf
0
pf
0
af
0
zf
sf
tf
if
df
of
io
dl
nt
0
cf(carry flag):
این بیت وجود یا عدم وجود کری در یک بیت نقلی را نشان می دهد این بیت همواره به عنوان بالاترین بیت در اعداد بی علامت از نظر ارزش است این بیت فقط برای اعداد بی علامت و فقط برای eax تعریف شده است .
توازن(parity):
از جزوه ی مدار منطقی
یکی از راه های یافت خطا استفاده از بیت توازن است بیت توازن وضعیت تعداد بیت ها را مشخص می کند.
انواع توازن:
1) توازن فرد (odd parity):
اگر تعداد بیت های قالب ارسال شده فرد باشد بیت توازن صفر و در غیر این صورت یک است.
2) توازن زوج (even parity):
اگر تعداد یک های قالب ارسالی زوج باشد بیت توازن صفر و در غیر این صورت یک خواهد شد.
Pf(parity flag):
این بیت وضعیت توازن اطلاعات ارسال شده یا دریافت شده را که در eax قرار گرفته را نشان می دهد. توازن به کار رفته به صورتی است که اگر تعداد یک ها فرد باشد بیت توازن یک خواهد شد (توازن زوج). علت این که cpu از توازن زوج استفاده می کند به ساختارalu برمی گردد چرا که درalu گیت xor قرار گرفته است.
Af(auxiliary flag):
این بیت وجود یا عدم وجود بیت نقلی را در محاسبه حاصل جمع بیت شماره 3از دو ثبات نشان می دهد این بیت در محاسبات bcd مورد استفاده قرار می گیرد.
Zf(ziro flag):
این بیت وضعیت صفر شدن همه بیت های eax را نشان می دهد به عبارت دیگر اگر بر اثر عملی چه منطقی چه محاسباتی کلیه بیت های eax صفر شود این بیت فعال خواهد شد.
Sf(sign flag):
در صورت استفاده از اعداد علامت دار بیت علامت در این بیت ذخیره می شود . در صورتی که عمل چرخش یا انتقال روی محتویات یک ثبات صورت پذیرد وضعیت بیت علامت در صورت تغییر آن در این بیت ذخیره می شود.
نکته:
در صورتی که در یک عدد علامت دار تغییر علامت ناخواسته رخ دهد حالت over flow پیش می آید. بنابراین اعداد علامت دار را نباید به صورت منطقی شیفت داد بلکه باید به صورت محاسباتی شیفت داد.
tf(trap flag) :
این بیت نحوه اجرای دستورات توسط cpu را نشان می دهد. به این صورت که یا دستورات طبق روال منطقی برنامه به صورت پشت سر هم و پی در پی با دادن یک بار دستور اجرا می شود و یا در حالتی هستیم که دستورات به صورت مرحله به مرحله اجرا خواهند شد یعنی با هر بار اجرای دستور فقط یک دستورالعمل اجرا خواهد شد و نتیجه ی حاصل از آن به دست خواهد آمد. اگر tf یک باشد در حالت single step (قدم به قدم یا مرحله به مرحله) و اگر صفر باشد در حالت normal (پی در پی) هستیم.
If(interup flag) :
برای ارتباط cpu با دنیای خارج cpu از دو حالت زیر استفاده می کند.
Poling(سر کشی),interup(وقفه):
در روش سرکشی برای بررسی عناصر جانبی و بررسی اعلام آمادگی این عناصر برای دریافت و ارسال اطلاعات cpu هر بار خطوط کنترلی هر یک را بررسی می کند به عبارت دیگر با سرکشی به هر یک از این عناصر آمادگی یا عدم آمادگی آن ها را بررسی می کند. در کارهای صنعتی وقتی که تعداد عناصر جانبی کم است از این روش استفاده می شود در ضمن این روش از نظر سخت افزار و نرم افراز بسیار راحت است اما یک اشکال بزرگ دارد و آن این است که cpu در هنگام سر کشی هیچ کار دیگری نمی تواند انجام دهد زیرا دائما در حال سرکشی است.
خطوط ارتباطی بین ابزار و cpu را خطوط وقفه می گویند هر وقفه دارای یک درخواست(request) و یک پاسخ(acknowledge) می باشد.
وقفه در cpu بر دو نوع است:
1) وقفه قابل صرفه نظر شدن یا maskable.
2) وقفه غیر قابل صرفه نظر شدن یا non-maskable.
فقط یک وقفه است که غیر قابل صرفه نظر شدن است که همان وقفه nmi می باشد و به کلید reset روی سیستم متصل شده است یعنی تحت هر شرایطی cpu باید به این وقفه جواب دهد و بالاترین اولویت را دارد و مستقیما به پایه ی nmi میکروپروسسور وصل است بقیه ی وقفه که قابل صرفه نظر هستند اولویت بندی شده و در اختیار عناصر دیگر قرار می گیرند.
اگر بیت وقفه یک باشد علامت پذیرش وقفه است و اگر صفر باشد بیانگر عدم پذیرش وقفه است(در مورد وقفه های قابل صرفه نظر شدن).
DF(flag(direction
این بیت وضعیت ارسال اطلاعات در صورت استفاده از روش آدرس دهی شاخص(ESI,EDI) را نشان می دهد وبسته به مقادیر مختلف داده ها را از مبدا به مقصد و یا بلعکس منتقل می کند و در صورتی که اطلاعات از مبدا به مقصد منتقل می شود DF صفر است، ESI,EDIدر آغاز در ابتدای حافظه قرار دارند و در هر بار انتقال اطلاعات ESI,EDI یک واحد اضافه می شود وقتی عمل ارسال اطلاعات به مقصد تمام می شود ESI,EDI در انتهای بخش حافظه قرار دارند در این صورت اگر لازم باشد اطلاعات دوباره به مبدا فرستاده شوند DF باید یک شود و در این صورت با هر بار ارسال اطلاعات از ESI,EDI یک واحد کم می شود.
حجم اطلاعات منتقل شده از مبدا به مقصد و یا بلعکس را ثبات CL می گوییم.
OF((over flow:
اگر در یک محاسبه در اعداد با علامت over flow رخ دهد (یعنی یک بیت اضافه بیاوریم) این بیت یک خواهد شد.
Nt,Pl,Io:
این سه بیت مربوط به عملکرد cpu و در وضعیت حفاظت شده است.
وضعیت های کاری cpu های 80286 به بالا:
1)وضعیت read mode:
اینکه هر cpu می تواند دستور العمل های 8086 را اجرا کند. در این صورت حافظه به چهار بخش 64 کیلو بایتی تقسیم می شود.
2)وضعیت protected mode :
دراین وضعیت cpu می تواند حافظه را به طور کامل تقسیم کرده و در هر قسمت یک برنامه مجزا را اجرا کند. در این صورت هر بخش از حافظه اصلی مانند یک حافظه مجزا عمل می کند.
3)وضعیت virtual mode:
در این وضعیت cpu می تواند که آدرس دهی مجازی انجام دهد پس می تواند حجم حافظه را به طور مجازی افزایش دهد.
د)ثبات های بخشsegment registers:
این ثبات ها برای ساخت آدرس بخش های حافظه استفاده می شود حافظه اصلی برای اجرای برنامه به چهار بخش تقسیم می شود.
1) بخش دستورات(code segment)
2) بخش داده(data segment)
3) بخش پشته(حافظه موقت)(stuck segment)
4)بخش اضافه باکمکی(extra segment)
تقسیم بندی این حافظه اصلی به صورت آدرس است پس در کل نیاز به داشتن چهار آدرس داریم.
CS یا ثبات بخش کد(code segment register):
این ثبات آدرس ابتدای بخش دستورات را ذخیره می کند.
DS یا ثبات بخش داده(data segment register):
این ثبات آدرس ابتدای بخش داده را ذخیره می کند.
SS یا ثبات بخش پشته(stack segment register):
این ثبات آدرس ابتدای بخش پشته را ذخیره می کند
ES ثبات بخش کمکی(extra segment register):
این ثبات آدرس ابتدای بخش کمکی را در خود ذخیره می کند.
ثباتIP در بخش کد وظیفه اش اشاره به دستورالعملی است که باید اجرا شود و در آدرس آن cs:ip است.
ثباتBPدر بخش data مورد استفاده قرار می گیرد و دسته ی به آن به صورت ds:bp است.
ثباتSPدر بخش stackمورد استفاده قرار می گیرد و دسته ی به آن به صورت ss:sp است. چون sp با حجم پشته پر می شود با هر بار ورود اطلاعات به آن (پشته) از sp کم خواهد شد.
در قبال برنامه نویسی معمولا آدرس ابتدای بخش دستورات و اضافی یکی هستند.
نکته: ثبات های بخش در همه cpu های خانواده x86 ،16 بیتی هستند.
CS:
Cs ثباتی 16 بیتی است به آدرس شروع بخش دستور در حافظه اصلی را برای برنامه ای که در حال اجرا است در خود دارد. بخش دستورشامل کلیه دستورات برنامه نویسی شده که با مشخص کردن آدرس شروع بخش دو آغاز شده و به دستورendختم می شود. برای ساخت آدرس در وضعیت read mode باید محتوای cs در f ضرب شده و حاصل به عنوان بخش ثابت در ساخت آدرس مورد استفاده قرار گیرد به عبارت دیگر:
Effective address = cf f + ip
با ضربf در cs چهار بیت صفر درسمت راست خواهیم داشت.
آدرس موثر آدرس دسته ی به یک خانه حافظه است.
Offset همواره فاصله از آغاز یک بخش خواهد بود.
مراحل اجرای یک دستورالعمل در cpu:
1) fetch: یعنی برداشت دستورالعمل از حافظه که توسط address unit, bus unit انجام می گیرد.
2) decode: یعنی برگرداندن کد دستورالعمل که توسط execution uint انجام می گیرد.
3) execute: یعنی اجرای یکی دستورالعمل.
بخش های یک cpu:
1) bus unit : کار نقل و انتقال داده ها و دستورات است.
2) address unit: کار این قسمت ساخت آدرس دستورالعمل است.
3) exe cution unit: کار این قسمت اجرای یک دستورالعمل است.
این بخش شامل دو قسمت است:
الف) insttraction queue:
ب) execution unit:
هر چه حجم صف یا queue در cpu بیشتر باشد سرعت اجرا بیشتر است معمولا بین هشت یا چهارده دستورالعمل در cpu کدشان برای اجرا آماده می شود.
Ds:
ثباتی 16 بیتی است که از آن برای مشخص کردن آدرس شروع بخش داده در حافظه اصلی استفاده می شود. بخش داده حاوی کلیه داده ها و احتمالا محل هایی است که به عنوان متغیر برنامه نویسی مورد نیاز می باشد. برای دسترسی به داده هایی ذخیره شده در این بخش نیز آدرس موثر با فرمول زیر بدست می آید:
این offset بسته به نوع آدرس دهی می توان edi,bp یا es باشد در بخش داده می توان ثابت ها و متغیرها را ذخیره کرد.
Ss:
ثباتی 16 بیتی است که می توان آدرس شروع حافظه پشته در هنگام برنامه نویسی را در خود ذخیره کند. برای آدرس دهی به stack و یا ذخیره و بازیابی اطلاعات در آن داریم.
این offset می تواند sp یا ebp باشد. توجه کنید که ebp در نوع خاصی از برنامه های اسمبلی که بخش داده و پشته یکی باشند می توانند مورد استفاده قرار گیرند.
نکته:maximom مقدار هر بخش در حافظه 64 کیلو بایت است.
برنامه نویسی در اسمبلی:
هر فایل اسمبلی با پسوند asm قابل شناسایی است که فایلی از نوع متنی با کد اسکی است این فایل را باید توسط اسمبلرtasm) .exe یا (masm .exe به این فایل آبجکت (obj) تبدیل کرد و سپس با استفاده از لینک (link .exe) آن فایل آبجکت را به فایل exe تبدیل کرد.
فایل exe را می توان تحت هر شرایط خاصی توسط exe2bin .exe به فایل با پسوند com تبدیل کرد.
فایل های exe و com:
خصوصیات فایل های exe:
1) فایل های exe هر چهار بخش es ,ss , ds ,cs را دارد.
2) حجم فایل های exe محدود نیست یعنی فایل exe می تواند تا maximom حجم حافظه حجم داشته باشد بنابراین فقط از 256KB استفاده نمی کند بلکه کل حافظه پایه را (حافظه اصلی) به چهار بخش تقسیم می کند.
3) آدرس شروع آن ها ثابت نیست یعنی بخش ها در فایل exe دارای آدرس ثابت نیستند بلکه دارای آدرس شناوراند و در هر جای حافظه می توانند قرار گیرند. پس فایل exe اصطلاحا یک فایل reloeatable است.
خصوصیات فایل های com:
1) فایل های com فقط یک بخش دارند یعنی es ,ss , ds ,cs همه یکی هستند.
2) حجم فایل com حداکثر 64KB است چون یک بخش بیشتر نداریم.
3) آدرس شروع آن ثابت است یعنی برای ساخته شدن آدرس نیازی به ساخت آن نداریم. آدرس شروع هر برنامه از نوع com.100hex است به عبارت دیگر اولین مقداری که ip می گیرد 100hex است.
4) برای فایل com به هیچ عنوان نباید بخش پشته تعریف شود یعنی ss نباید در متن برنامه اسمبلی تعریف شود چرا که پشته را خود سیستم تعریف می کند.
الویت بندی اجرای فایل ها در سیستم:
1)فایل های com 2) فایل های exe 3) فایل های bat
نکته: header(یک اطلاعات عمومی درباره فایل می دهد) فایل های 256 ,exe بایت وheader فایل 512b است .
نکته: فایل های exe اگر خیلی بزرگ باشند می توان در کنار آن ها فایل هایی با پسوند (over lait file)ovl ایجاد کرد.
این فایل ها دنباله فایل exe هستند که دارای header نیست.
نکته: در هنگام ایجاد یک فایل com چون stack تعریف نشده هنگام link کردن لینکرپیام خطای no stack defined را خواهد داد البته لینکر فایل exe را تولید خواهد کرد.
4/8/84
انواع خطاها در ماکرو اسمبلر و لینکر:
1) خطاهای اساسی:
خطاهایی هستند که روال تبدیل را متوقف می کند یعنی اگر در هنگام تولید یک فایل object یک خطای اساسی رخ دهد دیگر فایل object تولید نخواهد شد در این صورت پیام خطا و نوع خطا به همراه توضیح آن چاپ خواهد شد.
2) خطاهای هشداری:
این خطاها روال تبدیل را متوقف نمی کند مثلا خطای no stack defind از نوع خطاهای هشداری است.
فرم کلی دستورات در زبان اسمبلی
[label:] mnemonic [operand(s)] [;commed]
Label (برچسب):
فایلی است که برای یک دستور در نظر گرفته می شود. این نام حداکثر 32 فرمی است و حتما به علامت : ختم می شود و می تواند شامل حروف a..z , c..z ارقام 0..9و برخی علائم خاص باشد مانند:
0,?,@,_,$
این نام نمی تواند یکی از دستورات زبان اسمبلی یا نام یک ثابت باشد مکان خالی یا blankدر چسب مجاز نیست. برچسب نباید با رقم شروع می شود و نقطه می تواند فقط در آخر برچسب باشد.
نکته: اسمبلی حساس به متن نیست (یعنی حروف بزرگ و کوچک فرقی نمی کند).
Mnemonic (کد دستور):
که معادل زبان اسمبلی که برای هر دستور در زبان ماشین قرار می گیرد و حداقل یک حرفی و حداکثر 7 حرفی است.
Operand (مولفه):
هر دستور موجود در زبان اسمبلی بسته به نوع و روش آدرس دهی ممکن است دارای صفرتا سه مولفه باشد این مولفه یا یک ثابت است یا هم خانه ای از حافظه است یا یک مقدار ثابت است.
داده ها یی که مربوط به اسم خانه ای از حافظه است به طور کلی به یکی از صورت های زیر نشان می دهیم:
آدرس خانه ای از حافظه که 32 بیتی mem-32:
آدرس خانه ای از حافظه که 16 بیتی mem-16:
آدرس خانه ای از حافظه که 8 بیتی mem-8:
می توان بجای اسم خانه ای از حافظه آدرس خانه ای از حافظه را در دستور قرار داد که در این صورت بین قرار می گیرد. در این صورت [address]محتوای آن آدرس را نشان خواهد داد.
ثوابت به دو دسته تقسیم می شوند:
1) عددی:
ثوابت عددی به سه دسته تقسیم می شوند:
الف) decimal ب) hexa decimal ج) binerg
ثابت decimal ثابتی است که در انتهای آن حرف d ذکر شود مانند:
(یعنی 89 یکی واحد دهی) 89d
طبق قرارداد می توان حرف d را حذف کرد بنابراین عددی که در انتهای آن حرفی نباشد یک عدد را decimalاست.
89
ثابت hexadecimal ثابتی است که در انتهای آن حرف h ظاهر شود مانند:
89h 8a (یک بیت اضافه می شود)
ثابت باینری ثابتی است که در انتهای آن حرف b قرار گیرد.
01011101b
نکته: اگر یک داده و محلی که قرار است داده در آن قرار گیرد انطباق برقرار نباشد خطای mis matchرخ می دهد. مانند هنگامی که بخواهیم یک مقدار 16 بیتی را در ثبات ah قرار دهیم.
نکته: برای اعداد علامت دار منفی دسیمال گذاشتن علامت منفی در پشت عدد کفایت می کند اما اعداد منفی باینری و hexadecimal حتما باید به فرم مکمل دو باشند.
2) کاراکتری:
مجموعه ای از کاراکترها که در داخل علامت های' ' قرار گیرد ثابت کاراکتری است. یک ثابت کاراکتری در زبان اسمبلی همواره یک بایت است بدون توجه به تعداد کاراکترها.
Comment (توضیح):
هر توضیح با منفی که لازم باشد به دستور اضافه کنیم تا دستور واضح شود هر توضیح حتما باید بعد از علامت ؛ قرار گیرد. توضیحات در هنگام تبدیل به زبان ماشین در نظر گرفته نخواهد شد.
روش های آدرس دهی در real mod:
1) آدرس دهی ثباتی (register addressing)
در این روش آدرس دهی مولف های دستور به کار رفته حتما ثبات های cpu هستند معمولا ما برای هر دستورالعمل یک مبدا (source) و یک مقصد (destination). در این روش آدرس دهی هم مبدا و هم مقصد باید ثبات باشند. شکل کلی این نوع آدرس دهی به فرم زیر است:
Instruction register, register
2) آدرس دهی فوری (immediate addressing)
اگر در عمل انتسال مبدا یک مقدار ثابت هشت بیتی، 16 بیتی یا 32 بیتی باشد عمل آدرس دهی بلافصل (فوری) را خواهیم داشت. شکل کلی آن به فرم زیر است:
Instruction destination , constant
مثال)
Mov ax,100 ; ax = 100;
مقصد می تواند یک ثبات cpu و یا یک خانه از حافظه باشد از این روش معمولا برای مقدار دهی اولیه ثبات ها استفاده می کنند.
3) آدرس دهی مستقیم (direct addressing)
در این روش آدرس دهی آدرس مولفه با نامی که برای مولفه در حافظه قرار داده ایم به طور مستقیم در دستورالعمل ذکر می شود. شکل کلی آن به فرم زیر است:
Instruction register , soure
مبدا نام یک خانه از حافظه است که حتما باید در بخش داده تعریف شده باشد. بسته به نوع ثبات از آدرس داده برداشته می شود به عنوان مثال برای ثبات ax دو بایت از حافظه برداشته می شود.
4) آدرس دهی غیر مستقیم با ثبات (register indirect addressing)
در این نوع آدرس دهی cpu آدرس موثر را از جمع محتوای یکی از ثبات های di,bp,bx و یا si یا محتوای ثبات ds (که به ابتدای segment داده اشاره می کند) به دست می آید. در این صورت باید ثبات را در قرار دهیم. شکل کلی آن به فرم زیر است:
Instruction register,[register]
; ax=[ds+bx]Mov ax,[bx]
در مثال فوق محتوای bx آدرس نسبی است و [bx] به داده ی ذخیره شده در آن آدرس اشاره می کند.
5) آدرس دهی نسبی با ثبات پایه(base relative addressing):
در این آدرس دهی cpu آدرس موثررا از جمع محتوای ثبات bp,ds یا bx و یک مقدار ثابت بدست می آورد.
Instruction register,[register+constant]
Mov ax,[bp+100]
تمرین: در مورد 2 نوع آدرس دهی دیگر یعنی:
6) آدرس دهی مستقیم با ثبات شاخص(direct index addressing).
7) آدرس دهی شاخص دار با ثبات پایه(base indexed dressing).
دستورات اجرایی دستوراتی هستند که اسمبلر در زمان ترجمه برنامه معادل زبان ماشین آن را تولید می کند ولی دستورات غیر اجرایی دستوراتی هستند که معادل زبان ماشین ندارند و اسمبلر کدی برای این دستورات تولید نمی کند.
11/8/84
الف) شبه دستورات تعریف داده:
تعریف ثوابت: برای تعریف ثوابت از دستور equal به شکل زیر استفاده می شود
Name equ data :فرم کلی
Name، نام یک مقدار ثابت و نام یک خانه ی حافظه می باشد.
Data، یک مقدار ثابت است که می تواند مقداری عددی، کاراکتری، آدرس حافظه و یا یک ثبات باشد.
مثال:
مقدار عددی ;data-1 equ 10eh
مقدارکاراکتری ;data-2 equ 'root'
آدرس ;data-3 equ [si]
ثبات ;data-4 equ cx
نکته:
در صورت استفاده از equ دیگر نمی توان تعریف مجدد برای آن نماد را داشت. در صورتی که بخواهیم امکان تعریف مجدد فراهم باشد بجای equ باید از = استفاده کرد . استفاده از علامت = خاص عبارت عددی است.
مثال)
غلط
Data-1 equ 10
Data-1 equ 20
درست
Data-1 = 10
Data-1 = 20
تعریف متغیرها: برای تعریف متغیرها از دستور define به شکل زیر استفاده می شود:
Name dx data [dup()] :فرم کلی
Name: نام متغیر
Dx: نوع متغیر
Data: مقدار اولیه متغیر
حالات x:
فضای یک بایتی db
فضای دو بایتی dw
فضای چهار بایتی dd
فضای هشت بایتی dq
فضای ده بایتی dt
مثال)
Data1 db 01h
Data-2 dw 2ef1h
Data-3 dd 3a00eh
در صورت که بخواهیم مقدار اولیه برای متغیر تعریف نکنیم بجای data از ؟ استفاده می کنیم.
مثال)
Data-4 dw ?
بنا به تعریف هر ثابت کاراکتری در زبان اسمبلی فقط و فقط در یک بایت قرار می گیرد و از علامت ' ' (تک کتیشن) برای نمایش آن استفاده می شود.
مثال)
Data-5 db 'this is a test'
ثوابت کاراکتری فقط یک بایتی می باشند پس همیشه از نوع db تعریف می شوند.
در اسمبلی آرایه هم می توان تعریف کرد . کافی است برای یک مقدار چند مقدار را در جلوی متغییر قرار دهیم.
مثال)
Data6 db 32,20,18,90,46
برای دست رسی به عناصر آرایه
Data6=32
Data6+1=20
Data6+2=18
Mov ax,data6+1:مانند
اختصاص فضای بیش از 10 بایت مستلزم استفاده از فیلد تکرار یا dup است.
در این صورت data ضریب تکرار برای داده مشخص می کند و در داخل پرانتز جلوی dup مقداری که باید تکرار شود را قرار می دهیم.
مثال)
Data7 db 5,5,10,10,10,10,10,8,8,8 ; data7 db 2dup(5),5dup(5),3dup(8)
آرایه ای به طول 100 کلمه یا 200 بایت بدون مقدار اولیه Data7 dw 100dup(?) ;
در زبان اسمبلی تعریف داده چندین خط را می تواند به خود اختصاص دهد. ولی توجه کنید که نوع داده را نمی توان عوض کرد.
مثال)
Data9 dd 20dup(10)
dd 30dup(0)
Data10 db 'first'
db 'second'
db 'third'
شبه دستورات ارجاع خارجی:
برنامه های نوشته شده در زبان اسمبلی ممکن است شامل چندین بخش یا ماژول باشد اگر این ماژول ها بخواهند داده هایشان را به اشتراک بگذارند این کار با استفاده از دو شبه دستور public,extrn به شکل زیر فراهم می شوند.
Public symbol[,…]:فرم کلی
این شبه دستور به ماژول های نوشته شده و ترجمه شده به طور جداگانه که در زمان لینک کردن به هم پیوند خورده اند اجازه می دهد که از نمادهایی که در این شبه دستور مشخص شده است به طور مشترک استفاده نماید. با این کار از تکرار داده های مشابه در ماژول های مختلف که جداگانه نوشته شده اند جلوگیری می شود.
Extrn name:type[,…] :فرم کلی
این شبه دستور برای اسمبلر مشخص می کند که داده های موجود در این شبه دستور در این ماژول تعریف نشده اند بلکه در ماژول های دیگری نوشته شده اند که توسط شبه دستور public به اشتراک گذاشته شده اند. به عبارت دیگر آن داده ها برای این ماژل خارجی هستند. نوع یا type بسته به نوع داده یکی از وظعیت های زیر است:
الف) اگر name ، داده ای باشد که در سگمنت داده یا اضافی تعریف شده باشد آنگاه type یکی از کلامات کلیدی byte,word یا dword خواهد بود.
ب) اگر name ، نام ثابتی باشد که توسط دستور equal یا مساوی تعریف شده باشد آنگاه type ، کلمه کلیدی abs خواهد بود.
ج) اگر name ، نام یک روال باشد آنگاه type یکی از دو کلمه ی کلیدی near یا far خواهد بود.
شبه دستور دیگری که می تواند در این بخش مورد استفاده قرارگیرد ، شبه دستور include است که به فرم زیر تعریف می شود:
Include filename :فرم کلی
این شبه دستور باعث الحاق محتویات فایل ذکر شده در دستور به برنامه فعلی خواهد شد. نحوه ی عمل این گونه است که اسمبلر در زمان ترجمه هنگامی که به این شبه دستور برسد محتوای فایل ذکر شده در دستور را خوانده و آنرا جانگزین شبه دستور نموده و سپس عمل ترجمه را ادامه می دهد.
18/8/84
ج) شبه دستورات تعریف سگمنت:
شکل کلی تعریف سگمنت به فرم زیر است:
Seq-name segment [aligm-typy] [combin] [class]
مجموعه دستورات یا داده ها
Seg-name ends
با این دستور می توان یک سگمنت را تعریف و ابتدا و انتهای آن را مشخص کنید.
Align-typy یا نوع هم ترازی:
از عملوند برای تعیین و انطباق شروع یک سگمنت با آدرس حافظه بکار می رود و دارای حالات زیر است:
الف) byte: سگمنت از هر آدرسی می توند شروع شود.
ب) word: سگمنت از هر آدرس زوجی می تواند شروع شود.
ج) para: سگمنت از هر آدرس که قابلیت تقسیم بر 16 را داشته باشد می تواند شروع شود.
د) page: سگمنت از هر آدرسی که قابلیت تقسیم بر 256 را داشته باشد می تواند شروع شود.
در صورتی که نوع هم ترازی ذکر نشود حالت پیش فرض para خواهد بود.
combin type یا نوع ترکیب:
از این عملوند برای تعیین ترکیب سگمنت در حال تعرف یف با سایر سگمنت های همنام در سایر ماژول ها استفاده می شود و دارای حالات زیر است:
الف) public: دو سگمنت هم نام به طور متوالی در حافظه قرار می گیرند.
ب) comment: دو سگمنت هم نام از یک ناحیه به طور مشترک استفاده می کنند.
ج)stack: در سگمنت های از نوع پشته باید از این حالت استفاده شود.
در صورتی که نوع ترکیب ذکر نشود حالت پیش فرض public خواهد بود.
Class:می تواند یکی از حالات زیر باشد:
الف) 'code': برای سگمنت کد.
ب) 'data': برای سگمنت داده.
ج) 'stack': برای سگمنت پشته.
د) 'extra': برای سگمنت اضافی.
مثال)
تعریف سگمنت کد:
Cseg segment para public ['code']
Assume cs:cseg,ds:dseg,ss:sseg,es:eseg
Mov ax,05h
Add ax,bx
Cceg ends
مثال)
تعریف سگمنت داده:
Dseg segment para public ['data']
Data1 db ?
Data2 dw ?
Dseg ends
مثال)
تعریف سگمنت پشته:
Sseg segment para stack ['stack']
Dw 32dup(?)
Sseg ends
تعریف سگمنت اضافی:
Eseg segment para public 'extra'
Str1 db 'abcdefghijklm'
Str2 db 'nopqrstuvwxyz'
Eseg ends
نکنته:
همان طور که در مثال تعریف پشته دیده می شود استفاده از دستور define در این بخش نیازی به اسم ندارد چرا که پشته نیاز به آدرس دهی ندارد و همچنین در داده های موجود در پشته مقدار اولیه در نظرگرفته نمی شود و همچنین تعریف سگمنت پشته معمولا(نه همیشه) شامل تعریف یک آرایه با استفاده از دستور dup است.
شبه دستور assume:
این دستور برای تعیین آدرس متاظر ثباتهای بخش بنام بخش ها بکار می رود و به شکل کلی زیر است:
Assume seg-reg:segname[,…] :فرم کلی
Seg-reg یکی ازمقادیر cs,ds,ss,es است و segname نام گمنت متناظر با ثبات ذکر شده است . این دستور همیشه در ابتدای تعریف سگمنت برنامه قرار می گیرد.
د) شبه دستور proc:
از شبه دستور برای تعریف یک روال به شکل زیر استفاده می شود:
Proc name proc [attribute]
شبه دستورات
Ret
Proc-name endp
Proc-name نام روال مورد نظر است و attribute یکی از دو کلمه ی کلیدی near و far می باشد.
روال ها به دوسته خارجی و داخلی تقسیم می شوند . اگر روال تعریف شده فقط از داخل سگمنتی که این روال تعریف شده است قابل فراخوانی باشد روال را داخلی گویند و از کلمه ی کلیدی near برای آن استفاده می شود. اما اگر روال تعریف شده بتواند از سگمنت های دیگر قابل فراخوانی شود آنگاه روال را خارجی می نامند و از کلمه ی کلیدی far برای آن استفاده می شود در صورتی که هیچ صفتی برای روال ذکر نشود اسمبلی به طور پیش فرض صفت near را برای روال در نظر می گیرد.
نکته:
دستور ret در انتهای روال کنترل را به دستورالعمل بعد از دستورالعمل call ( یا دستورالعمل فراخواننده روال ) منتقل می کند.
25/8/84
هـ) شبه دستور کنترل اجرای برنامه شبه دستورend:
این شبه دستور انتهای برنامه اسمبلی را مشخص می کند به فرم کلی زیر:
[entry point lable] end
برچسب نقطه شروع مکانی است که سیستم عامل اجرای برنامه را شروع نموده است در صورتی که برنامه اسمبلی ماژول های مختلفی داشته باشد فقط end ماژول اصلی می تواند دارای برچسب باشد و end سایر ماژول ها حتما نباید دارای بر چسب باشد.
شبه دستورeven:
این شبه دستور در هنگام ذخیره داده ها مورد استفاده قرار می گیرد و در صورتی که محتوای ثبات اشاره گر عددی فرد باشد به آن یک واحد اضافه می کند تا ذوج شود این کار باعث افزایش سرعت انتقال داده ها می گردد. فرم کلی آن به شکل زیر است:
Even
این شبه دستور هیچ پارامتری ندارد.
مثال)
Dseg seg para public 'data'
Hour db?
Even
Message db 'press any key to eontinue…'
Dseg ends
شبه دستورorg:
از این شبه دستور برای تغییر محتویات ثبات اشاره گر دستورالعمل (ip) در هنگام شروع برنامه برای اجرا استفاده می شود و به فرم کلی زیر می باشد:
Org address
آدرس تعریف شده در شبه دستورorg هنگام اجرای برنامه در ثبات ip قرار خواهد گرفت ازا ین دستور به شکل org 100h برای برنامه های اجرایی از نوع com مورد استفاده قرار می گیرد. زیرا همان طور که گفته برنامه های اجرایی نوع com حتما از این نوع آدرس باید شروع و اجرا شود.
2/9/84
دستورات انتقال داده ها:
این مجموعه دستورات عمل انتقال داده و یا آدرس بین ثبات های مختلف cpu و یا ثبات ها و حافظه و یا ثبات ها و io را انجام می دهند این مجموعه دستورات به چهار دسته کلی تقسیم می شوند.
1) دستورات عمومی 2) دستورات io 3 ) انتقال آدرس 4) انتقال flag
دستورmove:
یکی از دستورات عمومی برای انتقال داده بین بخش های مختلف cpu حافظه و یا io است.
Mov destination,source
دستورات move حتما دارای دو مولفه است. مقصد در دستورmove می توان ثبات cpu و یا محلی از حافظه باشد، مبدا نیز می تواند ثبات cpu، محلی از حافظه و یا مقدار ثبات باشد.
نکته1) دستورmove بین دوبخش از حافظه نمی تواند مقدار جابجا کند.
Move datal,data2
هم مبدا و هم مقصد نمی تواند آدرس محلی از حافظه باشد.
نکته2) در دستور move حتما باید انطباق بین مبدا و مقصد برقرار باشد.
مثال)
Mov eax,edx
Mov ax,cx
Mov al,cl
Mov ax,mem-16
Mov bx,o
Mov cx,o5h
دستورات آدرس دهی پشته:
این دستورات احتیاج به تهیه آدرس ندارند.
دستورpush:
Push regname
از این دستور برای قرار دادن مقدار یک ثبات در حافظه پشته استفاده می کنیم معمولا بخش پشته یک بایتی است بنابراین برای ذخیره مثلا ثبات ax داریم:
ah
al
هشت بیت پایین
هشت بیت بالا
نکته:
توسط این دستور نمی توان ثبات بخش و ثبات flag را در حافظه ذخیره کرد. چرا که ثبات بخش مقدارش از اول برنامه تا آخر برنامه تغییرنمی کند.
مثال)
Push dx
Push ebx
دستورpop:
از این دستور برای بازیابی اطلاعات ذخیره شده stack استفاده می کنید در هنگام برداشت اطلاعات نیز به نکات مشابه دستور push توجه داشته باشید. روال بازیابی و ترتیب قرارگیری ثبات ها در هنگام بازیابی اطلاعات ذخیره شده عکس ترتیب ذخیره آن ها است.
مثال)
آخرین ثباتب که push کردیم اولین ثباتی است که pop می شود.
Push dx
Pop ebx
Pop dx
نکته:
اگرترتیب بازیابی به هم بخورد یا حالت تساوی بین تعداد دستورات pop,push به هم بخورد خطاهای مربوط به stack مانند
pop without push , push without pop
مثال)
Push ax push ax
Pop without push
Push without pop
Push bx push bx
Pop ax push bx
دستورpush flag:
pushf :فرم کلی
از این دستور برای ذخیره ثبات flag در حافظه پشته استفاده می کنیم.
دستور pop flag:
popf :فرم کلی
از این دستور برای بازیابی ثبات flag از حافظه پشته استفاده می کنیم.
دستور push all general register:
Pusha :فرم کلی
از این دستور برای ذخیره تمام ثبات های عمومی بره ترتیب di,si,bp,sp,bx,dx,cx,ax استفاده می شود.
دستور تعویض مقادیرexchange:
Echg destination,source :فرم کلی
از این دستور برای تعویض مقادیر دو ثبات از cpu یا یک ثبات و یک خانه حافظه استفاده می کنیم. مقصد می تواند ثبات cpu یا محلی یا محلی از حافظه باشد و مبدا نیز می تواند ثبات cpu یا محلی از حافظه باشد.
توجه کنید که هر دو مولفه نمی توانند محلی از حافظه باشند. باید انطباق بین مبدا و مقصد برقرار باشد.
مثال)
Xchg al,bl
Xchg mem-32,ebx
دستورات وردی خروجی:
دستور input:
in destination,address :فرم کلی
از این دستور برای دریافت یک مقدار ورودی و یا ارتباط با ابزار جانبی استفاده می شود.
در این دستور مقصد فقط می تواند ثبات eax,ax یا ah باشد. علت آن این است که ax تنها ثبات است که به گزرگاه داده وصل شده است. آدرس نیز، آدرس پرت ابزار ورودی است. بعضی آدرس های متداول پرت عبارتند از:
300h network,adapter
378h lpt1
3f8h com1
2f8h com2
3e8h com3
2e8h com4
نکته ی 1:
در دستور in ثبات al قرار نمی گیرد.
نکته ی 2:
کامپیوتر می تواند 256 ابزار ابزار ورودی خروجی را آدرس دهی کند. و از آن استفاده کند. اما در عمل کامپیوتر به تعداد slot هایش می تواند ابزار ورودی/خروجی داشده باشد.
نکته ی 3:
تنها ثباتی که مجاز است محتوای آدرس پرت باشد ثبات dx است.
مثال)
Mov dx,300h
In ax,dx
دستور output:
Out address,source :فرم کلی
در این دستور address، آدرس پرت خروجی و source یکی از ثبات های ax,eax یا ah (اما نه al) می باشد. به وسیله ی این دستور مقداری را روی خط داده قرار می دهیم. آدرس ابزار خروجی می تواند مشابه دستور in در dx قرار بگیرد.
مثال)
Mov dx,300h
Out dx,ax
Mov ax,05h
Out 3f8h,ax
9/9/84
انتقال flag:
دستورload ah from flag:
lahf :فرم کلی
این دستور flag را به ah منتقل می کند مقدار آن در ah به صورت زیر قرار می گیرد:
cf
1
pf
o
ax
o
zf
sf
دستور save ah to flag:
فرم کلی sahf:
این دستور ah را در flag ذخیره می کند.
مثال) دستورات زیر چه عملی را انجام می دهد؟
Mov ah,o3h
Sahf o3h=00000011
(بیت کری فعال می شود)
دستورات محاسباتی:
Add adc sub sbb inc dec mul imul div idiv
دستورات منطقی:
And or xor not test
دستورات محاسباتی (توضیحات):
دستور addition:
فرم کلی add destination, source:
در این دستور مقصد می تواند ثبات یا خانه حافظه و مبدا می تواند ثبات یا خانه حافظه یا مقدار ثبات باشد. اما هر دو هم زمان نمی توانند به طور هم زمان خانه ای از حافظه باشد حاصل اجرای دستور فوق به شکل زیر است:
Destination=destination+ source
این دستور روی cf اثر می گذارد اما آن را در محاسبه در نظر نمی گیرد.
دستورaddition with carry:
فرم کلی adc destination,source:
این دستور مانند دستور قبلی است با این تفاوت که کری را نیز در نظر می گیرد.
Destination= destination+source+cf
مثال) فرض کنید که یک عدد 64 بیتی در دو خانه از حافظه به نام a1,a2 به شکل زیر ذخیره شده باشد.
63 32 31 0
A1
A2
عدد b نیز به طور مشابه دردو خانه b1,b2 در حافظه ذخیره شده است. برنامه بنویسید که این دو عدد 64 بیتی را با هم جمع کرده و حاصل را در خانه 64 بیتی c به طریق مشابه ذخیره نماید.
Dseg segment para public 'data'
A1 dd fa98h
A2 dd ffffh
B1 dd 3ffah
B2 dd aeo1h
C1 dd ?
C2 dd ?
Dseg ends
Sseg segment para stack 'stack'
Db 32 dap(?)
Sseg ends
Cseg segment para public 'code'
Assume cs: cseg,ds: dseg,ss: sseg
Start: move eax,a1
Add eax,b1
Mov c1,eax
Mov eax,a2
Adc eax,b2
Mov c2,eax
Cseg ends
End start
دستور subtraction:
فرم کلی sub destination,source:
در این دستور نیز مبدا و مقصد نمی توانند هم زمان به هم خانه ای از حافظه باشند حاصل اجرای دستور فوق به شکل زیر خواهد بود:
Destination=destination-source
دستورsubtraction with borrow:
فرم کلی sbb destination,source:
این دستور همانند دستور فوق است با این تفاوت که کری را نیز در نظر می گیرد.
Destination= destination-source-cf
دستورincrement:
فرم کلی inc destination:
مقصد می تواند ثبات یا محلی از حافظه باشد. این دستور به مقصد یک واحد اضافه می کند.
دستور decrement:
فرم کلی dec destination:
مقصد می تواند ثبات یا محلی از حافظه باشد. این دستور از مقصد یک واحد کم می کند.
دستور negative:
فرم کلی neg destination:
مقصد می تواند ثبات یا محلی از حافظه باشد. این دستور علامت مقدار دو دویی درمقصدراعوض می کند که بااستفاده ازمتمم راانجام می شود.
دستور muitiplication:
فرم کلی: mul source
فرم کلی: imul source
دستور mul جهت ضرب اعداد بی علامت و دستورimul جهت ضرب اعداد با علامت به کار می رود.source می تواند ثبات یا محلی از حافظه باشد در عمل ضرب یکی از پنج حالت زیر ممکن است:
1) ضرب یک بایت دریک بایت
2) ضرب یک کلمه در یک کلمه (کلمه=دوبایت)
3) ضرب یک بایت در یک کلمه
4) ضرب یک کلمه در یک کلمه مضاعف
5) ضرب یک کلمه مضاعف در یک کلمه مضاعف
در ضرب یک بایت در یک بایت:
مضروب در ثبات al و مضروب فی در source قرار می گیرد و نتیجه حاصل ضرب در ax ذخیره می شود.
source Ax=al
در ضرب یک کلمه در یک کلمه:
مضروب در ثبات ax و مضروب فی در source قرار می گیرد و حاصل ضرب در dx:ax ذخیره می کند.
source Dx:ax=ax
در ضرب یک کلمه مضاعب در یک کلمه مضاعف:
مضروب در ثبات eax و مضروب فی در source ذخیره و حاصل ضرب درedx:eaxقرار می گیرد.
source edx:eax=eax
در ضرب یک بایت در یک کلمه:
مضروب در al قرار می گیرد و سپس یکی از حالات زیر اتفاق می افتد.
الف) اگر عدد بی علامت باشد آنگاه ah صفر می شود.
ب) اگر عدد با علامت باشد آنگاه با استفاده از دستور cbw ثبات ah علامت عدد ذخیره شده در al را می گیرد.
سپس مضروب فی در source قرار میگیرد و حاصل ضرب در dx:ax قرار می گیرد.
source dx:ax=ah:al
در ضرب یک کلمه در یک کلمه مضاعف:
مضروب در ax قرار می گیرد و سپس یکی از دو حالت زیر اتفاق می افتد:
الف) اگر عدد بی علامت باشد آنگاه 16بیت با ارزش صفرمی شود.
ب) اگر عدد با علامت باشد آنگاه با استفاده از دستور cwd،16بیت با ارزش علامت عدد ذخیره شده در ax را می گیرد.
سپس مضروب فی در source قرار می گیرد و نتیجه ضرب در edx:eax ذخیره می شود.
sourceedx:eax=16b:ax
مثال)
alMul bh;ax=bh
16/9/84
دستور divistion:
فرم کلی: div source
فرم کلی: idiv source
دستور div جهت تقسیم اعداد بی علامت و دستور idiv جهت تقسیم اعداد با علامت مورد استفاده قرار می گیرد.source می تواند مکانی از حافظه یا ثبات باشد در عمل تقسیم یکی از چهار حالت زیر ممکن است اتفاق بیفتد:
1) تقسیم یک کلمه بر یک بایت
2) تقسیم یک بایت بر یک بایت
3) تقسیم یک کلمه مضاعف بر یک کلمه
4) تقسیم یک کلمه بر یک کلمه
تقسیم یک کلمه بر یک بایت:
مقسوم در ثبات ax قرارداده می شود و مقسوم علیه در source قرار می گیرد. پس از تقسیم خارج قسمت در ثبات al و باقیمانده در ثبات ah قرارمی گیرد.
source al=ax
ah=ax mod source
در تقسیم یک بایت بر یک بایت :
مقسوم در ثبات al قرار می گیرد و پس ثبات ah با توجه به نوع عدد (بی علامت یابا علامت) مقدار دهی می شود و با استفاده از دستور cbw همانطور که گفته شد و مقسوم علیه source قرار می گیرد. پس از تقسیم خارج قسمت در ثبات al و باقیمانده در ثبات ah قرار خواهد گرفت.
source al=ah:al
ah=ah:al mod source
3) در تقسیم یک کلمه مضاعف بر یک کلمه مقسوم در ثبات های dx:ax یا eax قرار می گیرد و مقسوم علیه در source قرار می گیرد پس از تقسیم خارج قسمت در ثبات dx و باقیمانده در ثبات ax قرار می گیرد.
sourcedx=dx:ax
ax=dx:ax mod source
4) در تقسیم یک کلمه بر یک کلمه مقسوم در ثبات ax قرار می گیرد و 16بیت با ارزش ax یا ثبات dx با توجه به نوع عدد ذخیره شده در ax مقدار دهی می شود با استفاده از دستور cwd همانطور که گفته شد. سپس مقسوم علیه در source قرار می گیرد پس از تقسیم خارج قسمت در dx و باقیمانده در ax قرار خواهد گرفت.
دستور العمل convert by to to word:
فرم کلی cbw:
این دستور با توجه به یک علامت ثبات al ثبات ah را مقدار دهی می کند اگر بیت علامت ثبات al یک باشد آنگاه کلیه بیت های ثبات ah یک خواهد شد که نشانگر منفی بودن عدد است و اگر بیت علامت ثبات al صفر باشد آنگاه کلیه بیت های ثبات ah صفر خواهد شد.
دستور العمل convert word t double:
فرم کلی cwd:
این دستور العمل با توجه به بیت علامت ax، ثبات dx و یا 16بیت با ارزش را مقدار خواهد داد اگر بیت علامت ثبات یک باشد آنگاه کلیه بیت های ثبات dx و یا 16بیت با ارزش یک خواهد شد که نشانگر منفی بودن عدد است و اگر بیت علامت ثبات ax صفر باشد آنگاه کلیه بیت های ثبات dx و با 16بیت با ارزش صفر خواهد شد.
دستورات منطقی:
این دستورات حتما بر روی flag ها تقسیم می گذارند و در تمامی این دستورات ترکیب خانه ی حافظه و خانه ی حافظه برای هر دو عملوند در زمان واحد غیر ممکن است.
دستورxor,or,and
And destination soure
Or destination source فرم کلی
Xor destination source
این دستورات روی بیت های متناظر مبدا و مقصد عملیات xor,or,and را انجام داده و حاصل را در مقصد ذخیره می کند توجه کنید که حتما باید انطباق باید بین مبدا و
مقصد برقرار باشد این دستورات روی zf,sf,pf,of,cf اثر می گذارد.
23/9/84
(a با استفاده از دستور and و یکی از ماسک های زیر می توان وضعیت یک بیت را که ست (یک) یا ری ست شده است معین کرد.
ماسک
شماره بیت
0001h
0
0002h
1
0004h
2
0008h
3
0010h
4
0020h
5
0040h
6
0080h
7
0100h
8
0200h
9
0400h
10
0800h
11
1000h
12
2000h
13
4000h
14
8000h
15
b) با استفاده از دستور or معمولا بیت های مختلف را setمی کنیم.
c) با استفاده از دستور xor معمولا تست عدم تساوی را انجام می دهیم.
دستور test:
فرم کلی test distination,source
این دستور دقیقا همانند دستور and است با این تفاوت که فقط روی flag ها تاثیر می گذارند و محتویات عملوندها را تغییر نمی دهد.
دستور not:
فرم کلی: not distination
این دستور مکمل یک مقصد را محاسبه کرده و در خود مقصد قرار می دهد. این دستور هیچ تاثیری روی ثبات flag ندارد.
دستورات shift یا انتقال:
این دستورات به دو دسته زیر تقسیم می شوند:
1) شیفت منطقی (logical shift)
2) شیفت محاسباتی (arithmetic shift)
دستورات چرخش یا rotate:
این دستورات به دو دسته زیر تقسیم می شوند:
1) چرخش با کری 2) چرخش بدون کری
دستورات شیفت و چرخش دارای فرم کلی زیر هستند:
Command destination,count
که در آن Command اسم دستورdestination مقصد و count تعداد دفعات تکرار عمل انتقال یا دوران است.
انتقال منطقی:
عمل انتقال به راست منطقی به شکل زیر است که در آن اولین بیت در cf قرار می گیرد و سمت چپ صفر وارد بیت آخری می شود و تمام بیت ها به راست منتقل می شود.
0 cf 7
0
فرم کلی دستورآن به شکل زیر است:
فرم کلی: shr destination,count
عمل انتقال به چپ منطقی به شکل زیر است که درآن آخرین بیت در cf قرار می گیرد و از سمت راست صفر وارد بیت اول می شود و تمام بیت ها به چپ منتقل می شود.
07cf
0
فرم کلی آن به شکل زیر است:
shl destination,count
برای اعداد بی علامت می توان از شیفت منطقی استفاده کرد و خطایی نیز به وجود نمی آید اما در اعداد با علامت اگر تغییر علامت نا خواسته رخ دهد با خطای over flow مواجه می شود برای حل این مشکل از شیفت محاسباتی استفاده می کنیم.
انتقال محاسباتی:
از دستورات انتقال محاسباتی برای انجام عمل انتقال روی اعداد با علامت استفاده می کنیم.
cf07
عمل انتقال به راست محاسباتی به شکل زیر است که در آن اولین بیت در cf قرار می گیرد و بیت علامت در خودش کپی می گردد و بدین وسیله از تغییر علامت ناخواسته جلوگیری می شود.
فرم کلی آن به شکل زیر است:
Sar destination,count
عمل انتقال به چپ محاسباتی به شکل زیر است که درآن آخرین بیت که همان بیت علامت است در cf قرار می گیرد و از سمت راست صفر وارد بیت اول می شود و بیت ها به چپ انتقال می یابند.
07cf
0
فرم کلی آن به شکل زیر است:
Sal destination,count
نکته ها:
1) عمل انتقال به چپ محاسباتی و منطقی کاملا شبیه به هم می باشند. توجه کنید که در انتقال به چپ محاسباتی بیت علامت وارد cf می شود و بنابراین خودکار می تواند مثبت یا منفی بودن عدد را با توجه به مقدار cf تشخیص دهد.
2) هر شیفت به راست محاسباتی یا منطقی معادل با تقسیم صحیح آن عدد بر2و هر عمل شیفت به چپ محاسباتی یا منطقی معادل با ضرب آن عدد در2می باشد.
3) مقدار cout در این دستورات می تواند یک مقدار ثابت یا ثبات cl باشد.
چرخش بدون کری:
عمل چرخش به راست بدون کری به شکل زیر است که در آن اولین بیت هم در cf و هم در بیت آخر قرار می گیرد.
cf0 7
Cf
Ror destination,count :فرم کلی
عمل چرخش به چپ بدون کری به شکل زیر است که در آن بیت آخر هم در cf و هم در بیت اول قرار می گیرد.
o7cf
Rol destination,count :فرم کلی
عمل چرخش به راست با کری به شکل زیر است که درآن اولین بیت در carry و کری در بیت آخر قرار می گیرد.
cf o7
فرم کلی آن به شکل زیر است:
Rcr destination,count
عمل چرخش به چپ با کری به شکل زیر است که در آن آخرین بیت در کری و کری در بیت اول قرار می گیرد.
07cf
فرم کلی آن به شکل زیر است:
Rcl destination,count
نکته ها:
1) عمل چرخش بر خلاف عمل انتقال ارزش محاسباتی ندارد.
2) مقدار count در این دستورات می تواند یک مقدار ثابت یا ثبات cl باشد.
30/9/84
دستورات انشعاب branch:
این دستورات به دو دسته تقسیم می گردند :
1) انشعاب غیر شرط (unconditional branch).
2) انشعاب شروط (conditional branch).
در انشعاب غیر شروط مقدار ip بدون هیچ شرط خاصی عوض می گردد در حالی که در انشعاب شروط مقدار ip در صورتی عوض می شود که شرط خاصی برقرار باشد این دستورات دارای فرم کلی زیر می باشند:
Jx address
توجه کنید که انشعاب باید درون سگمنتی باشد یعنی نمی توان از یک سگمنت به سگمنت دیگر انشعاب انجام داد.
انشعاب غیر شرطی:
Jmp [short] address
آدرس ذکر شده در این دستور همان label دستور خاص می باشد اگر از کلمه ی short استفاده شود حداکثر تغییر ممکن در مقدار ip بین 127 و 128 – است یعنی آدرس ذخیره شده در ip حداکثر می تواند 127 بایت و حد اقل می توند 128 – بایت جابجا شود در صورتی که تغییر آدرس در ip بیشتر از بازه ی فوق باشد نباید از کلمه ی short استفاده کرد استفاده از کلمه ی short به منزله ی صرفه جویی در تولید یک بایت کد زبان ماشین هنگام تولید فایل اجرایی صورت می گیرد.
انشعاب شروطی:
دستورات انشعاب شرطی به سه دسته تقسیم می شوند:
1) انشعاب اعداد بی علامت
2) انشعاب روی اعداد با علامت
3) سایر انشعاب ها
تقسیم می شوند.
1) انشعاب روی اعداد بی علامت:
دستورات آن به فرم کلی زیر هستند:
کد زبان ماشین
شرط انتقال
شرح دستور
دستور
77
Cf=Zf=0
Jump if above
Ja addr
73
Cf=0
Jump if above or equal
Jae addr
72
Cf=1
Jump if below
Jb addr
76
Cf=1 or Z=1
jump if below or equal
Jbe addr
76
Cf or Zf=1
jump if not above
Jna addr
72
Cf=1
jump if not above or equal
Jnae addr
73
Cf=0
jump if not below
Jnb addr
77
Cf=Zf=0
jump if not below or equal
jnbe
2) انشعاب روی اعداد با علامت:
دستورات آن به شکل کلی زیر می باشند:
کد زبان ماشین
شرط انتقال
شرح دستور
دستور
7f
Sf=of and zf=0
Jump if greater
Jg addr
7d
Sf=0f
Jump if greater or equal
Jge addr
7c
sf≠of
Jump if less
Jl addr
7e
sf≠of or zf=1
jump if less or equal
Jle addr
7c
sf≠of or zf=1
jump if not greater
Jng addr
7d
Sf=of
jump if not less
Jnl addr
7f
Sf=of and zf=0
jump if not less or equal
Jnle addr
3)انشعاب های دیگر:
کد زبان ماشین
شرح انتقال
شرح دستورات
دستور
72
Cf=1
Jump if carry
Jc addr
E3
Cx=0
jump if cx is ziro
Jcxz addr
74
Zf=1
jump if equal
Je addr
73
Cf=0
jump if not carry
Jnc addr
75
Zf=0
jump if not equal
Jne addr
71
Of=0
jump if not overflow
Jno addr
7b
Pf=0
jump if not parity
Jnp addr
79
Sf=0
jump if not sign
Jns addr
75
Zf=0
jump if not ziro
Jnz addr
70
Of=1
jump if overflow
Jo addr
7a
Pf=1
jump if parity
Jp addr
7a
Pf=1
jump if is even
Jpe addr
7b
Pf=0
jump if is odd
Jpo addr
78
Sf=1
jump if sign
Js addr
74
Zf=1
jump if ziro
Jz addr
دستور compare:
Cmp destination,source :فرم کلی
مبدا و مقصد این دستور مانند دستورات منطقی تعیین می شود. این دستور تغییری در مقصد حاصل نمی کند. و فقط flag ها را تغییر می دهد. در این تفضل مبدا و مقصد محاسبه شده و برا اساس flag ها تغییر می کند. بعد از دستور test و cmp حتما باید یک دستور انشعاب مشروط یا عملکردی روی flag ها صورت بگیرد و گرنه با اجرای دستور دیگر flag ها تغییر خواهند کرد.
اعداد با علامت
اعداد بی علامت
شرط انتقال بعد از دستور cmp
jg
ja
Destination > source
jge
jae
destination >= source
jl
jb
destination < source
jle
jbe
destination <= source
je
je
destination = source
jne
jne
source destination
حلقه ها:
فرم کلی یک حلقه به شکل زیر است:
Label
دستورات حلقه
Loop label
در دستور loop انتساب مقدار اولیه به ثبات cx الزامی است. محتویات ثبات cx تعداد دفعات تکرار دستورات بدنه ی حلقه را مشخص می کند. با هر بار اجرای دستورات loop از ثبات cx یکی کم می شود و سپس اگر cx صفر نباشد کنترل به دستورل جلوی برچسب حلقه باز می گردد. ولی اگر ثبات cx صفر شده باشد حلقه تمام می شود و کنترل به دستور بعد دستور loop منتقل می شود.
نکته:
شمارنده حلقه یعنی ثبات cx را نمی توان داخل حلقه کم یا زیاد کرد.
بدون استفاده از دستور loop نیز می توان حلقه ها را شبیه سازی کرد. چون دستور loop معادل دو دستور jmp,jcxz می باشد .
؟
دستور loope/loopz:
همانند دستور loop می باشد با این تفاوت که 0cx و zf=1(zf=0) باشد.
مدلهاي مختلف PCL هاي سري S7 داراي شباهتها و تفاوتهائي هستند، مثلا تعداد يكتائي هاي BIT ورودي يا خروجي، تعداد يكتائي هاي مخصوص حافظه (special memory bits) يعني همان يكتايي هاي پرچم، شماره و نوع وقايع قطع (interrupt events) و ... از يك مدل به مدل ديگر تفاوت هائي دارد. همچنين بعضي دستورها ممكناست براي مدلي معتبر و براي مدلي ديگر نامعتبر باشد. با اين وجود كار كردن با يك مدل خاص توانائي هاي لازم براي كار كردن با مدل هاي ديگر را فراهم ميآورد. در اينجا PLC هاي مدل S702xx ساخت زيمنس بعنوان نمونه مورد بررسي قرار ميگيرد. اين PLC ساده ترين مدل از اين سري ميباشد و آشنائي با آن زمينه خوبي را براي كار كردن با انواع پيشرفته تر ايجاد ميكند.
برنامه نويسي به زبان S7 بسيار شبيه به برنامه نويسي براي هر سيستم ريزپردازنده ديگري است .
در اين شكل دستور A11.3 شامل عمل (operation) و منطقي (AND) است كه با حورف A نشان داده ميشود. اين عمل بر روي عملوند (Operand) يعني 11.3 انجام ميگردد. جنس عملوند ورودي (input) است كه با حرف I نشان داده ميشود. نشاني اين ورودي 1.3 ميباشد.
منظور از نشاني 1.3 بيت 3( يكتايي 3) از بايت 1(هشتائي 1) از مجموعه ورودي ها به PLCميباشد. پاره اي از حروف اختصاري براي نشان دادن عملوند ها در زبان S7 در جدول آمده است.
با اضافه نمدن حروف B,W يا D به سمت راست هر يك از علامات اختصاري در جدول ميتوان اندازه آنها را به هشتائي ، دو هشتايي word يا چهار هشتائي (double word) افزايش داد. مثلا IB يعني هشتايي ورودي و IB0 يعني هشتايي ورودي 0. به همين ترتيب AIW يعني دو هشتايي آنالوگ ورودي و VD يعني چهار هشايي حافظه متغير.
شرح پاره اي از حروف اختصاري در زبان S7 (بين المللي)
شرح
نشاني در PLC
S7-221
عنوان
علامت اختصاري
ورودي فيزيكي
0-15.7
INPUT
خروجي فيزيكي
0.15-7
OUTPUT
حافظه عمومي، قابل خواندن و نشتن
0-31.7
INTERNAL MEMORY BIT
حافظه مخصوص، قابل خواندن و نوشتن براي كاربردهايخاصي تعريف شده است
0.179.7
VARIABLE MEMORY BIT
حافظه قابل خوان و نوشتن براي جابجائي اعداد و داده ها استفاده ميشود
0.2047.7
SEQUENCE CONTROL RELAY BIT
حافظه نوع S در كنترل دنباله اي استفاده ميشود
0-31.7
TIMER BIT TIMER CURRENT VALUE
يكتائي يا مقدار جاري شمارنده
0-255 WORD
COUNTER BIT COUNTER CURRENT VALUE
متغير محلي فقط در زير برنامه اي كه تعريف شده شناخته ميشود
عملوندها را به صورت بايت (هشتايي) دسته بندي ميكنيم و سپس هر عضو در دسته هشتائي را بصورت بيت (يكتائي) شماره گذاري مينمائيم. مثلا در plc اي كه داراي 20 ورودي است، ورود ها را ابتدا بصورت هشتايي شماره صفر (بايت صفر) هشتائي شماره يك بايت يك و هشتائي شماره دو (بايت دو) دسته بندي ميگردند و سپس در داخل هر هشتائي، يكتائي ها (بيت ها) از شماره صفر تا شماره هفت ماره گذاري ميشود. دقت نمائيد كه كه در اينجا هشتائي شماره دو فقط داري چهار يكتائي (بيت) خواهد بود. اين نحوه شماره گذاري در شكل زير بيان دو هشتائي متوالي را يك كلمه WORD و چهار هشتايي متوالي را دو كلمه DOUBLE WORDميناميم. در اينجا از كلمه يكتائي بجاي بيت (BIT هشتائي بجاي بايت ( BYTE) دو هشتايي بجاي ورد WORD و چهار هشتائي بجاي دبل ورد (DOUBLE WORD) استفاده ميشود. تعاريف فوق در استفاده از محتواي مناطق حافظه داراي اهميت است.در PCL هاي سري S7 ، مقادير جاري شمارندهها (Counters) و زمان سنج ها (Timers) بصورت دوهشتائي ميباشد و بنابراين براي نشاني دهي و جابجائي آن بايد دقت نمود.
عملوندهاي مورد استفاده در يك برنامه به دو روش نشاني دهي ميشود:
1- نشانيدهي مستقيم :
در اين روش عملوند بصورت منطقه حافظه (memory area) ، اندازه (size) و محل آن در منطقه V (variable memory bit) بصورت دو هشتائي (word) و در محل 790 ميباشد.
در اين روش مناطق حافظه (I,Q, M, SM, V, …) با اندازههاي هشتائي، دو هشتائي يا چهارهشتائي (double word) بيان ميشود. مثلا هر گاه بخواهيم به V100 بعنوان يك هشتائي( byte) دسترسي پيدا كنيم، آن را بصورت VB100 بيان ميكنيم. براي دسترسي به يكتائي (بيت) موردنظر از يك هشتائي، بايد شماره آن را بعد از شماره هشتائي بيان كنيم. مثلا هر گاه منظور دسترسي به يكتائي شماره 7 از VB100 باشد، بايد نشاني آن را بصورت VB100.7 بيان داريم.
2- نشاني دهي غير مستقيم:
در اين روش از يك نشانگر (pointer) براي اشاره به محل (Location) مورد نظر استفاده ميشود. بدين ترتيب كه ابتدا با استفاده از دستور انتقال چهارهشتائي (move double word) يعني MOVD نشاني مبدأ را به انباره (AC3 يا AC2 يا AC1) يا به منطقه اي از V منتقل ميكنيم. سپس با استفاده از يك دستور انتقال ديگر(مثلا MOVD) محتواي آدرس مبدأ را به مقصد منتقل مينمائيم.
در PCLهاي سري S7 از اصطلاح يكتائي حافظه مخصوص بجاي يكتائي پرچم (flag bit)استفاده ميشود. در مكانهايي از حافظه PCL كه با SM مشخص ميشود، اطلاعاتي مربوط به پيشامدهاي با اهميت و همچنين اطلاعات مخصوص ديگري ثبت ميگردد. مثلا يكتائي SMO.1 فقط در اولين پويش برنامه كاربر، «1» ميشود و در پويشهاي بعدي «0»باقي ميماند. بنابراين از اين يكتائي ميتوان بعنوان علامتي (پرچمي) براي آغازين نمودن (initialization) برنامه استفاده نمود و يا SM1.0 معادل پرچم صفر (zero) ميباشد. يعني هنگاميكه حاصل اجراي يك دستور صفر باشد، اين يكتائي «1» ميشود.
معمولا در هر هشتائي (بايت) SMB اطلاعات مرتبط با هم وجود دارد. مثلا SMBO اطلاعات مربوط به حالات PCL در حين پويش برنامه را دربردارد و SMB1 حالات ناشي از اجراء دستورها (صفر، سرريز، تقسيم بر صفر و ... ) را نشان ميدهد.
در PCL هاي سري S7 از SMB ها براي برنامهريزي و تعيين مشخصات PCL نيز استفاده ميشود. مثلا SMB8- SMB21 براي تعيين مدول هاي متصل به PCL بكار ميرود و ازSMB30 براي كنترل ارتباطات PCL استفاده ميشود. يا از SMB36- SMB65 براي برنامه ريزي شمارندههاي سرعت بالا استفاده ميگردد.
تعداد و وظائف هشتائيهاي حافظه مخصوص (SMB ) ممكن است از يك مدل به مدل ديگر تفاوت داشته باشد و معمولا توسط سازنده در راهنماي PCL مشخص ميگردد.
جدول زير كه در ابتداي معرف دستور AND آمده است را در نظر بگيريد:
نوع داده عملوند ورودي/خروجي دستور
صفر/يك I,Q,M,SM,T,C,V,S,Lbit(LAD, STL)
صفر/يك I,Q,M,SM,T,C,V,S,Linput(FBD)
صفر/يك I,Q,M,SM,T,C,V,S,Loutput(FBD)
سنئن ورودي/خروجي- دستور بيان ميكند كه ورودي(ها) به اين دستور و خروجي(ها) از اين دستور چيست. مثلا در مورد فوق ورودي يا خروجي در نمايش STL, LAD يك يكتائي (bit)است. مثل 11.1 يا Q2.0 و در نمايش FBDورودي يا خروجي يك ارزش يا يك جريان الكتريكي (power- flow) است. ستون عملوندها نوع عملوندهائي كه ورودي يا خروجي دستور است را بيان ميكند. مثلا ورودي يا خروجي اين دستور در نمايش STL, LAD ميتواند از جنس I, Q, M, S, T, C, V, L باشد، در حاليكه درنمايش FBD علاوه بر اينها power- flow يعني وجود يا عدم جريان الكتريكي (1 يا0) نيز ميتواند بعنوان ورودي/ خروجي دستور بشمار آيد. ستون نوع داده نوع عددي ورودي يا خروجي را بيان ميكند. مثلا نوع عددي داده ميتواند صفر / يك، عدد طبيعي، عدد حقيقي و ... باشد.
بعد از جدول معرفي ورودي/ خروجي، در پايين آن و در قسمت چپ نمايش شكلهاي مختلف دستور(STL, FBD, LAD) آمده است و در سمت راست متن توضيحات لازم براي معرفي دستور نوشته شده است.
در كنترل منطقي فرامين و اطلاعات بصورت 0 يا 1 بيان ميشود. صدور فرمان را با 1 و عدم صدور آن را با 0نشان ميدهيم. همچنين اطلاعات و علائميكه حسگرها (sensors) به PCL ارسال ميدارد نيز بصورت 0 يا 1 است. PCL دريافت 1 از يك ورودي را معادل با عمل كردن حسگر متصل به آن و دريافت 0 را به معني عملنكردن آن حسگر ميداند. بنابراين دريافت ولتاژ (1) از كنتاكت عادي باز به معني عمل كردن آن كنتاكت است و عدم دريافت ولتاژ (0) از يك اتصال عادي بسته نيز به معني عملكردن آن حسگر ميباشد. در اين صورت براي آنكه دريافت يا عدم دريافت ولتاژ در يك ورودي به عملكردن يا عملنكردن تبديل شود بايد با شناسائي حسگر متصل به آن ورودي، از عمل و بر روي حسگرهاي عادي بسته استفاده كنيم. دستور بار (LD) و يا (OR) و شكلهاي منفي آنها نيز ميتواند به منظور فوق مورد استفاده قرار گيرد. دستور LD 10.0 مقدار 10.0 را در بالاي ورودي 10.0 را با يكتائي (بيت) بالاي پشته و منطقي نموده ونتيجه را بجاي بيت بالائي پشته قرار ميدهد.
براي انجام عملياتي منطقي بر روي دادههائي كه قبلا در پشته قرار داده شدهاند، از دستورهاي منطقي پشتهاي استفاده ميكنيم. ديديم كه براي قرار دادن يك داده در پشته (بالاي پشته ) از دستور بار (LD) استفاده ميشود. دستورهاي منطقي پشتهاي از دستور بار بعلاوه دستور منطقي مورد نظر تشكيل شده است:
ALD: اين دستور محتوي اولين و دومين سطح پشته را بايكديگر و نموده و نتيجه را در بالاي پشته قرار ميدهد. بنابراين بعد از اجراي اين دستور عمق پشته يكي يكي كم ميشود.
OLD: اين دستور محتوي اولين و دومين سطح پشته را يا نموده و نتيجه را در بالاي پشته قرار ميدهد. عمق پشته بعد از اجراي اين دستور يكي كم ميشود.
LPS: اين دستور(L;ogic Push) محتوي بالاي پشته را دو نسخهاي ميكند بنابراين محتوي ته پشته از آن خارج و از بين ميرود.
LPP: اين دستور (Logic Pop ) محتوي بالاي پشته را برميدارد. بنابراين محتوي محل بعدي در بالاي پشته قرار ميگيرد.
LRD: اين دستور (Logic Read) محتوي دومين پشته را در بالاي پشته كپي ميكند.
LDS n : اين دستور (Load Stack) يكتائي n پشته را در بالاي پشته كپي ميكند. بنابراين يكتائي انتهاي پشته از آن خارج و از بين ميرود.
در شروع هر برنامه كنترل، ابتدا PCL در يك پويش (Scan) همه وروديها و خروجيها را ميخواند و حالت آنها را (0 يا 1) در ثبات تصوير فرآيند(Process- image- register)مينويسد و سپس با توجه به اين اطلاعات شروع به محاسبه منطق كنترل مينمايد و بعد از اتمام كليه دستورات برنمامه، نتايج خاص (خروجيها) را بطور يكجا به خروجيهاي مربوطه اعمال ميكند و مجددا تصويربرداري ديگر را آغاز نموده و اين دوره تكرار ميگردد. بعضي از ورودي ها ممكن است هنگاميكه PCL در حال محاسبه منطق كنترل است تغييرات آني (Immediate) داشته باشند و اين در حالي است كه تصوير آنها در ثبات تصوير فرآيند دست كم تا زمان پويش بعدي بدون تغيير است. براي آشكارسازي حسگرهائي كه داراي اتصال لحظهاي هستند از دستورات اتصال لحظهاي استفاده ميكنيم. اتصالهاي عادي باز هنگام اتصال لحظهاي سيگنال 1 را ارسال ميدارند. بنابراين براي آشكارسازي آنها ميتوان از دستورات بار لحظهاي (LDI) و يا و لحظهاي (AI) ويا يا لحظهاي (OI) استفاده نمود. به همين ترتيب براي اتصالهاي عادي بسته ميتوان از حالت منفي دستورهاي فوق استفاده نمود.
با استفاده از اين دستورات ميتوان تغييرات لحظهاي يك ورودي را به بالاي پشته (`Top ofthestack)انتقال داد.
دستور NOT منطق حركت فرمانها و علائم را معكوس ميكند. مثلا در يك نمايش نردباني هنگاميكه به اتصال NOT ميرسيم در صورتيكه در سمت چپ اتصال فرمان 1 موجود باشد، در سمت راست آن فرمان 0 برقرار ميگردد و برعكس.
با استفاده از اين دستور تغيير عملوند از قطع به وصل (خاموش به روشن) يا از وصل به قطع (روشن به خاموش)آشكار ميشود. مثلا هر گاه آشكار سازي قطع به وصل (لبه بالا رونده) به يك حسگر مورد نظر باشد، PLC به ازاي هر قطع به صول (Edge-Up) در يك پويش اجازه عبور برنامه (عبور جريان) از طريق اتصال مربوطه را ميدهد. دشتور تغيير از وصل به قطع (روشن به خاموش) نيز به همين ترتيب و در جهت عكس دستور قبل عمل ميكند.)
دستور خواندن- وقت حقيقي، تاريخ و زمان را از روي ساعت خوانده و در يك بافر هشت بايتي كه با نشاني T آغاز ميشود مينويسد. به همين ترتيب دستور تنظيم وقت حقيقي تاريخ و زمان موجود در بافر هشت بايتي به آدرس T را در ساعت سيستم مينويسد. زمان و تاريخ با فرمتي كه در سيستم هاي رايانه اي معمول است نوشته و خوانده ميشود. در نمايش FBD، LAD خروجي END ممكن است خروجي (Enable out put) است، بدين معني كه در صورت اجراي موفقيت آمويز دستور تعريف شده در جعبه، اين خروجي يك ميشود..
دستور نوشتن در شبكه (NETW) اطلاعات موجود در جدول TBL را از طريق در گاه PORT در وسيله اي كه در فاصله دوري قرار دارد مينويسد. به همين ترتيب دستور خواندن از شبكه NETRاز طريق درگاه PORT اطلاعات موجود در وسيفه اي را كه در فاصله دوري از آن قرار گرفته خوانده و در جدول TBL قرار ميدهد.
دستورهاي خواندن يا نوشتن در شبكه ميتواند تا شانزده هشتايي بايت را بخواند يا بنويسد. معمولادر اكثر PLC ها محدوديت هائي از نظر تعداد دستورهاي NETW, NETR كه در يك لحظه بطور همزمان ميتوانداجرا شود وجوددارد.
دستور گرد كردن عدد حقيقي 32 يكتايي (32 بيتي) IN را به يك عدد 32 يكتائي علامت دار طبيعي تبديل ميكند و نتيجه را به جاي متغيري كه با OUT مشخص ميشود قرار ميدهد. در اينجا تنها قسمت صحيح عدد حقيقي تبديل ميگردد. اگر عدد IN بصورت حقيقي تعريف نشده باشد و يا اندازه آن آنقدر بزرگ باشد كه سرريز حاصل شود مقدار OUT بدون تغيير باقي ميماند.
اين دستور يك بيت از دو هشتائي (WORD)، OUT رانشانده SETميكند و ساير بيت هاي آن را باز نشانده RESETمينمايد. شماره بيتي كه نشانده ميشود برابر با عددي است كه از چهار بيت پائيني (كم اهميت تر) IN بدست ميآيد.
هر PLC داراي تعدادي شمارنده است كه امكانات شمارش ويژه اي دارد. نحوه شمارش، شمارنده ها كم و بيش شبيه به هم است. در شمارش به بالا هنگاميكه پالس شمارش شوند از صفر به 1 ميرود عدد شمارنده يكي افزايش مييابد و در شمارش به پائين با صفر به 1 شدن پالس شمارش شونده عدد شمارنده يكي كاهش مييابد.
هر شمارنده با يك ورودي باز نشانده resetميگردد. همچنين با استفاده از دستور بازنشاني هم ميتوان شمارنده را باز شنانده كرد. وقتي شمارنده به حداكثر شمارش ممكن ميرسد مثلا 32767 در يك PLC نمونه عمل شمارش متوقف ميگردد.
تعدادي از شمارنده هاي PLC توانائي شمارش با بالا و پايين را تواما دارند در اين حالت شمارنده داراي دو ورودي شمارش به بالا و شمارش به پائين است. هنگاميكه ورودي شمارش به بالا از صفر به پژوهش ميرود، عدد شمارش يكي افزايش مييابد. مثلا در نوعي PLC شمارنده بالا/پائين قادر به شمارش از 32768 -تا 32767+ ميباشد در اينجا هنگاميكه شمارنده به حداكثر شمارش 32767+ ميرسد، در صورت دريافت پالس شمارش به بالا به عدد 32768- باز ميگردد.
شمارنده هاي بالا/ پائين داراي يك عدد تنظيم اوليه PVميباشد. اين عدد همواره با عدد شمارش جاري مقايسه ميگردد. هنگاميكه شمارش جاري بزرگتر يا مساوي عدد تنظيم شود، بيت مربوط به شمارنده (C-bit) 1 ميشود و در غير اينصورت بيت شمارنده صفر است. هنگاميكه يك شمارنده باز نشانده ميشود، عدد شمارش جاري صفر و بيت شمارنده نيز صفر ميگردد. دسترسي به شماره جاري و يا بيت شمارنده از طريق شماره آن شمارنده امكان پذير ميگردد، مثلا دستور :
CTU C1, PV
يعني شمارنده شماره 1 (C!) را به شمارش به بالا افزايش بده ( تا شماره PV). همچنين دستور
LD C1
يعني مقدار منطقي يكتائي شمارنده شماره 1 (صفر يا 1) را به بالاي پسته بار بزن و دستور:
دستور شمارش به بالا ctu در هر لبه بالا رونده ورودي CU يك شماره به بالا ميشمارد. شمارش تا عدد حداكثر مربوط به شمارنده ادامه مييابد. هنگاميكه شماره جاري (CXXX) بزرگتر يا مساوي مقدار تنظيم شمارنده PV شود، بيت شمارنده 1 ميشود.
با استفاده از ورودي RESETميتوان شمارنده را باز نشانده نمود.
دستور شمارش به پايين CTD در هر لبه بالا رونده ورودي CD از عدد تنظيم شده اوليه PV يكي كم ميكند. هنگاميكه شمارش جاري به صفر برسد، بيت شمارنده 1 ميشود و شمارش متوقف ميگردد. هنگاميكه ورودي LD 1 شود، عدد شمارش به مقدار اوليه PV تنظيم شده و بيت شمارنده صفر ميگردد. در واقع با اين ورودي شمارنده بازنشانده ميشود.
شمارنده بالا/پائين (UP/DOWN counter)
نوع داده عملوند ورودي/خروجي دستور
صفر/يك power flow CU,CD(LAD)
صفر/يك I,Q,M,SM,T,C,V,S,L, POWER FLOW CU,CD(FBD)
صفر/يك power flowR(LAD)
صفر/يك I,Q,M,SM,T,C,V,S,L, POWER FLOWR(FBD)
INT VW, IW, QW,MW, SW, SMW, LW, AQW,T,C,AC, PV
Costant, *VD, *AC, *LD
دستور شمارش بالا/ پائين CTUD با لبه بالا روند ورودي CU يك شماره به بالا و با لبه بالا رونده ورودي CD يك شماره به پايين ميشمارد. هنگاميكه شماره جاري بزرگتر يا مساوي مقدار تنظيم PV گردد بيت شمارنده 1 ميشود با استفاده از ورودي R ميتوان شمارنده را باز نشانده نمود.
سامانه خرید و امن این
سایت از همهلحاظ مطمئن می باشد . یکی از
مزیت های این سایت دیدن بیشتر فایل های پی دی اف قبل از خرید می باشد که شما می
توانید در صورت پسندیدن فایل را خریداری نمائید .تمامی فایل ها بعد از خرید مستقیما دانلود می شوند و همچنین به ایمیل شما نیز فرستاده می شود . و شما با هرکارت
بانکی که رمز دوم داشته باشید می توانید از سامانه بانک سامان یا ملت خرید نمائید . و بازهم
اگر بعد از خرید موفق به هردلیلی نتوانستیدفایل را دریافت کنید نام فایل را به شماره همراه 09159886819 در تلگرام ، شاد ، ایتا و یا واتساپ ارسال نمائید، در سریعترین زمان فایل برای شما فرستاده می شود .
آدرس خراسان شمالی - اسفراین - سایت علمی و پژوهشی آسمان -کافی نت آسمان - هدف از راه اندازی این سایت ارائه خدمات مناسب علمی و پژوهشی و با قیمت های مناسب به فرهنگیان و دانشجویان و دانش آموزان گرامی می باشد .این سایت دارای بیشتر از 12000 تحقیق رایگان نیز می باشد .که براحتی مورد استفاده قرار می گیرد .پشتیبانی سایت : 09159886819-09338737025 - صارمی
سایت علمی و پژوهشی آسمان , اقدام پژوهی, گزارش تخصصی درس پژوهی , تحقیق تجربیات دبیران , پروژه آماری و spss , طرح درس
مطالب پربازديد
متن شعار برای تبلیغات شورای دانش اموزی تحقیق درباره اهن زنگ نزن انشا در مورد 22 بهمن