انواع تراشه های قابل برنامه ریزیGAL و بلوک term logic (مهندسی برق _ الکترونیک)
انواع تراشه های برنامه ریزی
(Programable read only memoey) PRomاولین تراشههای قابل برنامهریزی که به بازار عرضه شد حافظه فقط خواندنی PRom بود، در این تراشه خطوط آدرس بعنوان ورودی و خطوط دیتا به عنوان خروجی تلقی میشوند. PRom شامل دستهای از گیتهای and غیر قابل برنامه ریزی و یک آرایه OR قابل برنامه ریزی است. PRom در حد یک حافظه است و قابلیت برنامهریزی یک مدار منطقی را ندارد.(Programable logic array) PLAاولین تراشه قابل برنامه ریزی که برای پیاده سازی مدار منطقی آرایه برنامه پذیر and و یک آرایه برنامه پذیر OR میباشد. دو اشکال عمده، هزینه گران ساخت و سرعت پایین آن است .
(Programable array logic) PALتراشه Pal دارای یک آرایه and قابل برنامه ریزی و یک آرایه OR تثبیت شده است.
GALتراشه GAL دارای یک آرایه and قابل برنامه ریزی و یک آرایه OR تثبیت شده است. تراشه GAL دارای سرعت بیشتر نسبت به تراشه PAL میباشد.
بعد از تراشههای فوق MPGAها و FPGAها به بازار آمدند.
MPGA: Mask programable gate array
FPGA: Field programable gate array
ساختار FPGA
بطور کلی تا کنون سه نوع معماری برای FPGA ها توسط کارخانههای مختلف سازنده ارائه شده است که عبارتند از:
۱-آرایه دو بعدی متقارن Symetric matrix
۲-آرایههای سطری row based
۳-دریایی از گیتها sea of gates
بلوکهای FPGA
۱-بلوکهای منطقی (Logic array Block) LAB
۲-بلوکهای کنترل کننده I/o
۳-اتصالات قابل برنامهریزی PIA
(Programable Interconnect array)
بلوکهای منطقی
بلوکهای منطقی شرکتهای سازنده FPGA از نظر اندازه ومنطق به کار رفته در آنها با هم تفاوتهای بسیاری دارند.
این بلوکها در FPGAها و CPLDهای Altera به نام LAB شناخته میشوند.
هر LAB میتواند شامل سه زیر بلوک Macrocell و Interconnect local و term logic باشد.
بلوک term logic
در LAB برای برقراری ارتباط یک Macrocell با Macrocellهای دیگر ونیز فیدبک به ورودی Macrocell از بلوک term logic استفاده میشود.یک بلوک term logic از دو نوع آرایش بسط دهنده موازی (parallel Expanders) وبسط دهنده عمومی (common Expanders) برای برقرای ارتباط استفاده میکند.بلوکهای کنترل کننده I/o این بلوکها نوعی مدارات منطقی میباشند که وظیفه برنامهریزی نوع پورت خروجی و نیز برقراری فیدبک از پینها به درون PIA را دارد.
نویسنده :مهندس افشین رشید
کارشناسی ارشد برق _ الکترونیک از دانشگاه آزاد اسلامی واحد علوم و تحقیقات تهران
قطعات قابل برنامه ریزی مانند؛CPLD ؛ROM ،PLA ،PAL ،PLD در میکرو _ نانو الکترونیک (مهندسی برق _الکترونیک)
مقدمه ای درباره FPGA & CPLD
برای آنکه بتوان بخش بزرگی از یک طرح را داخل یک تراشه منتقل نمود و از زمان و هزینه مونتاژ و راهاندازی و نگهداری طرح کاست، ساخت تراشههای قابل برنامه ریزی مطرح شد از جمله مزایای استفاده از تراشههای قابل برنامه ریزی در طراحی پروژهها عبارتند از :
– کاهش ابعاد و حجم
– کاهش زمان و هزینه طرح
– افزایش اطمینان از سیستم
– حفاظت از طرح
– حفاظت در برابر نویز و اغتشاش
FPGA ها ابزار سخت افزاری قابل برنامه ریزی ارزان قیمت را جایگزین کاربردهای فعلی کنترلرهای داخلی (Embedded Controllers) نمودهاند. به همین دلیل بازار آنها رشد گستردهای داشته است. علاوه بر این به جهت ارائه راه حلهای مناسب برای IC های سفارشی با عملکرد بالا موفقیت زیادی به دست آوردهاند. در واقع به نظر میرسد که FPGAها با توجه به ارزان بودن، نسل فعلی تراشههای ASIC را از رده خارج کنند. همین مزیت هزینه و عملکرد توجه زیادی را درحوزه تحقیقات به خود معطوف کرده است.
ویژگی استفاده از قطعات منطقی قابل برنامه ریزی (PLD) و FPGA، ارزان بودن قیمت و سرعت ورود آنها به بازار است.قطعات ASIC، هزینههای توسعه مهندسی غیر قابل برگشت بالاتری دارند و در نتیجه اغلب، قیمت این محصولات بالاتر است، اما اساساً کارایی بالاتری دارند. این شیوههای مختلف طراحی محیطهایی را با مجموعهای از متدولوژی و ابزاهای مختلف CAD پدید میآورند.در طول یک دهه گذشته، انواع مختلفی از سخت افزارهای قابل برنامه ریزی به سرعت پیشرفت کردهاند. این قطعات نامهای مختلفی دارند مثل سخت افزار قابل آرایش مجدد، سخت افزار قابل آرایش، سخت افزار قابل برنامه ریزی مجدد.
ایده اصلی و زیر بنایی معماری FPGA و CPLD بسیار ساده است. به طوری کلی میتوان مدارهای ترکیبی و ترتیبی را مستقیماً روی بستر سیلی ایجاد کرد. تراشههای ASIC با اینکه کارایی بالایی دارند اما تنها میتوانند یک نوع عملیات را انجام دهند.
از آنجایی که امکان توزیع هزینه توسعه بین چند کاربر وجود ندارد، قیمت ASIC ها معمولاً بیش از سیستمهای مبتنی بر ریز پردازنده معمولی میشود.
تکنولوژی تراشههای قابل برنامهریزی
قابلیت برنامه ریزی شدن مدارات مختلف و اتصالات متفاوت بر روی PLD به دلیل سوئیچهای قابل برنامه ریزی است که در این تراشه وجود دارد، این سوئیچها میبایست علاوه بر اشغال فضای بسیار کم دارای کمترین تأخیر زمانی باشند بطور کلی سوئیچهای قابل برنامه ریزی در PLD با استفاده از سه نوع تکنولوژی قابل پیاده سازی است.
۱-استفاده از Anti – Fuse
۲-استفاده از سلولهای حافظه موقت Sram
۳-استفاده از گیتهای شناور EEPROM یا EPROM
Anti – Fuse
خصوصیت اصلی Anti – Fuseها تنها یک بار قابلیت برنامهریزی بودن، اشغال فضای کم و بالا بودن فرکانس کاری، به دلیل پایین بودن اثر مقاومتی و ظرفیت خازنی آنها است.عیب اصلی این روش نداشتن قابلیت برنامه ریزی مجدد است و زمانی که یک بار برنامهریزی گردد دیگر به حالت اولیه برنمیگردد و مزیت اصلی آن فرکانس کاری بالا و اشغال فضای کم آن است این نوع PLDها نسبت به انواع دیگر PLDها نسبتاً گرانتر هستند.
SRAM
در روش SRAM از سلولهای حافظه به دو طریق استفاده میشود، در روش اول از یک سلول حافظه برای کنترل روشن یا خاموش شدن یک ترانزیستور استفاده میگردد که در این حالت خروجی سلول حافظه به بیس ترانزیستور یا گیت فت متصل می شود، با روشن یا خاموش شدن ترانزیستور یک مسیر وصل یا قطع میشود. در روش دوم سلول حافظه به ورودیهای انتخاب مالتی پلکسر وصل میشود. در این حالت با صفر یا یک شدن سلول حافظه مسیر خطوط عوض میشود، مهمترین عیب این روش پاک شدن برنامه ریزی با قطع تغذیه میباشد، تراشههایی که با این روش برنامه ریزی میگردند، میبایست با استفاده از یک سیستم جانبی با هر بار وصل شدن تغذیه تراشه برنامه ریزی گردد، این روش نسبت به روش Anti – Fuse فضای بیشتری اشغال میکند و تأخیر زمانی نیز بیشتر است.
روش برنامه ریزی EEPROM یا EPROM
مهمترین مزیت این روش پاک نشدن برنامه ریزی با قطع برق مهمترین عیب آن اشغال فضای زیاد این نوع ساختار سوئیچ میباشد.
تقسیم بندی PLDها
PLDها شامل قطعات کم ظرفیت و پرظرفیت میباشند. PLDهای کم ظرفیت (ساده ) معمولاً کمتر از ۶۰۰ گیت قابل استفاده دارند و شامل محصولاتی چون PALها و GALها میشوند.
PLDهای ساده شامل سوئیچهای EEPROM یا EPROM و Anti – Fuse میباشند.
(High – Capacity – PLD) HCPLD بیشتر از ۶۰۰ گیت قابل استفاده دارند و شامل CPLD و FPGA میشوند.
FPGAها ساختمان اتصالات داخلی گسسته دارند، در حالیکه CPLDها دارای اتصالات داخلی پیوسته میباشند.
در ساخت HCPLD ها از تکنولوژی EEPROM , EPROM , Sram و Anti – Fuse استفاده شده است.
نویسنده :مهندس افشین رشید
کارشناسی ارشد برق _ الکترونیک از دانشگاه آزاد اسلامی واحد علوم و تحقیقات تهران
برنامه نویسی Python (آشنایی با ساختار و عملکرد) مهندسی برق _ الکترونیک
پژوهشگر و نویسنده: دانشجویِ دکترای تخصصی ( افشین رشید )
نکته: پایتون ( Python) در سال ۱۹۹۱ توسط Guido van Rossum در کشور هلند ساخته شد و هدف اصلی از ساخت آن بالا بردن خوانایی برنامه نوشته شده همراه با بازدهی آن بوده است.
پایتون یک زبان برنامه نویسی همه منظوره، شی گرا و سطح بالا است که امروزه جزء برترین زبان های برنامه نویسی می باشد. زبان پایتون به دلیل سادگی که دارد در میان برنامه نویسان بسیار محبوب است .زبان برنامه نویسی پایتون به هیچ پلتفرم یا سیستم عاملی وابسته نیست و می توان برنامه های نوشته شده با آن را بدون تغییر یا تغییرات جزئی در سایر پلتفرم ها اجرا کرد. یکی دیگر از خصوصیات فوق العاده زبان برنامه نویسی پایتون درون سازی کد می باشد و به این معنی است که می توانید بخشی از برنامه خود را با یک زبان دیگر مثلا زبان جاوا یا زبان ++C بنویسید.
کتابخانه های زبان برنامه نویسی پایتون:
_کتابخانه های برای ایجاد اسناد
_کتابخانه های رابط کاربری
_کتابخانه های هوش مصنوعی (رباتیک)
این کتابخانه دارای یک کتابخانه استاندارد بزرگ و ثروت افزونه های شخص ثالث ، کتابخانه ها و ابزارهای مختلف است. پایتون با وجود چندین پیاده سازی منبع باز با کیفیت تولید ، بسیاری از کتاب های عالی و پذیرش روزافزون در صنعت و دانشگاه ، می تواند در طیف عظیمی از پروژه های توسعه نرم افزار نقش موثری داشته باشد. این سند مروری بر ویژگی اصلی زبان است. برنامه نویسان که به زبان های Java ، C ++ و C مهارت دارند ، یادگیری پایتون را نسبتاً آسان می یابند.
پایتون یک زبان برنامه نویسی سطح بالا تفسیر شده و یک زبان برنامه نویسی شی گرا است. برای وضوح و سادگی طراحی شده است ، برای ایجاد برنامه های بزرگ و چسباندن تکه های برنامه های دیگر با هم مفید است.پایتون از جمله زبان های برنامه نویسی قدرتمندی است که در زمینه علم داده ها، یادگیری ماشینی، خودکارسازی سامانه ها، واسط های برنامه نویسی و. به کار گرفته میشود. زبان پایتون به عنوان یک زبان همه منظوره» (General-Purpose Language) ساخته و توسعه داده شده و محدود به توسعه نوع خاصی از نرم افزارها نیست.
(برنامه نویسی سی شارپ) کار با حلقه های Loops در #C (مهندسی برق _ الکترونیک)
پژوهشگر و نویسنده: دانشجویِ دکترای تخصصی ( افشین رشید )
نکته: کار با ساختارهای تکرار حلقه Loops در #C یکی دیگر از تکنیک های اصلی در زمان نوشتن نرم افزارها، امکان ایجاد حلقه ها دستوری یا looping است.
این نوع دستورات امکان تکرار بلوک هایی از کد برای دفعات دلخواه را می دهند. برای مثال ما می خواهیم گروهی از دستورات تا زمانی که مقدار یک متغیر مثال کمتر از 11 است، تکرار شود، در این حالت بایستی از حلقه ها در #C استفاده کنیم.در زبان #C ،چهار نوع حلقه اصلی داریم که در ادامه به تشریح هر یک از آن ها خواهیم پرداخت
While loop حلقه
حلقه loop While آسان ترین نوع حلقه در زبان #C بوده و حلقه loop While مجموعه بلوک دستورات تعیین شده برای آن را تا زمانی که شرط تعیین شده برای حلقه درست true باشد، اجرا می کند.
do loop حلقه
کارکرد حلقه loop do کمی متفاوت با حلقه loop While است. در حلقه loop do ابتدا دستورات بدنه حلقه
یک بار اجرا شده و در پایان شرط حلقه چک می شود. در صورت درست بودن شرط، باز هم دستورات حلقه تکرار می شود.
نکته مهم : در مورد حلقه loop do این است که اگر حتی شرط حلقه از ابتدا درست نباشد، دستورات حلقه حداقل یک بار اجرا می شوند.
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- namespace do_while
- {
- class Program
- {
- static void Main(string[] args)
- {
- int table, i, res;
- table = 12;
- i = 1;
- do
- {
- res = table * i;
- Console.WriteLine("{0} x {1} = {2}", table, i, res);
- i++;
- }
- // must put semi-colon(;) at the end of while condition in do.while loop.
- while (i <= 10);
- Console.ReadLine();
- }
- }
- }
for loop حلقه
مکانیزم حلقه loop for با حلقه های قبلی کمی متفاوت است. از این حلقه بهتر است زمانی استفاده شود که می دانیم حدودا حلقه چند بار ممکن است تکرار شود. حلقه loop for دارای یک عدد به عنوان شمارنده است که با هر بار اجرای حلقه، مقدار آن به اندازه واحد تعیین شده کم یا زیاد می شود. اجرای حلقه تا زمانی که شرط آن درست باشد، ادامه داشته و شرط در ابتدای اجرای حلقه تست می شود.
نکته مهم : اگر برای متغیر حلقه ، گام افزایش یا کاهش تعیین نکنید، در صورت درست بودن اولیه شرط حلقه، حلقه for به صورت نامحدود اجرا می شود.
foreach loop حلقه
حلقه آخری که در این بخش بررسی خواهیم کرد، حلقه loop foreach است. از این حلقه معموال در هنگام کار با مجموعه ای از آیتم ها مثل آرایه ها (Arrays) و یا متغیرهای لیستی استفاده می شود.
نکته : در هنگام کار با متغیرهای آرایه ای، حتما از حلقه foreach استفاده کنید. زیرا ساختار بسیار ساده تری نسبت به سایر حلقه ها در زبان #C دارد.
در کد حلقه foreach از یک متغیر لیستی به نام ArrayList استفاده می کنیم.
نویسنده: مهندس افشین رشید
(برنامه نویسی سی شارپ) مدیریت خطا Handling Exception در #C (مهندسی برق _ الکترونیک)
پژوهشگر و نویسنده: دانشجویِ دکترای تخصصی ( افشین رشید )
نکته : در هر برنامه ای، همواره خطاهایی رخ داده و اجرای امور با مشکل مواجه می شود. در زبان #C ،کامپایلر هوشمند و کارآمدی در اختیار ما قرار داده شده که به کمک آن می توانیم از برخی اشتباه رایج جلوگیری کنیم.
البته که برنامه همه خطاهای کد را نخواهید دید و در چنین مواردی، چهارچوب کاری NET ،.یک خطا یا Exception اعلام کرده تا به ما بگوید جایی در کد دارای اشکال است.با وارد کردن آیتم هایی بیش از تعداد تعیین شده برای آرایه، می توان برنامه را با خطا مواجه کرد.
public class Class1 { public void ThrowHandledException() { try { throw new AccessViolationException(); } catch (AccessViolationException ave) { Console.WriteLine("caught exception" + ave.Message); } } public void ThrowUnhandledException() { throw new AccessViolationException(); } }
وقتی در محیط یک IDE مثل Studio Visual کد فوق را اجرا کنید، برنامه چند راه حل یا توضیح را درباره خطای رخ داده، اعلام می کند. اما اگر بخواهید برنامه را با دابل کلیک بر روی فایل EXE آن اجرا کنید، یک خطای نامفهوم برایتان رخ داده و اجرای فایل متوقف می شود.
یک بخش جدید را به ساختار دستوری catch-try اضافه کرده ایم. به وسیله خاصیت Property-Message یک توضیح قابل فهم را درباره خطا مشاهده می کنیم. Exception رایج ترین نوع خطا در هنگام اجرای برنامه های #C است. قوانین خطایابی در زبان متنی شارپ به ما می گوید همواره بایستی از EXCEPTION که کمترین احتمال رخ دادن را دارند.به دلیل این که ویژوال استودیو خطای مدیریت نشده را به ما اعلام کرد. اما اگر شک دارید، خطا کدام است، معمولاً شرح خطا یا Exception توسط برنامه #C بیان می شود.
نویسنده: دانشجویِ دکترا (افشین رشید )
(برنامه نویسی سی شارپ)کار با Enumeration در زبان #C (مهندسی برق _ الکترونیک)
پژوهشگر و نویسنده: دانشجویِ دکترای تخصصی ( افشین رشید )
نکته : در محیط سی شارپ Enumeration ها، مجموعه ای از مقادیر با نام (value named) هستند که متناظر با مجموعه ای از اعداد، معمولا از نوع integer می باشند.
Enumeration ها در موارد مختلفی کاربرد دارند، مانند زمانی که می خواهید قادر باشید از بین مجموعه ای از مقادیر ثابت، به راحتی مقدار مورد نظر خود را انتخاب کرده و آن را متناظر با یک مقدار عددی قرار دهید. Enumeration ها در بالای cllass کلاس ها و در درون namespace تعریف می شوند. بنابراین می توان از هر Enumeration در کل namespace جای برنامه، استفاده کرد.تمامی مقادیر موجود در Enumeration ، متناظر با یک مقدار عددی هستند. اگر مقادیر متناظر Enumeration ها را به صورت دستی تعیین نکنید، به طور پیش فرض اولین مقدار متناظر با o ،مقدار بعدی متناظر با 1 و به همین ترتیب خواهند بود.کد زیر، نحوه ارتباط پیش فرض هر یک از آیتم های Enumeration را نشان داده و به شما نحوه استفاده از یک مقدار خاص بر حسب یک Enumeration را نشان می دهد.
Accord.Collections.KDTree<Coordinate> tree = new Accord.Collections.KDTree<Coordinate>(3);
Coordinate point = new Coordinate(5, 5, 5);
double[] temp = { 5, 5, 5 };
tree.Add(temp, point);
temp = new double[] { 1,1,1 };
tree.Add(temp, point);
temp = new double[] { 6,6,6 };
tree.Add(temp, point);
var en = tree.GetEnumerator();
while (en.MoveNext())
{
en.Current.Value.PointStatus = 99;
}
}
خروجی کد مثال فوق صفر خواهد بود، زیرا مستقیما با مقدار o متناظر خواهد بود. البته توسط عدد متناظر با Enumeration ها را به مقدار دلخواه تغییر دهید .قابلیت دیگر Enumeration ها این است که به وسیله حلقه های تکرار، می توانید مقادیر رشته ای (string) یک Enumeration را در خروجی نشان دهید. class کلاس Class Enum دارای گروهی از متدهای کاربردی است که می توانید آن ها را برای کار با Enumeration ها استفاده کنید.
(برنامه نویسی سی شارپ) آموزش کار با پنجره Window Tool در ویژوال استودیو (مهندسی برق _ الکترونیک)
پژوهشگر و نویسنده: دانشجویِ دکترای تخصصی ( افشین رشید )
نکته: در هنگام انجام عمل اشکال زدایی کدها یا Debugging در ویژوال استودیو، پنجره window tool در قسمت پایین برنامه عوض شده و پنجره های جدیدی ظاهر می شوند .
علی رغم این که شما آن ها را خاموش یا غیر فعال کرده باشید. پنجره های جدید باز شده با نام Locals” ،Watch” ،Strack Call و Immediatewindow بوده، که مرتبط با عملیات Debugging هستند.
پنجره Locals:
این پنجره، ساده ترین ابزار این بخش می باشد. هنگامی که برنامه به یک Breakpoint می رسد، تمامی متغیرهای محلی کد یا variables local در این پنجره لیست شده و به شما امکان می دهد تا با یک نگاه سریع اطلاعاتی مثل نام، نوع و مقدار آنها را مشاهده نمایید. شما حتی می توانید بر روی نام متغیر مورد نظر خود در جدول کلیک نموده و با انتخاب آیتم Value Edit ،به متغیر انتخاب شده یک مقدار جدید بدهید. این کار امکان امتحان کردن کدهای برنامه را در شرایط مختلف دیگر می دهد.
پنجره Watch:
پنجره Window Watch تا حدودی شبیه پنجره Locals است. با این تفاوت که در این پنجره می توانید
تصمیم بگیرید کدام یک از متغیرها به عنوان محلی local یا سراسری global تعیین شوند. شما می توانید متغیر مورد نظر خود را به محل درگ کردن از کد صفحه، یا پنجره Locals و یا نوشتن نام آن در آخرین خط خالی، تحت نظر گرفته و به پنجره Watch اضافه کنید. متغیرهای لیست Watch تا زمانی که آن ها را حذف نکنید، در پنجره باقی خواهند ماند، اما مقدارشان فقط در زمانی که وارد محدوده کد مرتبط با آن ها بشوید، به روز می شود. برای مثال، یک متغیر متعلق به تابع A در زمانی که درون کد تابع B باشید، Update نمی شود. همانند پنجره Locals می توانید بر روی متغیر مورد نظر خود کلیک راست کرده و با انتخاب گزینه Value Edit ،مقدار آن را تغییر دهید.
: Call Stack پنجره
پنجره Stack Call ، سلسله مراتب یا hierarchy اجرای توابع برنامه را نشان می دهد. برای مثال اگر تابع Aو تابع B را فراخوانی کرده و تابع B تابع C را فراخوانی می کند، این ارتباطات را می توانید در پنجره stack Call مشاهده کرده و بر روی کد هر یک از تابع ها در صورت تمایل پرش کنید. شما همچنین می توانید ببینید چه پارامترهایی به هر تابع پاس داده می شوند.اما در پروژه های بزرگ، فهمیدن ترتیب اجرای توابع و پارامترهای هریک از آن ها، امر ضروری بوده که با stack Call می توان انجام داد.
: Immediate Window پنجره
پنجره Window Immediate می تواند کاربردی ترین پنجره عملیات Debug باشد. این پنجره به شما امکان می دهد، بخش های مورد نظر خود را از کد برنامه انتخاب کرده و اجرا نمایید. همچنین می توانید مقادیر
متغیرهای آن ها را چک کرده و یا تغییر دهید.فقط کافی است کد مورد نظر خود را در پنجره نوشته و با زدن دکمه Enter آن را اجرا نمایید. نام هر متغیر را تایپ نموده و مقدار آن را در خروجی چاپ کنید. مقدار متغیر مورد نظر خود را با نوشتن 5=a تغییر داده و همان لحظه نتیجه تغییر را در کد مشاهده کنید. پنجره Window Immediate همانند یک ترمینال در #C است، به محض نوشتن کد یا تغییر در برنامه، خروجی را مشاهده خواهید کرد.
(برنامه نویسی سی شارپ) استخراج اطلاعات فایل و پوشه ها در زبان #C (مهندسی برق _ الکترونیک)
پژوهشگر و نویسنده: دانشجویِ دکترای تخصصی ( افشین رشید )
در کد مثال زیر، نحوه استفاده از کالس Class FileInfo را نشان می دهد :
static void Main(string[] args)
{
FileInfo fi = new FileInfo(System.Reflection.Assembly.
GetExecutingAssembly().Location);
if(fi != null)
Console.WriteLine(String.Format("Information about file: {0}, {1} bytes, last modified on
{2} - Full path: {3}", fi.Name, fi.Length, fi.LastWriteTime, fi.FullName));
Console.ReadKey();
}
در کد مثال فوق، ابتدا یک نمونه جدید از کالس Class FileInfo را ایجاد کرده ایم. این نمونه یک پارامتر که حاوی آدرس فایلی که می خواهیم راجع به آن، اطلاعات کسب کنیم را دریافت می کند. می توان نام هر فایل دلخواهی را در این پارامتر قرار داده اما ما برای جالب تر کردن مثال، آدرس فایل اجرایی EXE ای که در حال کامپایل برنامه کنونی ماست را ارسال کردیم. از آنجایی که ما به فایل اجرایی یک پروژه از طریق Console Application دسترسی نداریم این فایل بخشی از assembly Win Forms است، از یک Reflection برای دسترسی به آدرس assembly جاری استفاده کرده ایم. اما برای زمان حال، آن را در نظر داشته باشید تا در بخش جداگانه ای به آموزش آن بپردازیم. تا زمانی که یک نسخه از کلاس File Info داشته باشیم، می توانیم اطلاعات مختلفی را راجع به فایل ارسال شده به آن، دریافت کنیم. پروژه کد مثال قبل را اجرا نموده و خواهدید دید که خیلی ساده و مرتب ، کلاس File Info اطلاعات بسیار کاملی را راجع به فایل در اختیارمان قرار می دهد، حتی shortcut هایی که به متدهای کلاس File ارتباط دارند.
با استفاده از کالس FileInfo ، به اطلاعات یک فایل تنها دسترسی داشتیم. اما با استفاده از class کلاس Directory Info می توانیم اطالعات مربوط به تمامی فایل ها و پوشه های موجود در یک پوشه را بدست آوریم، که امکان بسیار مناسبی است.
نویسنده: دانشجویِ دکترا (افشین رشید )
(برنامه نویسی سی شارپ) حذف یک پوشه و تغییر نام یک فایل در زبان #C(مهندسی برق _ الکترونیک)
پژوهشگر و نویسنده: دانشجویِ دکترای تخصصی ( افشین رشید )
نکته:در کد مثال فوق، اگر پوشه testdir خالی نباشد، برنامه دچار خطا یا exeption می شود. به دلیل این که این نسخه از متد (Delete) در کالس Class Directory ، فقط بر روی پوشه های خالی کار می کند
Path یک رشته به طول صفر است ، فقط فضای سفید دارد ، یا حاوی یک یا چند کاراکتر نامعتبر است. کد زیر نحوه حذف پوشه ها در زبان #C را نشان داده است :
if(Directory.Exists("testdir"))
{
Directory.Delete("testdir");
if(Directory.Exists("testdir") == false)
Console.WriteLine("Directory deleted.");
}
else
Console.WriteLine("Directory testdir does not yet exist!");
Console.ReadKey();
برای جلوگیری از خطا، می توان کد متد را به صورت زیر تغییر دهید :
Directory.Delete("testdir", true);
پارامتر اضافه شده به متد فوق، خاطر نشان می کند که متد (Delete) بازگشتی یا vecursive باشد. به این معنا که این متد ابتدا از پوشه های درون پوشه اصلی شروع کرده و با حذف آن ها، در انتها به سراغ پوشه اصلی می آید .
تغییر نام یک فایل در زبان #C
کد زیر، نحوه تغییر نام یک فایل به وشیله #C را نشان می دهد :
(if(File.Exists("test.txt"))
پارامتر اضافه شده به متد فوق، خاطر نشان می کند که متد (Delete) بازگشتی یا vecursive باشد. به این معنا که این متد ابتدا از پوشه های درون پوشه اصلی شروع کرده و با حذف آن ها، در انتها به سراغ پوشه اصلی می آید.
نویسنده: دانشجویِ دکترا (افشین رشید )
(برنامه نویسی سی شارپ)کار با فایل ها و پوشه ها در زبان #C (مهندسی برق – الکترونیک)
پژوهشگر و نویسنده: دانشجویِ دکترای تخصصی ( افشین رشید )
نکته: از کلاس فایل Class File برای تغییر قالب در کد نویسی C# استفاده میگردد .اما این کلاس قابلیت های بسیار بیشتری از خواندن و نوشتن فایل های متنی دارد.
وقتی کلاس Class File را با کلاس Class Directory ترکیب کنید، می توانید بسیاری از کارهای فایل سیستمی مثل تغییر نام فایل ها و پوشه، تغییر مکان آن ها و حتی حذف و . را انجام دهید. در هنگام کار با فایل ها و پوشه ها، فقط بایستی از دو چیز اطمینان حاصل کنید اضافه کردن مجموعه کلاس های namespace IO.Sysytm به ابتدای فایل ها، به صورت زیر :
using System.IO;
از طرف دیگر توجه داشته باشید که هیچ کار خاصی برای مدیریت خطاها یا exception در کدها در محیط برنامه سی شارپ C# انجام نداده ایم. البته در برنامه نویسی#C، وجود یا عدم وجود فایل مورد نظر جهت تغییر، چک می شود، اما در مواردی که مشکلاتی پیش بیاید، مدیریت خطا پیش بینی نشده است. در هنگام انجام عملیات های IO ،مدیریت خطا یا exception یک مسئله مهم است و برای این منظور به بخش آموزش مدیریت خطاها در #C بروید.
در محیط #C به صورت مستقیم از نام فایل ها و پوشه ها استفاده کرده و آدرس کامل ارائه نشده است. زیرا فرض بر این است که فایل EXE اجرایی برنامه #C در همان پوشه فایل می باشد. در بخش setting Project برنامه تان می توانید مشاهده کنید که فایل EXE در چه مسیری ایجاد می شود.
نویسنده: دانشجویِ دکترا (افشین رشید )
(برنامه نویسی سی شارپ) خواندن و نوشتن فایل ها در زبان #C (مهندسی برق _ الکترونیک)
پژوهشگر و نویسنده: دانشجویِ دکترای تخصصی ( افشین رشید )
نکته: خوشبختانه، زبان #C با امکاناتی که ارائه داده است، انجام این امور را بسیار ساده کرده است. کلاس Class File از namespace IO System ،تقریبا شامل تمام چیزهایی است که برای خواندن و نوشتن فایل ها در #C نیاز داریم.
یک ویرایشگر متنی ساده را کدنویسی می کنیم. این ویرایشگر به حدی ساده است که به وسیله آن فقط می توان محتویات یک فایل را خوانده و سپس در هر زمان یک جدید خط به آن اضافه نمود. اما در عین حال، بسیاری از ویژگی های کار با کلاس Class Field را نشان می دهد. به صورت کد زیر :
using System;
using System.IO;
namespace FileHandlingArticleApp
{
class Program
{
static void Main(string[] args)
{
if(File.Exists("test.txt"))
{
string content = File.ReadAllText("test.txt");
Console.WriteLine("Current content of file:");
Console.WriteLine(content);
اگر نحوه کد نویسی را در مثال بالا را تغییر دهید، خواهید دید که برنامه به جای رونویسی کامل فایل اولیه، متن را به انتهای آن اضافه می کند. اما هنوز ما فقط یک خط متن می توانیم به برنامه بدهیم.
Console.WriteLine("Please enter new content for the file - type exit and press enter to finish
editing:");
string newContent = Console.ReadLine();
while(newContent != "exit")
{
File.AppendAllText("test.txt", newContent + Environment.NewLine);
newContent = Console.ReadLine();
همانطور که مشاهده می کنید، ما کاربر را راهنمایی کردیم که در صورت تمایل برای اتمام عمل اضافه کردن متن به فایل موجود، عبارت exit را تایپ کند. در صورت عدم وارد نمودن این واژه، کاربر می تواند هر تعداد خط متن جدید که می خواهد به فایل اضافه کرده و برنامه با ارائه متد درخواست متن، همچنان ورودی دریافت می کند. ما همچنین یک کد جدید را به انتهای دستور newline به نام NewLine.Enviroment اضافه کرده ایم تا محیط برنامه کمی شبیه ادیتورهای متنی شود.
نویسنده: دانشجویِ دکترا (افشین رشید )
(برنامه نویسی سی شارپ ) متدهای توسعه یافته Methods Extensim در #C(مهندسی برق _ الکترونیک)
پژوهشگر و نویسنده: دانشجویِ دکترای تخصصی ( افشین رشید )
نکته: قابلیت جدید دیگر زبان 0.3# C ،متدهای توسعه یافته یا Methods Extensim است. این ویژگی به شما امکان می دهد تا قابلیت های جدیدی را به یک نوع داده ای یا type موجود اضافه کنید.
بدون این که نیاز داشته باشید آن type را به صورت یک زیر مجموعه یا Class کلاس به ارث رفته درآورد یا مجدداً کامپایلش کنید.به عبارت دیگر می توانید عملکردهای جدیدی را به یک نوع داده ای اضافه کنید، بدون این که نسخه اصلی آن را تغییر دهید.برای مثال ممکن است در موردی بخواهید بدانید یک نوع داده ای متنی یا string شامل اعداد است. راه حل عادی برای انجام این کار، تعریف یک تابع یا function بوده و هر زمان که نیاز دارید آن تابع را فراخوانی می کنید. پس از این که چند مدل از این نوع تابع ها را تعریف کردید، می توانید آن ها را در یک کالس به صورت زیر قرار دهید.
(class utility: (
public class MyUtils
{
public static bool IsNumeric(string s)
{
float output;
return float.Try(s, out output);
}
اما به وسیله متدهای توسعه یافته یا Methods Extension ،می توانید کلاس string را به گونه ای گسترش داده تا به صورت مستقیم عملیات فوق را انجام دهد. این کار با تعیین یک کلاس ثابت Class Static و تعریف چندین تابع ثابت Methods Static درون آن به عنوان کتابخانه ای از کدها، صورت می گیرد. مثال زیر، نحوه کدنویسی را به صورت عملی نشان داده است :
public static class My ExtensionMethods
{
public static bool IsNumeric(this string s)
{
float output;
return float.Try(s, out output);
}
}
نکته : تنها چیزی که این متد را از سایر Methods Static ها، متمایز می کند، به کار بردن واژه کلیدی this در بخش پرانتز پارامترهای تابع است. این کلمه کلیدی به کامپایلر اطلاع می دهد که این تابع یک Extension Methods می باشد و تنها کار لازم جهت تبدیل یک متد معمولی به یک متد توسعه یافته است.پس از انجام مراحل فوق، می توانید تابع (IsNumeric) را به صورت مستقیم بر روی شی string به کار برد.
نویسنده: دانشجویِ دکترا (افشین رشید )
(برنامه نویسی سی شارپ) مقداردهی مجموعه ها Collection در #C (مهندسی برق_ الکترونیک)
پژوهشگر و نویسنده: دانشجویِ دکترای تخصصی ( افشین رشید )
نکته: همانطور که 0.3# C یک روش جدید را برای مقداردهی اشیاء objects ارائه داده است، ساختار دستوری جدیدی نیز برای مقداردهی اولیه list ها با مجموعه ای از آیتم ها، در دسترس است. برای این منظور از کلاس class استفاده می کنیم.
اگر می خواستیم یک لیست حاوی تعدای Car را در 0.2# C تعریف کنیم، بایستی از کدی مثل مثال زیر استفاده می کردیم :
Car car;
List<car> cars = new List<car>();
car = new Car();
car.Name = "Corvette";
car.Color = Color.Yellow;
cars.Add(car);
car = new Car();
car.Name = "Golf";
car.Color = Color.Blue;
cars.Add(car);
</car></car>
کد فوق را حتی با ویژگی مقداردهی جدید object ها می توان به صورت زیر خالصه تر کرد :
List<car> cars = new List<car>
{
new Car { Name = "Corvette", Color = Color.Yellow },
new Car { Name = "Golf", Color = Color.Blue}
};
</car></car>
با روش فوق، 11 خط فقط به یک خط (البته کمی طولانی) تبدیل شده و این به دلیل ویژگی جدید مقداردهی objects هاست.
نویسنده: دانشجویِ دکترا (افشین رشید )
خواص خود آزمایی قابل برنامه ریزی اسید های نوکلئیک در ایجاد نانو شکل و نانو بیو ماشین های منطقی طراحی شده الکتریکی (دکترای نانو _ میکرو الکترونیک)
پژوهشگر و نویسنده: دکتر ( افشین رشید )
نکته : خواص خود آزمایی قابل برنامه ریزی اسید های نوکلئیک در ایجاد نانو شکل و نانو ماشین های منطقی طراحی شده برای کاربرد های مختلف هستند. به همین دلیل امروزه یکی از مناطق مورد بررسی بیشتر در زمینه نانوروبوتیک ، شامل مونتاژ DNA ، به ویژه یک روش به نام DNA اوریگامی است.
اریگامی DNA تاشو در مقیاس نانو DNA برای ایجاد اشکال دو بعدی و سه بعدی غیر دلخواه در مقیاس نانو است . ویژگی فعل و انفعالات بین جفت باز های مکمل ، DNA را از طریق طراحی توالی های پایه ، به یک ماده ساختمانی مفید تبدیل می کند. DNA ماده ای کاملاً شناخته شده است که برای ایجاد داربست هایی که مولکول های دیگر را در خود نگه می دارد یا ایجاد ساختارهایی به تنهایی مناسب است.تعدادی برنامه کاربردی از سیستم های انتقال دارو برای استفاده به عنوان مدار در دستگاه های پلاسمونیک پیدا کرده است. با این حال ، بیشتر برنامه ها در یک مرحله مفهومی یا آزمایشی باقی می مانند.
اگر چه DNA انتخاب طبیعی برای ساختن ساختار های فعال نانو ربات هاDNA origami میباشد. برای کاربرد های نانوروبوتیک نیست ، اما به دلیل عدم تنوع ساختاری و کاتالیزوری ، امکان واکرهای مولکولی را بر روی اوریگامی و سوئیچ ها نیز وجود دارد. نانو روبات های ساخته شده از DNA اوریگامی DNA origami ظرفیت های محاسباتی را به نمایش می گذارند و یک کار از قبل برنامه ریزی شده در داخل ارگانیسم زنده میباشد.در ساختار نانو ربات DNA که آنها ایجاد کردند ، یک لوله DNA باز است که از یک طرف لولا دارد و می توان آن را بست. لوله DNA مملو از دارو توسط یک آپتامر DNA بسته شده و برای شناسایی و جستجوی پروتئین مرتبط با بیماری پیکر بندی شده است. هنگامی که نانو ربات های اریگامی DNA origami به سلولهای آلوده برخورد میکنند ، آپتامر ها از هم جدا شده و دارو را آزاد می کنند.
نتیجه گیری :
خواص خود آزمایی قابل برنامه ریزی اسید های نوکلئیک وDNA origami در ایجاد نانو شکل و نانو ماشین های منطقی طراحی شده برای کاربرد های مختلف هستند. به همین دلیل امروزه یکی از مناطق مورد بررسی بیشتر در زمینه نانوروبوتیک ، شامل مونتاژ DNA ، به ویژه یک روش به نام DNA اوریگامی DNA origami است
پژوهشگر و نویسنده: دکتر ( افشین رشید)
دکترایِ تخصصی نانو _ میکرو الکترونیک
درباره این سایت