𝐏𝐨𝐰𝐞𝐫𝐅𝐚𝐜𝐭𝐨𝐫𝐲 𝐃𝐈𝐠𝐒𝐈𝐋𝐄𝐍𝐓 | آموزش نرم افزار دیگسایلنت پاورفکتوری
🔰 ادامه سطح 1 - بخش 10 🔰 🔹 مقداردهی میتواند مرحلهای باشد فرض کنید میخواهیم مجموع سه مقدار را محاسبه کنیم. میتوانیم این کار را مرحلهبهمرحله انجام دهیم: ! =================================== ! ✅ Telegram: @PowerFactoryDIgSILENT ! ===================================…
🔰 ادامه سطح 1 - بخش 10 🔰
🧠 یک مثال ترکیبی
در مثال زیر چند مفهوم قبلی را همزمان میبینیم:
خروجی:
ساختار برنامه:
⚠️ نکات مهم
1️⃣ Variable باید از قبل تعریف شده باشد
قبل از:
باید Variable مناسب تعریف شده باشد.
2️⃣ نوع داده باید مناسب باشد
اگر قرار است مقدار اعشاری ذخیره کنیم، نمیتوانیم بدون توجه به نوع داده، آن را مانند یک عدد صحیح مدیریت کنیم.
انواع داده و تفاوت Integer و Real را در پستهای بعدی بهصورت دقیق بررسی خواهیم کرد.
3️⃣ مقدار قبلی ممکن است با مقدار جدید جایگزین شود
وقتی مینویسیم:
در نهایت مقدار فعلی
🎯 جمعبندی
در این پست یاد گرفتیم:
☜ Assignment چیست؟
☜ چگونه یک Variable را مقداردهی کنیم.
☜ چگونه مقدار Variable را تغییر دهیم.
☜ چگونه از Variable دیگر برای مقداردهی استفاده کنیم.
☜ چگونه یک Expression را به Variable اختصاص دهیم.
☜ چرا ترتیب Assignmentها اهمیت دارد.
☜ مفهوم
☜ Assignment چگونه در پردازش اطلاعات PowerFactory کاربرد پیدا میکند.
⭐️ قانون طلایی
#سطح_1
#DIgSILENT #PowerFactory #DPL #PowerSystems #مهندسی_برق
✅ @PowerFactoryDIgSILENT
🧠 یک مثال ترکیبی
در مثال زیر چند مفهوم قبلی را همزمان میبینیم:
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
! Define variables
int basePower, additionalPower, totalPower;
! Initial values
basePower = 500;
additionalPower = 150;
! Calculate total power
totalPower = basePower + additionalPower;
printf('Base Power = %d MW', basePower);
printf('Additional Power = %d MW', additionalPower);
printf('Total Power = %d MW', totalPower);
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
خروجی:
Base Power = 500 MW
Additional Power = 150 MW
Total Power = 650 MW
ساختار برنامه:
Variable Definition
↓
Assignment
↓
Expression
↓
Assignment
↓
Output
⚠️ نکات مهم
1️⃣ Variable باید از قبل تعریف شده باشد
قبل از:
power = 100;
باید Variable مناسب تعریف شده باشد.
2️⃣ نوع داده باید مناسب باشد
اگر قرار است مقدار اعشاری ذخیره کنیم، نمیتوانیم بدون توجه به نوع داده، آن را مانند یک عدد صحیح مدیریت کنیم.
انواع داده و تفاوت Integer و Real را در پستهای بعدی بهصورت دقیق بررسی خواهیم کرد.
3️⃣ مقدار قبلی ممکن است با مقدار جدید جایگزین شود
وقتی مینویسیم:
power = 100;
power = 200;
در نهایت مقدار فعلی
power برابر 200 خواهد بود.🎯 جمعبندی
در این پست یاد گرفتیم:
☜ Assignment چیست؟
☜ چگونه یک Variable را مقداردهی کنیم.
☜ چگونه مقدار Variable را تغییر دهیم.
☜ چگونه از Variable دیگر برای مقداردهی استفاده کنیم.
☜ چگونه یک Expression را به Variable اختصاص دهیم.
☜ چرا ترتیب Assignmentها اهمیت دارد.
☜ مفهوم
= در Assignment چیست؟☜ Assignment چگونه در پردازش اطلاعات PowerFactory کاربرد پیدا میکند.
⭐️ قانون طلایی
در Assignment، نتیجه سمت راست محاسبه میشود و مقدار حاصل در Variable سمت چپ قرار میگیرد.
#سطح_1
#DIgSILENT #PowerFactory #DPL #PowerSystems #مهندسی_برق
✅ @PowerFactoryDIgSILENT
𝐏𝐨𝐰𝐞𝐫𝐅𝐚𝐜𝐭𝐨𝐫𝐲 𝐃𝐈𝐠𝐒𝐈𝐋𝐄𝐍𝐓 | آموزش نرم افزار دیگسایلنت پاورفکتوری
🔰 ادامه سطح 1 - بخش 10 🔰 🧠 یک مثال ترکیبی در مثال زیر چند مفهوم قبلی را همزمان میبینیم: ! =================================== ! ✅ Telegram: @PowerFactoryDIgSILENT ! =================================== ! Define variables int basePower, additionalPower,…
🎯 تمرین شماره 10
برنامهای بنویسید که:
یک Variable به نام
مقدار اولیه آن را
مقدار آن را به
سپس
مقدار نهایی را با
انتظار داریم مقدار نهایی برابر باشد با:
#تمرین_سطح_1
#تمرین
برنامهای بنویسید که:
یک Variable به نام
load تعریف کند.مقدار اولیه آن را
100 قرار دهد.مقدار آن را به
150 تغییر دهد.سپس
50 واحد به مقدار آن اضافه کند.مقدار نهایی را با
printf نمایش دهد.انتظار داریم مقدار نهایی برابر باشد با:
200
#تمرین_سطح_1
#تمرین
🔰 سطح 1 - بخش 11 🔰
📌 انواع داده در DPL
تا اینجا با Variable، Assignment و Expression آشنا شدیم.
اما یک سؤال مهم وجود دارد:
پاسخ در مفهوم Data Type یا نوع داده است.
در DPL، انتخاب نوع داده اهمیت زیادی دارد؛ چون دادهای که با آن کار میکنیم ممکن است یک عدد صحیح، عدد اعشاری، متن، مقدار منطقی، یک Object از PowerFactory یا مجموعهای از Objectها باشد.
1️⃣ Integer — عدد صحیح
برای نگهداری مقادیر عددی بدون بخش اعشاری از نوع صحیح استفاده میکنیم.
مثلاً:
یک مثال مرتبط با PowerFactory:
خروجی:
کاربردهای رایج Integer
☜ تعداد تجهیزات
☜ شماره سناریو
☜ شمارنده حلقهها
☜ تعداد Busها
☜ تعداد خطوط
☜ تعداد ترانسفورماتورها
☜ Indexها
2️⃣ Real — عدد اعشاری
در مطالعات سیستم قدرت، با مقادیر اعشاری بسیار زیاد سروکار داریم.
مثلاً:
بنابراین برای چنین دادههایی باید از نوع عددی مناسب برای مقادیر اعشاری استفاده کنیم.
در DPL این مقادیر با نوع
مثلاً:
خروجی:
مثال واقعیتر
فرض کنید حد مجاز Loading را 100 درصد در نظر گرفتهایم:
خروجی:
این نوع داده در پروژههای Load Flow، Short Circuit و Voltage Analysis بسیار پرکاربرد خواهد بود.
⚠️ Integer یا Double؟
این تفاوت را جدی بگیرید.
اگر داده ما:
باشد، یک مقدار صحیح است.
اما اگر:
باشد، باید از نوعی استفاده کنیم که بتواند بخش اعشاری را نگهداری کند.
مثلاً در یک پروژه واقعی:
3️⃣ String — داده متنی
گاهی دادهای که با آن کار میکنیم عدد نیست؛ بلکه متن است.
در PowerFactory با نام تجهیزات بسیار زیاد سروکار داریم.
مثلاً:
برای نگهداری چنین اطلاعاتی از
خروجی:
🔹 String در گزارشگیری
فرض کنید میخواهیم نام یک تجهیز را همراه با نتیجه تحلیل نمایش دهیم:
خروجی:
این ترکیب String + Double در گزارشگیریهای آینده بسیار مهم خواهد بود.
#سطح_1
#DIgSILENT #PowerFactory #DPL #PowerSystems #مهندسی_برق
✅ @PowerFactoryDIgSILENT
📌 انواع داده در DPL
تا اینجا با Variable، Assignment و Expression آشنا شدیم.
اما یک سؤال مهم وجود دارد:
🔹 وقتی میخواهیم یک Variable تعریف کنیم، از کجا بدانیم باید
intاستفاده کنیم یا
doubleیا
stringیا یک نوع دیگر؟
پاسخ در مفهوم Data Type یا نوع داده است.
در DPL، انتخاب نوع داده اهمیت زیادی دارد؛ چون دادهای که با آن کار میکنیم ممکن است یک عدد صحیح، عدد اعشاری، متن، مقدار منطقی، یک Object از PowerFactory یا مجموعهای از Objectها باشد.
1️⃣ Integer — عدد صحیح
برای نگهداری مقادیر عددی بدون بخش اعشاری از نوع صحیح استفاده میکنیم.
مثلاً:
تعداد خطوط = 125
تعداد Busها = 48
تعداد ترانسفورماتورها = 12
یک مثال مرتبط با PowerFactory:
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
int lineCount;
lineCount = 125;
printf('Number of Lines = %d', lineCount);
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
خروجی:
Number of Lines = 125
کاربردهای رایج Integer
☜ تعداد تجهیزات
☜ شماره سناریو
☜ شمارنده حلقهها
☜ تعداد Busها
☜ تعداد خطوط
☜ تعداد ترانسفورماتورها
☜ Indexها
2️⃣ Real — عدد اعشاری
در مطالعات سیستم قدرت، با مقادیر اعشاری بسیار زیاد سروکار داریم.
مثلاً:
Voltage = 0.987 pu
Loading = 87.35 %
Power = 125.6 MW
Current = 456.72 A
بنابراین برای چنین دادههایی باید از نوع عددی مناسب برای مقادیر اعشاری استفاده کنیم.
در DPL این مقادیر با نوع
double تعریف میشوند.مثلاً:
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
double voltage;
voltage = 0.987;
printf('Bus Voltage = %.3f pu', voltage);
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
خروجی:
Bus Voltage = 0.987 pu
مثال واقعیتر
فرض کنید حد مجاز Loading را 100 درصد در نظر گرفتهایم:
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
double loading;
loading = 103.75;
printf('Line Loading = %.2f %%', loading);
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
خروجی:
Line Loading = 103.75 %
این نوع داده در پروژههای Load Flow، Short Circuit و Voltage Analysis بسیار پرکاربرد خواهد بود.
⚠️ Integer یا Double؟
این تفاوت را جدی بگیرید.
اگر داده ما:
125
باشد، یک مقدار صحیح است.
اما اگر:
125.75
باشد، باید از نوعی استفاده کنیم که بتواند بخش اعشاری را نگهداری کند.
مثلاً در یک پروژه واقعی:
Number of Lines → Integer
Bus Voltage → Double
Line Loading → Double
Active Power → Double
3️⃣ String — داده متنی
گاهی دادهای که با آن کار میکنیم عدد نیست؛ بلکه متن است.
در PowerFactory با نام تجهیزات بسیار زیاد سروکار داریم.
مثلاً:
Line_230kV_01
Bus_230_01
TR_230_63_01
Substation_A
برای نگهداری چنین اطلاعاتی از
string استفاده میکنیم.! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
string lineName;
lineName = 'Line_230kV_01';
printf('Line Name = %s', lineName);
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
خروجی:
Line Name = Line_230kV_01
🔹 String در گزارشگیری
فرض کنید میخواهیم نام یک تجهیز را همراه با نتیجه تحلیل نمایش دهیم:
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
string lineName;
double loading;
lineName = 'Line_230kV_01';
loading = 108.42;
printf('Line: %s | Loading: %.2f %%', lineName, loading);
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
خروجی:
Line: Line_230kV_01 | Loading: 108.42 %
این ترکیب String + Double در گزارشگیریهای آینده بسیار مهم خواهد بود.
#سطح_1
#DIgSILENT #PowerFactory #DPL #PowerSystems #مهندسی_برق
✅ @PowerFactoryDIgSILENT
𝐏𝐨𝐰𝐞𝐫𝐅𝐚𝐜𝐭𝐨𝐫𝐲 𝐃𝐈𝐠𝐒𝐈𝐋𝐄𝐍𝐓 | آموزش نرم افزار دیگسایلنت پاورفکتوری
🔰 سطح 1 - بخش 11 🔰 📌 انواع داده در DPL تا اینجا با Variable، Assignment و Expression آشنا شدیم. اما یک سؤال مهم وجود دارد: 🔹 وقتی میخواهیم یک Variable تعریف کنیم، از کجا بدانیم باید int استفاده کنیم یا double یا string یا یک نوع دیگر؟ پاسخ در مفهوم…
🔰 ادامه سطح 1 - بخش 11 🔰
4️⃣ Boolean — مقدار منطقی
گاهی لازم نیست یک عدد یا متن ذخیره کنیم.
فقط میخواهیم بدانیم:
برای این نوع داده از مقدار منطقی استفاده میکنیم.
مثلاً:
یا:
یک مثال مفهومی:
منطق برنامه:
⚠️ توجه: در مثالهای آموزشی این پست هدف نشان دادن نقش نوع داده منطقی است؛ جزئیات Syntax مربوط به Boolean و شرطها را در بخش Operator و
5️⃣ Object — نگهداری Reference به یک Object
اینجا وارد بخش بسیار مهم DPL میشویم.
در PowerFactory تجهیزات پروژه بهصورت Object وجود دارند.
مثلاً:
در DPL میتوانیم یک Variable داشته باشیم که به یک Object اشاره کند.
بهصورت مفهومی:
این مفهوم بعداً برای کار با Objectهای واقعی PowerFactory بسیار مهم خواهد بود.
مثلاً وقتی میخواهیم:
باید بتوانیم Reference آن Object را در یک Variable نگهداری کنیم.
6️⃣ Set — مجموعهای از Objectها
حالا فرض کنید فقط یک خط نداریم.
شبکه ما شامل:
است.
نمیتوانیم برای هر خط یک Variable مستقل تعریف کنیم.
اینجاست که Set اهمیت پیدا میکند.
Set را میتوان بهصورت ساده اینگونه تصور کرد:
در آینده میتوانیم مثلاً مجموعهای از خطوط مرتبط را پیدا کنیم و سپس با یک Loop روی آنها حرکت کنیم.
این موضوع یکی از مهمترین کاربردهای Set در DPL است.
🔥 یک مثال واقعیتر از ترکیب انواع داده
فرض کنید میخواهیم اطلاعات یک خط را برای گزارش نگهداری کنیم:
یعنی:
این دقیقاً همان چیزی است که در پروژههای واقعی DPL با آن روبهرو خواهیم شد.
#سطح_1
#DIgSILENT #PowerFactory #DPL #PowerSystems #مهندسی_برق
✅ @PowerFactoryDIgSILENT
4️⃣ Boolean — مقدار منطقی
گاهی لازم نیست یک عدد یا متن ذخیره کنیم.
فقط میخواهیم بدانیم:
آیا یک شرط برقرار است یا خیر؟
برای این نوع داده از مقدار منطقی استفاده میکنیم.
مثلاً:
Overloaded = True
یا:
Overloaded = False
یک مثال مفهومی:
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
int loading;
bool overloaded;
loading = 105;
overloaded = loading > 100;
if (overloaded)
{
printf('Line is overloaded');
}
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
منطق برنامه:
Loading = 105
↓
105 > 100
↓
True
↓
Overloaded = True
↓
Line is overloaded
⚠️ توجه: در مثالهای آموزشی این پست هدف نشان دادن نقش نوع داده منطقی است؛ جزئیات Syntax مربوط به Boolean و شرطها را در بخش Operator و
if دقیقتر بررسی خواهیم کرد.5️⃣ Object — نگهداری Reference به یک Object
اینجا وارد بخش بسیار مهم DPL میشویم.
در PowerFactory تجهیزات پروژه بهصورت Object وجود دارند.
مثلاً:
ElmLne → Line
ElmTerm → Terminal / Bus
ElmTr2 → 2-Winding Transformer
ElmLod → Load
ElmSym → Synchronous Machine
در DPL میتوانیم یک Variable داشته باشیم که به یک Object اشاره کند.
بهصورت مفهومی:
line
↓
Line Object
↓
Line_230kV_01
این مفهوم بعداً برای کار با Objectهای واقعی PowerFactory بسیار مهم خواهد بود.
مثلاً وقتی میخواهیم:
«خط موردنظر را پیدا کن و Loading آن را بخوان»
باید بتوانیم Reference آن Object را در یک Variable نگهداری کنیم.
6️⃣ Set — مجموعهای از Objectها
حالا فرض کنید فقط یک خط نداریم.
شبکه ما شامل:
Line 1
Line 2
Line 3
...
Line 500
است.
نمیتوانیم برای هر خط یک Variable مستقل تعریف کنیم.
اینجاست که Set اهمیت پیدا میکند.
Set را میتوان بهصورت ساده اینگونه تصور کرد:
Set
│
├── Line 1
├── Line 2
├── Line 3
├── Line 4
└── ...
در آینده میتوانیم مثلاً مجموعهای از خطوط مرتبط را پیدا کنیم و سپس با یک Loop روی آنها حرکت کنیم.
این موضوع یکی از مهمترین کاربردهای Set در DPL است.
🔥 یک مثال واقعیتر از ترکیب انواع داده
فرض کنید میخواهیم اطلاعات یک خط را برای گزارش نگهداری کنیم:
نام خط → String
طول خط → Double
Loading → Double
تعداد خطوط → Integer
وضعیت → Boolean
خود خط → Object
مجموع خطوط → Set
یعنی:
Line Name → String
Length → Double
Loading → Double
Line Count → Integer
Overloaded → Boolean
Line → Object
Lines → Set
این دقیقاً همان چیزی است که در پروژههای واقعی DPL با آن روبهرو خواهیم شد.
#سطح_1
#DIgSILENT #PowerFactory #DPL #PowerSystems #مهندسی_برق
✅ @PowerFactoryDIgSILENT
𝐏𝐨𝐰𝐞𝐫𝐅𝐚𝐜𝐭𝐨𝐫𝐲 𝐃𝐈𝐠𝐒𝐈𝐋𝐄𝐍𝐓 | آموزش نرم افزار دیگسایلنت پاورفکتوری
🔰 ادامه سطح 1 - بخش 11 🔰 4️⃣ Boolean — مقدار منطقی گاهی لازم نیست یک عدد یا متن ذخیره کنیم. فقط میخواهیم بدانیم: آیا یک شرط برقرار است یا خیر؟ برای این نوع داده از مقدار منطقی استفاده میکنیم. مثلاً: Overloaded = True یا: Overloaded = False یک مثال مفهومی:…
🔰 ادامه سطح 1 - بخش 11 🔰
🧠 یک سناریوی PowerFactory را تصور کنیم
فرض کنید میخواهیم یک برنامه برای بررسی Loading خطوط بسازیم.
منطق برنامه:
در این فرآیند تقریباً تمام انواع دادهای که امروز یاد گرفتیم درگیر میشوند.
🔹 مثال ترکیبی
مثلاً اطلاعات یک خط را بهصورت مفهومی در Variableهای مختلف نگهداری میکنیم:
منطق برنامه:
و خروجی تقریباً به این شکل خواهد بود:
⚠️ یک نکته بسیار مهم
در DPL، Object و Set را با یکدیگر اشتباه نگیرید.
مثلاً:
ولی:
مثلاً:
در بخشهای بعدی این تفاوت را بهصورت عملی و با Objectهای واقعی PowerFactory بررسی خواهیم کرد.
🎯 جمعبندی
در این پست با انواع داده مهم DPL آشنا شدیم:
برای مقادیر صحیح مثل تعداد تجهیزات
برای مقادیر اعشاری مثل ولتاژ، توان و Loading
برای متن و نام تجهیزات.
برای وضعیتهای منطقی مثل Overloaded / Normal
برای نگهداری Reference یک Object از PowerFactory
برای نگهداری مجموعهای از Objectها.
و مهمتر از همه یاد گرفتیم که انتخاب Data Type باید بر اساس ماهیت واقعی داده انجام شود.
#سطح_1
#DIgSILENT #PowerFactory #DPL #PowerSystems #مهندسی_برق
✅ @PowerFactoryDIgSILENT
🧠 یک سناریوی PowerFactory را تصور کنیم
فرض کنید میخواهیم یک برنامه برای بررسی Loading خطوط بسازیم.
منطق برنامه:
Lines
↓
Set
↓
انتخاب یک Line
↓
Object
↓
Loading
↓
Double
↓
Loading > 100 ?
⬋ ⬊
True False
↓ ↓
Overloaded Normal
در این فرآیند تقریباً تمام انواع دادهای که امروز یاد گرفتیم درگیر میشوند.
🔹 مثال ترکیبی
مثلاً اطلاعات یک خط را بهصورت مفهومی در Variableهای مختلف نگهداری میکنیم:
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
string lineName;
double loading;
int lineNumber;
bool overloaded;
lineNumber = 1;
lineName = 'Line_230kV_01';
loading = 108.42;
overloaded = loading > 100;
printf('Line %d: %s', lineNumber, lineName);
printf('Loading = %.2f %%', loading);
if (overloaded)
{
printf('Status = OVERLOADED');
}
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
منطق برنامه:
lineNumber → 1
lineName → Line_230kV_01
loading → 108.42
overloaded → True
و خروجی تقریباً به این شکل خواهد بود:
Line 1: Line_230kV_01
Loading = 108.42 %
Status = OVERLOADED
⚠️ یک نکته بسیار مهم
در DPL، Object و Set را با یکدیگر اشتباه نگیرید.
مثلاً:
Object
↓
یک تجهیز
ولی:
Set
↓
مجموعهای از تجهیزات
مثلاً:
line
↓
یک Line
lines
↓
مجموعهای از Lineها
در بخشهای بعدی این تفاوت را بهصورت عملی و با Objectهای واقعی PowerFactory بررسی خواهیم کرد.
🎯 جمعبندی
در این پست با انواع داده مهم DPL آشنا شدیم:
intبرای مقادیر صحیح مثل تعداد تجهیزات
doubleبرای مقادیر اعشاری مثل ولتاژ، توان و Loading
stringبرای متن و نام تجهیزات.
boolبرای وضعیتهای منطقی مثل Overloaded / Normal
objectبرای نگهداری Reference یک Object از PowerFactory
setبرای نگهداری مجموعهای از Objectها.
و مهمتر از همه یاد گرفتیم که انتخاب Data Type باید بر اساس ماهیت واقعی داده انجام شود.
#سطح_1
#DIgSILENT #PowerFactory #DPL #PowerSystems #مهندسی_برق
✅ @PowerFactoryDIgSILENT
𝐏𝐨𝐰𝐞𝐫𝐅𝐚𝐜𝐭𝐨𝐫𝐲 𝐃𝐈𝐠𝐒𝐈𝐋𝐄𝐍𝐓 | آموزش نرم افزار دیگسایلنت پاورفکتوری
🔰 ادامه سطح 1 - بخش 11 🔰 🧠 یک سناریوی PowerFactory را تصور کنیم فرض کنید میخواهیم یک برنامه برای بررسی Loading خطوط بسازیم. منطق برنامه: Lines ↓ Set ↓ انتخاب یک Line …
🎯 تمرین شماره 11
فرض کنید میخواهیم اطلاعات یک ترانسفورماتور را برای تحلیل نگهداری کنیم.
برای هر مورد مشخص کنید چه نوع دادهای مناسب است:
نام ترانسفورماتور
توان نامی، مثلاً 160 MVA
تعداد ترانسفورماتورها
وضعیت Overload
خود Object ترانسفورماتور
مجموعه تمام ترانسفورماتورها
💡 راهنمای تمرین
به این سؤال فکر کنید:
پاسخ صحیح این تمرین پایه بسیاری از Scriptهای آینده ما خواهد بود.
#تمرین_سطح_1
#تمرین
فرض کنید میخواهیم اطلاعات یک ترانسفورماتور را برای تحلیل نگهداری کنیم.
برای هر مورد مشخص کنید چه نوع دادهای مناسب است:
نام ترانسفورماتور
توان نامی، مثلاً 160 MVA
تعداد ترانسفورماتورها
وضعیت Overload
خود Object ترانسفورماتور
مجموعه تمام ترانسفورماتورها
💡 راهنمای تمرین
به این سؤال فکر کنید:
آیا داده عدد صحیح است، عدد اعشاری است، متن است، مقدار منطقی است، یک Object است یا مجموعهای از Objectها؟
پاسخ صحیح این تمرین پایه بسیاری از Scriptهای آینده ما خواهد بود.
#تمرین_سطح_1
#تمرین
🔰 سطح 1 - بخش 12 🔰
📌 Integer در DPL
در پست قبل با انواع داده در DPL آشنا شدیم.
در این پست میخواهیم یکی از سادهترین و در عین حال پرکاربردترین انواع داده را بررسی کنیم:
نوع
1️⃣ Integer چیست؟
Integer به اعداد صحیح گفته میشود؛ یعنی مقادیری مانند:
اما مقادیری مانند:
عدد صحیح نیستند.
در DPL برای تعریف یک Variable از نوع Integer از:
استفاده میکنیم.
2️⃣ تعریف یک Integer
ساختار کلی:
مثلاً:
در اینجا:
نوع داده است و:
نام Variable است.
مقدار آن نیز:
است.
3️⃣ کاربرد Integer در PowerFactory
در پروژههای واقعی PowerFactory، Integer کاربردهای بسیار زیادی دارد.
مثلاً برای نگهداری:
☜ تعداد Busها
☜ تعداد خطوط
☜ تعداد ترانسفورماتورها
☜ شماره سناریو
☜ شماره مرحله تحلیل
☜ شمارنده Loop
☜ Index یک عضو
☜ تعداد Contingencyها
☜ تعداد خطاهای شناساییشده
استفاده میشود.
4️⃣ شمارش تجهیزات
یکی از اولین کاربردهای واقعی Integer، شمارش Objectها است.
فرض کنید یک Set از تجهیزات داریم.
بهصورت مفهومی:
برای نگهداری تعداد اعضای این مجموعه، به یک Integer نیاز داریم.
مثلاً:
میتواند تعداد Busها را نگهداری کند.
در ادامه دوره که با
5️⃣ Integer در شمارندهها
یکی از مهمترین کاربردهای
مثلاً فرض کنید میخواهیم تعداد تجهیزات بررسیشده را بشماریم.
منطق:
Variable مربوط به Counter باید بتواند اعداد صحیح را نگهداری کند.
مثلاً:
و بعد:
6️⃣ یک مثال مهندسی: شمارش Violations
فرض کنید در یک مطالعه Load Flow میخواهیم تعداد تجهیزات دارای مشکل را بشماریم.
مثلاً:
یک Counter میتواند تعداد موارد شناساییشده را نگهداری کند.
منطق:
در پایان مثلاً:
این یکی از کاربردهای بسیار مهم Integer در پروژههای اتوماسیون خواهد بود.
7️⃣ Integer در شمارهگذاری
فرض کنید میخواهیم تجهیزات یک گزارش را شمارهگذاری کنیم:
شماره هر ردیف میتواند توسط یک Integer نگهداری شود.
مثلاً:
که از
8️⃣ Integer در Loop
در آینده با حلقههای
در بسیاری از Loopها به یک Variable صحیح برای کنترل تکرار نیاز داریم.
مثلاً مفهوم کلی:
بنابراین Integer یکی از پایههای اصلی Loop و Automation است.
9️⃣ عملیات ریاضی روی Integer
روی مقادیر Integer میتوان عملیات ریاضی انجام داد.
مثلاً:
اینجا:
محاسبه شده و نتیجه در:
قرار گرفته است.
#سطح_1
#DIgSILENT #PowerFactory #DPL #PowerSystems #مهندسی_برق
✅ @PowerFactoryDIgSILENT
📌 Integer در DPL
در پست قبل با انواع داده در DPL آشنا شدیم.
در این پست میخواهیم یکی از سادهترین و در عین حال پرکاربردترین انواع داده را بررسی کنیم:
🔹 Integer یا عدد صحیح
نوع
int زمانی استفاده میشود که بخواهیم یک مقدار بدون بخش اعشاری را در Variable نگهداری کنیم.1️⃣ Integer چیست؟
Integer به اعداد صحیح گفته میشود؛ یعنی مقادیری مانند:
0
1
2
10
100
-5
-20
اما مقادیری مانند:
10.5
0.95
125.75
عدد صحیح نیستند.
در DPL برای تعریف یک Variable از نوع Integer از:
int
استفاده میکنیم.
2️⃣ تعریف یک Integer
ساختار کلی:
int VariableName;
مثلاً:
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
int busCount;
busCount = 25;
printf('Number of Buses = %d', busCount);
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
در اینجا:
int
نوع داده است و:
busCount
نام Variable است.
مقدار آن نیز:
25
است.
3️⃣ کاربرد Integer در PowerFactory
در پروژههای واقعی PowerFactory، Integer کاربردهای بسیار زیادی دارد.
مثلاً برای نگهداری:
☜ تعداد Busها
☜ تعداد خطوط
☜ تعداد ترانسفورماتورها
☜ شماره سناریو
☜ شماره مرحله تحلیل
☜ شمارنده Loop
☜ Index یک عضو
☜ تعداد Contingencyها
☜ تعداد خطاهای شناساییشده
استفاده میشود.
4️⃣ شمارش تجهیزات
یکی از اولین کاربردهای واقعی Integer، شمارش Objectها است.
فرض کنید یک Set از تجهیزات داریم.
بهصورت مفهومی:
Set
│
├── Bus 1
├── Bus 2
├── Bus 3
├── ...
└── Bus N
برای نگهداری تعداد اعضای این مجموعه، به یک Integer نیاز داریم.
مثلاً:
busCount
میتواند تعداد Busها را نگهداری کند.
در ادامه دوره که با
Set و Objectها بهصورت عملی کار کنیم، همین مفهوم را روی Objectهای واقعی PowerFactory پیادهسازی خواهیم کرد.5️⃣ Integer در شمارندهها
یکی از مهمترین کاربردهای
int، استفاده بهعنوان Counter است.مثلاً فرض کنید میخواهیم تعداد تجهیزات بررسیشده را بشماریم.
منطق:
شروع
↓
Counter = 0
↓
بررسی تجهیز
↓
Counter = Counter + 1
↓
تجهیز بعدی
↓
...
Variable مربوط به Counter باید بتواند اعداد صحیح را نگهداری کند.
مثلاً:
counter = 0
و بعد:
counter = counter + 1
6️⃣ یک مثال مهندسی: شمارش Violations
فرض کنید در یک مطالعه Load Flow میخواهیم تعداد تجهیزات دارای مشکل را بشماریم.
مثلاً:
Voltage Violation
Loading Violation
یک Counter میتواند تعداد موارد شناساییشده را نگهداری کند.
منطق:
Violation Count = 0
اگر تجهیز مشکل داشت:
Violation Count = Violation Count + 1
در پایان مثلاً:
Total Violations = 7
این یکی از کاربردهای بسیار مهم Integer در پروژههای اتوماسیون خواهد بود.
7️⃣ Integer در شمارهگذاری
فرض کنید میخواهیم تجهیزات یک گزارش را شمارهگذاری کنیم:
1. Line A
2. Line B
3. Line C
4. Line D
شماره هر ردیف میتواند توسط یک Integer نگهداری شود.
مثلاً:
reportIndex
که از
1 شروع میشود و با پردازش هر تجهیز افزایش پیدا میکند.8️⃣ Integer در Loop
در آینده با حلقههای
for و while بهصورت کامل کار خواهیم کرد.در بسیاری از Loopها به یک Variable صحیح برای کنترل تکرار نیاز داریم.
مثلاً مفهوم کلی:
counter = 1
تا زمانی که counter به حد مشخص نرسیده:
عملیات
counter = counter + 1
بنابراین Integer یکی از پایههای اصلی Loop و Automation است.
9️⃣ عملیات ریاضی روی Integer
روی مقادیر Integer میتوان عملیات ریاضی انجام داد.
مثلاً:
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
int feeders, transformers, totalEquipment;
feeders = 12;
transformers = 4;
totalEquipment = feeders + transformers;
printf('Total Equipment = %d', totalEquipment);
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
اینجا:
12 + 4
محاسبه شده و نتیجه در:
totalEquipment
قرار گرفته است.
#سطح_1
#DIgSILENT #PowerFactory #DPL #PowerSystems #مهندسی_برق
✅ @PowerFactoryDIgSILENT
𝐏𝐨𝐰𝐞𝐫𝐅𝐚𝐜𝐭𝐨𝐫𝐲 𝐃𝐈𝐠𝐒𝐈𝐋𝐄𝐍𝐓 | آموزش نرم افزار دیگسایلنت پاورفکتوری
🔰 سطح 1 - بخش 12 🔰 📌 Integer در DPL در پست قبل با انواع داده در DPL آشنا شدیم. در این پست میخواهیم یکی از سادهترین و در عین حال پرکاربردترین انواع داده را بررسی کنیم: 🔹 Integer یا عدد صحیح نوع int زمانی استفاده میشود که بخواهیم یک مقدار بدون بخش اعشاری…
🔰 ادامه سطح 1 - بخش 12 🔰
🔹 افزایش مقدار Integer
یکی از الگوهای بسیار مهم:
یا
است.
مثلاً:
در نهایت:
خواهیم داشت.
🔹 کاهش مقدار Integer
همین مفهوم برای کاهش مقدار نیز وجود دارد:
نتیجه:
🔹 Integer و مقادیر منفی
Integer فقط برای اعداد مثبت نیست.
مثلاً:
خروجی:
⚠️ Integer برای همه اعداد مناسب نیست
یکی از اشتباهات رایج این است که چون یک مقدار «عدد» است، آن را
مثلاً:
اینها دارای بخش اعشاری هستند.
بنابراین
در این موارد از نوع عددی اعشاری مناسب، یعنی
🔥 یک مثال کاربردیتر
فرض کنید در یک فرآیند تحلیل، سه نوع تجهیز را بررسی کردهایم:
میتوانیم تعداد کل تجهیزات را محاسبه کنیم:
نتیجه:
نکته مهم این مثال این است که Integer برای تعداد تجهیزات کاملاً مناسب است.
🧠 Integer در پروژههای آینده DPL
در پروژههای واقعی دوره،
بنابراین ممکن است یک Script همزمان چند Integer داشته باشد:
هرکدام نقش مشخصی در برنامه خواهند داشت.
⚠️ نکته مهم درباره Integer و تقسیم
در محاسبات، هنگام کار با اعداد صحیح باید به نوع نتیجه عملیات توجه داشته باشیم.
بهخصوص در تقسیم، نباید بدون توجه به نوع داده فرض کنیم نتیجه همیشه یک عدد اعشاری خواهد بود.
مثلاً اگر هدف ما محاسبه یک نسبت مهندسی باشد:
و نتیجه باید اعشاری باشد، باید نوع داده مناسب برای نتیجه را در نظر بگیریم.
این موضوع را هنگام بررسی
🎯 جمعبندی
در این پست یاد گرفتیم:
☜
☜ Integer میتواند مثبت، صفر یا منفی باشد.
☜ برای شمارش تجهیزات بسیار مناسب است.
☜ برای Counterها کاربرد زیادی دارد.
☜ در Loopها بسیار پرکاربرد است.
☜ برای شمارهگذاری و Indexها استفاده میشود.
☜ برای شمارش خطاها و Violations کاربرد دارد.
☜ برای مقادیر اعشاری مانند Voltage و Loading نباید از Integer استفاده کنیم.
⭐️ قانون طلایی
#سطح_1
#DIgSILENT #PowerFactory #DPL #PowerSystems #مهندسی_برق
✅ @PowerFactoryDIgSILENT
🔹 افزایش مقدار Integer
یکی از الگوهای بسیار مهم:
counter = counter + 1;
یا
counter += 1;
است.
مثلاً:
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
int equipmentCount;
equipmentCount = 0;
equipmentCount = equipmentCount + 1;
equipmentCount = equipmentCount + 1;
equipmentCount = equipmentCount + 1;
printf('Equipment Count = %d', equipmentCount);
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
در نهایت:
Equipment Count = 3
خواهیم داشت.
🔹 کاهش مقدار Integer
همین مفهوم برای کاهش مقدار نیز وجود دارد:
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
int remaining;
remaining = 10;
remaining = remaining - 1; ! OR remaining -= 1
printf('Remaining = %d', remaining);
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
نتیجه:
Remaining = 9
🔹 Integer و مقادیر منفی
Integer فقط برای اعداد مثبت نیست.
مثلاً:
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
int difference;
difference = -15;
printf('Difference = %d', difference);
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
خروجی:
Difference = -15
⚠️ Integer برای همه اعداد مناسب نیست
یکی از اشتباهات رایج این است که چون یک مقدار «عدد» است، آن را
int تعریف کنیم.مثلاً:
Voltage = 0.987 pu
Loading = 87.35 %
Power = 125.6 MW
اینها دارای بخش اعشاری هستند.
بنابراین
int انتخاب مناسبی برای چنین دادههایی نیست.در این موارد از نوع عددی اعشاری مناسب، یعنی
double، استفاده خواهیم کرد.🔥 یک مثال کاربردیتر
فرض کنید در یک فرآیند تحلیل، سه نوع تجهیز را بررسی کردهایم:
Bus → 45
Line → 38
Transformer → 12
میتوانیم تعداد کل تجهیزات را محاسبه کنیم:
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
int busCount;
int lineCount;
int transformerCount;
int totalCount;
busCount = 45;
lineCount = 38;
transformerCount = 12;
totalCount = busCount + lineCount + transformerCount;
printf('Bus Count = %d', busCount);
printf('Line Count = %d', lineCount);
printf('Transformer Count = %d', transformerCount);
printf('Total Count = %d', totalCount);
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
نتیجه:
Bus Count = 45
Line Count = 38
Transformer Count = 12
Total Count = 95
نکته مهم این مثال این است که Integer برای تعداد تجهیزات کاملاً مناسب است.
🧠 Integer در پروژههای آینده DPL
در پروژههای واقعی دوره،
int را در مواردی مثل این خواهیم دید:Set تجهیزات
↓
Loop
↓
Counter
↓
بررسی Object
↓
اگر شرط برقرار بود
↓
Violation Count++
بنابراین ممکن است یک Script همزمان چند Integer داشته باشد:
objectCount
lineCount
busCount
errorCount
...
هرکدام نقش مشخصی در برنامه خواهند داشت.
⚠️ نکته مهم درباره Integer و تقسیم
در محاسبات، هنگام کار با اعداد صحیح باید به نوع نتیجه عملیات توجه داشته باشیم.
بهخصوص در تقسیم، نباید بدون توجه به نوع داده فرض کنیم نتیجه همیشه یک عدد اعشاری خواهد بود.
مثلاً اگر هدف ما محاسبه یک نسبت مهندسی باشد:
Loading / Limit
و نتیجه باید اعشاری باشد، باید نوع داده مناسب برای نتیجه را در نظر بگیریم.
این موضوع را هنگام بررسی
double با مثالهای دقیقتر بررسی خواهیم کرد.🎯 جمعبندی
در این پست یاد گرفتیم:
☜
int برای نگهداری اعداد صحیح استفاده میشود.☜ Integer میتواند مثبت، صفر یا منفی باشد.
☜ برای شمارش تجهیزات بسیار مناسب است.
☜ برای Counterها کاربرد زیادی دارد.
☜ در Loopها بسیار پرکاربرد است.
☜ برای شمارهگذاری و Indexها استفاده میشود.
☜ برای شمارش خطاها و Violations کاربرد دارد.
☜ برای مقادیر اعشاری مانند Voltage و Loading نباید از Integer استفاده کنیم.
⭐️ قانون طلایی
اگر داده ماهیت «تعداد، شمارنده، شماره یا مقدار صحیح» دارد، Integer یکی از گزینههای اصلی شماست.
#سطح_1
#DIgSILENT #PowerFactory #DPL #PowerSystems #مهندسی_برق
✅ @PowerFactoryDIgSILENT
𝐏𝐨𝐰𝐞𝐫𝐅𝐚𝐜𝐭𝐨𝐫𝐲 𝐃𝐈𝐠𝐒𝐈𝐋𝐄𝐍𝐓 | آموزش نرم افزار دیگسایلنت پاورفکتوری
🔰 ادامه سطح 1 - بخش 12 🔰 🔹 افزایش مقدار Integer یکی از الگوهای بسیار مهم: counter = counter + 1; یا counter += 1; است. مثلاً: ! =================================== ! ✅ Telegram: @PowerFactoryDIgSILENT ! =================================== int equipmentCount;…
🎯 تمرین شماره 12
فرض کنید یک فرآیند بررسی شبکه انجام دادهاید و این نتایج به دست آمده است:
☜ 6 خط دارای Overload هستند.
☜ 4 ترانسفورماتور دارای Overload هستند.
☜ 3 Bus دارای Undervoltage هستند.
☜ 2 Bus دارای Overvoltage هستند.
برنامه DPL بنویسید که:
☜ برای هرکدام یک Variable از نوع
☜ تعداد کل Equipment Violations را محاسبه کند.
☜ تعداد کل Voltage Violations را جداگانه محاسبه کند.
☜ تعداد کل Violations را در یک Variable دیگر ذخیره کند.
☜ نتیجه را با
🎯 نکته تمرین
جواب را فقط با جمع چهار عدد ننویسید؛ هدف این است که ساختار منطقی زیر را خودتان پیاده کنید:
#تمرین_سطح_1
#تمرین
فرض کنید یک فرآیند بررسی شبکه انجام دادهاید و این نتایج به دست آمده است:
☜ 6 خط دارای Overload هستند.
☜ 4 ترانسفورماتور دارای Overload هستند.
☜ 3 Bus دارای Undervoltage هستند.
☜ 2 Bus دارای Overvoltage هستند.
برنامه DPL بنویسید که:
☜ برای هرکدام یک Variable از نوع
int تعریف کند.☜ تعداد کل Equipment Violations را محاسبه کند.
☜ تعداد کل Voltage Violations را جداگانه محاسبه کند.
☜ تعداد کل Violations را در یک Variable دیگر ذخیره کند.
☜ نتیجه را با
printf نمایش دهد.🎯 نکته تمرین
جواب را فقط با جمع چهار عدد ننویسید؛ هدف این است که ساختار منطقی زیر را خودتان پیاده کنید:
Overload Violations
+
Voltage Violations
↓
Total Violations
#تمرین_سطح_1
#تمرین
🔰 سطح 1 - بخش 13 🔰
📌 Double در DPL
در پست قبلی با
اما در مطالعات سیستم قدرت، بیشتر مقادیر مهم ما اعشاری هستند:
☜ ولتاژ:
☜ بارگذاری:
☜ توان اکتیو:
☜ توان راکتیو:
☜ جریان:
برای چنین مقادیری در DPL از نوع:
استفاده میکنیم.
🔹 Double چیست؟
مثلاً:
خروجی:
🔹 چرا در PowerFactory به Double نیاز داریم؟
فرض کنید ولتاژ یک Bus برابر باشد با:
اگر بخواهیم این مقدار را برای تحلیل در Variable نگهداری کنیم، باید بتوانیم بخش اعشاری آن را حفظ کنیم.
یا مثلاً Loading یک خط:
است.
اگر فقط به اعداد صحیح محدود باشیم، اطلاعات اعشاری از بین میرود.
بنابراین:
🔹 تعریف و مقداردهی Double
ساختار کلی:
مثلاً:
خروجی:
🔹 Double و محاسبات مهندسی
یکی از مهمترین کاربردهای Double انجام محاسبات روی نتایج مطالعات است.
مثلاً فرض کنید توان تولیدی یک واحد:
و توان مصرفی:
باشد.
میتوانیم اختلاف آنها را محاسبه کنیم:
نتیجه:
🔹 محاسبه Loading
حالا یک مثال بسیار نزدیکتر به کاری که در PowerFactory انجام خواهیم داد.
فرض کنید:
و حد مجاز:
است.
میتوانیم درصد باقیمانده تا حد مجاز را محاسبه کنیم:
خروجی:
این نوع محاسبه بعدها در ساخت گزارش تجهیزات بحرانی بسیار کاربردی خواهد بود.
🔹 Double در تحلیل ولتاژ
فرض کنید محدوده مجاز ولتاژ را اینگونه تعریف کردهایم:
و ولتاژ یک Bus:
است.
میتوانیم فاصله آن از حد پایین را محاسبه کنیم:
نتیجه:
در آینده میتوانیم همین منطق را با
#سطح_1
#DIgSILENT #PowerFactory #DPL #PowerSystems #مهندسی_برق
✅ @PowerFactoryDIgSILENT
📌 Double در DPL
در پست قبلی با
Integer آشنا شدیم؛ نوع دادهای که برای اعداد صحیح مثل تعداد تجهیزات، شمارندهها و شماره سناریوها استفاده میشود.اما در مطالعات سیستم قدرت، بیشتر مقادیر مهم ما اعشاری هستند:
☜ ولتاژ:
0.98pu ☜ بارگذاری:
87.35%☜ توان اکتیو:
125.6MW ☜ توان راکتیو:
42.75MVAr ☜ جریان:
456.82A برای چنین مقادیری در DPL از نوع:
double
استفاده میکنیم.
🔹 Double چیست؟
double برای نگهداری اعداد اعشاری استفاده میشود.مثلاً:
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
double voltage;
voltage = 0.985;
printf('Voltage = %.3f pu', voltage);
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
خروجی:
Voltage = 0.985 pu
🔹 چرا در PowerFactory به Double نیاز داریم؟
فرض کنید ولتاژ یک Bus برابر باشد با:
0.973 pu
اگر بخواهیم این مقدار را برای تحلیل در Variable نگهداری کنیم، باید بتوانیم بخش اعشاری آن را حفظ کنیم.
یا مثلاً Loading یک خط:
103.72 %
است.
اگر فقط به اعداد صحیح محدود باشیم، اطلاعات اعشاری از بین میرود.
بنابراین:
Voltage → double
Loading → double
Power → double
Current → double
🔹 تعریف و مقداردهی Double
ساختار کلی:
double VariableName;
مثلاً:
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
double loading;
loading = 87.35;
printf('Loading = %.2f %%', loading);
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
خروجی:
Loading = 87.35 %
🔹 Double و محاسبات مهندسی
یکی از مهمترین کاربردهای Double انجام محاسبات روی نتایج مطالعات است.
مثلاً فرض کنید توان تولیدی یک واحد:
P = 125.5 MW
و توان مصرفی:
P = 87.25 MW
باشد.
میتوانیم اختلاف آنها را محاسبه کنیم:
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
double generation;
double load;
double surplus;
generation = 125.5;
load = 87.25;
surplus = generation - load;
printf('Generation = %.2f MW', generation);
printf('Load = %.2f MW', load);
printf('Surplus = %.2f MW', surplus);
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
نتیجه:
Generation = 125.50 MW
Load = 87.25 MW
Surplus = 38.25 MW
🔹 محاسبه Loading
حالا یک مثال بسیار نزدیکتر به کاری که در PowerFactory انجام خواهیم داد.
فرض کنید:
Actual Loading = 87.5 %
و حد مجاز:
Limit = 100 %
است.
میتوانیم درصد باقیمانده تا حد مجاز را محاسبه کنیم:
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
double loading;
double limit;
double margin;
loading = 87.5;
limit = 100.0;
margin = limit - loading;
printf('Loading = %.2f %%', loading);
printf('Margin = %.2f %%', margin);
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
خروجی:
Loading = 87.50 %
Margin = 12.50 %
این نوع محاسبه بعدها در ساخت گزارش تجهیزات بحرانی بسیار کاربردی خواهد بود.
🔹 Double در تحلیل ولتاژ
فرض کنید محدوده مجاز ولتاژ را اینگونه تعریف کردهایم:
Minimum = 0.95 pu
Maximum = 1.05 pu
و ولتاژ یک Bus:
0.928 pu
است.
میتوانیم فاصله آن از حد پایین را محاسبه کنیم:
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
double voltage;
double minVoltage;
double deviation;
voltage = 0.928;
minVoltage = 0.950;
deviation = minVoltage - voltage;
printf('Voltage = %.3f pu', voltage);
printf('Deviation = %.3f pu', deviation);
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
نتیجه:
Voltage = 0.928 pu
Deviation = 0.022 pu
در آینده میتوانیم همین منطق را با
if ترکیب کنیم تا Busهای دارای Undervoltage را شناسایی کنیم.#سطح_1
#DIgSILENT #PowerFactory #DPL #PowerSystems #مهندسی_برق
✅ @PowerFactoryDIgSILENT
𝐏𝐨𝐰𝐞𝐫𝐅𝐚𝐜𝐭𝐨𝐫𝐲 𝐃𝐈𝐠𝐒𝐈𝐋𝐄𝐍𝐓 | آموزش نرم افزار دیگسایلنت پاورفکتوری
🔰 سطح 1 - بخش 13 🔰 📌 Double در DPL در پست قبلی با Integer آشنا شدیم؛ نوع دادهای که برای اعداد صحیح مثل تعداد تجهیزات، شمارندهها و شماره سناریوها استفاده میشود. اما در مطالعات سیستم قدرت، بیشتر مقادیر مهم ما اعشاری هستند: ☜ ولتاژ: 0.98pu ☜ بارگذاری:…
🔰 ادامه سطح 1 - بخش 13 🔰
🔹 Double و درصد
فرض کنید توان فعلی یک تجهیز:
و ظرفیت آن:
است.
درصد استفاده از ظرفیت:
میشود.
در DPL:
خروجی:
🔹 Double و محاسبات چندمرحلهای
میتوانیم چند محاسبه را پشت سر هم انجام دهیم.
مثلاً فرض کنید توان یک ژنراتور از:
به:
افزایش یافته است.
مقدار افزایش:
و درصد افزایش:
خواهد بود.
خروجی:
این الگو بعدها برای مقایسه Study Caseها و سناریوها بسیار مفید خواهد بود.
🔹 Double و دقت نمایش
در
مثلاً:
یعنی یک رقم اعشار.
یعنی دو رقم اعشار.
یعنی سه رقم اعشار.
مثلاً:
بهصورت مفهومی خروجی به شکل زیر خواهد بود:
⚠️ توجه کنید که این فقط نحوه نمایش مقدار است؛ با محدود کردن تعداد ارقام در
🔹 Double در مقایسه با یک Limit
یکی از کاربردهای مهم Double در تحلیل شبکه، مقایسه یک مقدار با حد مجاز است.
مثلاً:
در آینده میتوانیم بنویسیم:
یعنی:
این ساختار پایه بسیاری از Scriptهای تحلیلی ما خواهد بود.
#سطح_1
#DIgSILENT #PowerFactory #DPL #PowerSystems #مهندسی_برق
✅ @PowerFactoryDIgSILENT
🔹 Double و درصد
فرض کنید توان فعلی یک تجهیز:
75 MW
و ظرفیت آن:
100 MW
است.
درصد استفاده از ظرفیت:
75 / 100 × 100 = 75 %
میشود.
در DPL:
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
double actualPower;
double capacity;
double utilization;
actualPower = 75.0;
capacity = 100.0;
utilization = actualPower / capacity * 100.0;
printf('Utilization = %.2f %%', utilization);
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
خروجی:
Utilization = 75.00 %
🔹 Double و محاسبات چندمرحلهای
میتوانیم چند محاسبه را پشت سر هم انجام دهیم.
مثلاً فرض کنید توان یک ژنراتور از:
120 MW
به:
138.5 MW
افزایش یافته است.
مقدار افزایش:
18.5 MW
و درصد افزایش:
15.42 %
خواهد بود.
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
double oldPower;
double newPower;
double difference;
double percentage;
oldPower = 120.0;
newPower = 138.5;
difference = newPower - oldPower;
percentage = difference / oldPower * 100.0;
printf('Old Power = %.2f MW', oldPower);
printf('New Power = %.2f MW', newPower);
printf('Difference = %.2f MW', difference);
printf('Increase = %.2f %%', percentage);
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
خروجی:
Old Power = 120.00 MW
New Power = 138.50 MW
Difference = 18.50 MW
Increase = 15.42 %
این الگو بعدها برای مقایسه Study Caseها و سناریوها بسیار مفید خواهد بود.
🔹 Double و دقت نمایش
در
printf میتوانیم مشخص کنیم چند رقم اعشار نمایش داده شود.مثلاً:
%.1f
یعنی یک رقم اعشار.
%.2f
یعنی دو رقم اعشار.
%.3f
یعنی سه رقم اعشار.
مثلاً:
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
double voltage;
voltage = 0.987654;
printf('%.1f', voltage);
printf('%.2f', voltage);
printf('%.3f', voltage);
printf('%.6f', voltage);
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
بهصورت مفهومی خروجی به شکل زیر خواهد بود:
1.0
0.99
0.988
0.987654
⚠️ توجه کنید که این فقط نحوه نمایش مقدار است؛ با محدود کردن تعداد ارقام در
printf، خود مقدار Variable تغییر نمیکند.🔹 Double در مقایسه با یک Limit
یکی از کاربردهای مهم Double در تحلیل شبکه، مقایسه یک مقدار با حد مجاز است.
مثلاً:
Loading = 108.6 %
Limit = 100 %
در آینده میتوانیم بنویسیم:
اگر Loading > Limit
↓
تجهیز Overloaded است
یعنی:
Double
↓
Measurement
↓
Comparison
↓
Decision
این ساختار پایه بسیاری از Scriptهای تحلیلی ما خواهد بود.
#سطح_1
#DIgSILENT #PowerFactory #DPL #PowerSystems #مهندسی_برق
✅ @PowerFactoryDIgSILENT
𝐏𝐨𝐰𝐞𝐫𝐅𝐚𝐜𝐭𝐨𝐫𝐲 𝐃𝐈𝐠𝐒𝐈𝐋𝐄𝐍𝐓 | آموزش نرم افزار دیگسایلنت پاورفکتوری
🔰 ادامه سطح 1 - بخش 13 🔰 🔹 Double و درصد فرض کنید توان فعلی یک تجهیز: 75 MW و ظرفیت آن: 100 MW است. درصد استفاده از ظرفیت: 75 / 100 × 100 = 75 % میشود. در DPL: ! =================================== ! ✅ Telegram: @PowerFactoryDIgSILENT ! ===============…
🔰 ادامه سطح 1 - بخش 13 🔰
⚠️ یک اشتباه رایج
نباید برای مقدار اعشاری، صرفاً به این دلیل که «عدد است»، از
مثلاً اگر:
باشد، این داده ماهیت اعشاری دارد.
در تحلیل سیستم قدرت، تفاوت بین:
و:
بسیار مهم است.
پس باید نوع داده را بر اساس ماهیت داده انتخاب کنیم، نه صرفاً بر اساس اینکه داده عددی است.
🧠 یک مثال ترکیبی PowerFactory
فرض کنید نتیجه یک مطالعه Load Flow برای یک تجهیز این مقادیر را به ما داده است:
برای نگهداری این مقادیر:
اینجا هر سه Variable از یک نوع هستند، چون هر سه مقدار اعشاری هستند.
🎯 نکته بسیار مهم برای ادامه دوره
در پروژههای واقعی DPL معمولاً دادهها را بهصورت منفرد بررسی نمیکنیم.
مثلاً ممکن است برای یک Line داشته باشیم:
و برای مجموعه خطوط:
بنابراین در Scriptهای واقعی، انواع داده مختلف دائماً کنار یکدیگر قرار میگیرند.
🎯 جمعبندی
در این پست یاد گرفتیم:
☜
☜ Voltage، Loading، Power و Current نمونههای مهم آن هستند.
☜ Double در محاسبات مهندسی بسیار پرکاربرد است.
☜ میتوان با Double اختلاف، درصد تغییر، Margin و نسبتها را محاسبه کرد.
☜ تعداد ارقام نمایش دادهشده با
☜ نباید دادههای اعشاری را صرفاً به دلیل عددی بودن، Integer در نظر گرفت.
⭐️ قانون طلایی
#سطح_1
#DIgSILENT #PowerFactory #DPL #PowerSystems #مهندسی_برق
✅ @PowerFactoryDIgSILENT
⚠️ یک اشتباه رایج
نباید برای مقدار اعشاری، صرفاً به این دلیل که «عدد است»، از
int استفاده کنیم.مثلاً اگر:
voltage = 0.973
باشد، این داده ماهیت اعشاری دارد.
در تحلیل سیستم قدرت، تفاوت بین:
0.973
و:
1.000
بسیار مهم است.
پس باید نوع داده را بر اساس ماهیت داده انتخاب کنیم، نه صرفاً بر اساس اینکه داده عددی است.
🧠 یک مثال ترکیبی PowerFactory
فرض کنید نتیجه یک مطالعه Load Flow برای یک تجهیز این مقادیر را به ما داده است:
Voltage = 0.942 pu
Loading = 96.75 %
Power = 184.35 MW
برای نگهداری این مقادیر:
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
double voltage;
double loading;
double power;
voltage = 0.942;
loading = 96.75;
power = 184.35;
printf('Voltage = %.3f pu', voltage);
printf('Loading = %.2f %%', loading);
printf('Power = %.2f MW', power);
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
اینجا هر سه Variable از یک نوع هستند، چون هر سه مقدار اعشاری هستند.
🎯 نکته بسیار مهم برای ادامه دوره
در پروژههای واقعی DPL معمولاً دادهها را بهصورت منفرد بررسی نمیکنیم.
مثلاً ممکن است برای یک Line داشته باشیم:
Line Object
↓
Name → String
Length → Double
Status → Boolean
و برای مجموعه خطوط:
All Lines
↓
Set
بنابراین در Scriptهای واقعی، انواع داده مختلف دائماً کنار یکدیگر قرار میگیرند.
🎯 جمعبندی
در این پست یاد گرفتیم:
☜
double برای مقادیر اعشاری استفاده میشود.☜ Voltage، Loading، Power و Current نمونههای مهم آن هستند.
☜ Double در محاسبات مهندسی بسیار پرکاربرد است.
☜ میتوان با Double اختلاف، درصد تغییر، Margin و نسبتها را محاسبه کرد.
☜ تعداد ارقام نمایش دادهشده با
printf قابل کنترل است.☜ نباید دادههای اعشاری را صرفاً به دلیل عددی بودن، Integer در نظر گرفت.
⭐️ قانون طلایی
هرجا با یک مقدار اندازهگیریشده یا محاسبهشده با بخش اعشاری سروکار داریم، باید نوع داده مناسب اعشاری را در نظر بگیریم.
#سطح_1
#DIgSILENT #PowerFactory #DPL #PowerSystems #مهندسی_برق
✅ @PowerFactoryDIgSILENT
𝐏𝐨𝐰𝐞𝐫𝐅𝐚𝐜𝐭𝐨𝐫𝐲 𝐃𝐈𝐠𝐒𝐈𝐋𝐄𝐍𝐓 | آموزش نرم افزار دیگسایلنت پاورفکتوری
🔰 ادامه سطح 1 - بخش 13 🔰 ⚠️ یک اشتباه رایج نباید برای مقدار اعشاری، صرفاً به این دلیل که «عدد است»، از int استفاده کنیم. مثلاً اگر: voltage = 0.973 باشد، این داده ماهیت اعشاری دارد. در تحلیل سیستم قدرت، تفاوت بین: 0.973 و: 1.000 بسیار مهم است. پس باید نوع…
🎯 تمرین شماره 13
در یک مطالعه فرضی، مشخص شده است که یک فیدر در دو حالت مختلف دارای شرایط زیر است:
حالت اول
حالت دوم
برنامهای بنویسید که:
☜ توان حالت اول و دوم را در دو Variable از نوع
☜ Loading هر دو حالت را در دو Variable جداگانه ذخیره کند.
☜ افزایش توان بین دو حالت را محاسبه کند.
☜ درصد افزایش توان را محاسبه کند.
☜ تغییر Loading را محاسبه کند.
☜ تمام نتایج را با تعداد مناسب ارقام اعشار نمایش دهد.
💡 دقت کنید
این بار هدف فقط نمایش مقادیر نیست؛ باید از
#تمرین_سطح_1
#تمرین
در یک مطالعه فرضی، مشخص شده است که یک فیدر در دو حالت مختلف دارای شرایط زیر است:
حالت اول
Power = 72.5 MW
Loading = 68.4 %
حالت دوم
Power = 91.8 MW
Loading = 86.7 %
برنامهای بنویسید که:
☜ توان حالت اول و دوم را در دو Variable از نوع
double ذخیره کند.☜ Loading هر دو حالت را در دو Variable جداگانه ذخیره کند.
☜ افزایش توان بین دو حالت را محاسبه کند.
☜ درصد افزایش توان را محاسبه کند.
☜ تغییر Loading را محاسبه کند.
☜ تمام نتایج را با تعداد مناسب ارقام اعشار نمایش دهد.
💡 دقت کنید
این بار هدف فقط نمایش مقادیر نیست؛ باید از
double برای انجام محاسبات واقعی بین دو حالت استفاده کنید.#تمرین_سطح_1
#تمرین
🔰 سطح 1 - بخش 14 🔰
📌 String در DPL
در پستهای قبلی با
تا اینجا بیشتر با اعداد و محاسبات کار کردیم؛ اما در PowerFactory دائماً با اطلاعات متنی هم سروکار داریم:
نام خط
نام باس
نام پست
نام ترانسفورماتور
نام Study Case
نام سناریو
پیامهای گزارش
متنهای خروجی
برای نگهداری این نوع اطلاعات از String استفاده میکنیم.
🔹 String چیست؟
مثلاً:
یک Variable از نوع String به این شکل تعریف میشود:
خروجی:
🔹 تعریف String
ساختار کلی:
مثلاً:
خروجی:
🔹 متن در String چگونه نوشته میشود؟
در مثالهای DPL، متن را داخل کوتیشن قرار میدهیم:
مثلاً:
نکته مهم این است که:
یک عدد است، ولی:
یک String است.
🔹 3. تفاوت Number و String
این تفاوت در PowerFactory بسیار مهم است.
فرض کنید:
را داریم.
این یک مقدار عددی است و میتوانیم روی آن محاسبات انجام دهیم.
اما:
یک متن است.
نمیتوانیم آن را مستقیماً مانند یک عدد در محاسبات ریاضی استفاده کنیم.
مثلاً این دو مفهوم کاملاً متفاوتاند:
و:
اولی برای محاسبه مناسب است.
دومی برای نمایش و گزارش مناسب است.
🔹 String در نام تجهیزات
یکی از مهمترین کاربردهای String در DPL، کار با نام تجهیزات است.
فرض کنید نام یک خط را داریم:
میتوانیم آن را در یک Variable ذخیره کنیم:
خروجی:
این مفهوم بعداً زمانی که از Objectهای واقعی PowerFactory نام آنها را استخراج کنیم، اهمیت زیادی پیدا میکند.
🔹 ترکیب String با عدد
یکی از کاربردهای بسیار مهم String، ساخت گزارش است.
فرض کنید:
میخواهیم این دو را در یک پیام نمایش دهیم.
خروجی:
اینجا سه مفهوم با هم ترکیب شدهاند:
این الگو در گزارشهای DPL بسیار پرکاربرد خواهد بود.
#سطح_1
#DIgSILENT #PowerFactory #DPL #PowerSystems #مهندسی_برق
✅ @PowerFactoryDIgSILENT
📌 String در DPL
در پستهای قبلی با
int و double آشنا شدیم.تا اینجا بیشتر با اعداد و محاسبات کار کردیم؛ اما در PowerFactory دائماً با اطلاعات متنی هم سروکار داریم:
نام خط
نام باس
نام پست
نام ترانسفورماتور
نام Study Case
نام سناریو
پیامهای گزارش
متنهای خروجی
برای نگهداری این نوع اطلاعات از String استفاده میکنیم.
🔹 String چیست؟
String برای نگهداری دادههای متنی استفاده میشود.مثلاً:
Line_230kV_01
Bus_230_05
Substation_A
Base Case
Peak Load
یک Variable از نوع String به این شکل تعریف میشود:
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
string lineName;
lineName = 'Line_230kV_01';
printf('Line Name = %s', lineName);
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
خروجی:
Line Name = Line_230kV_01
🔹 تعریف String
ساختار کلی:
string VariableName;
مثلاً:
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
string substationName;
string studyCaseName;
substationName = 'Substation_A';
studyCaseName = 'Peak_Load';
printf('Substation = %s', substationName);
printf('Study Case = %s', studyCaseName);
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
خروجی:
Substation = Substation_A
Study Case = Peak_Load
🔹 متن در String چگونه نوشته میشود؟
در مثالهای DPL، متن را داخل کوتیشن قرار میدهیم:
'Line_230kV_01'
مثلاً:
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
string voltageLevel;
voltageLevel = '230 kV';
printf('Voltage Level = %s', voltageLevel);
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
نکته مهم این است که:
230
یک عدد است، ولی:
'230'
یک String است.
🔹 3. تفاوت Number و String
این تفاوت در PowerFactory بسیار مهم است.
فرض کنید:
230
را داریم.
این یک مقدار عددی است و میتوانیم روی آن محاسبات انجام دهیم.
اما:
'230 kV'
یک متن است.
نمیتوانیم آن را مستقیماً مانند یک عدد در محاسبات ریاضی استفاده کنیم.
مثلاً این دو مفهوم کاملاً متفاوتاند:
voltage = 230
و:
voltageText = '230 kV'
اولی برای محاسبه مناسب است.
دومی برای نمایش و گزارش مناسب است.
🔹 String در نام تجهیزات
یکی از مهمترین کاربردهای String در DPL، کار با نام تجهیزات است.
فرض کنید نام یک خط را داریم:
Line_400kV_North_01
میتوانیم آن را در یک Variable ذخیره کنیم:
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
string lineName;
lineName = 'Line_400kV_North_01';
printf('Equipment: %s', lineName);
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
خروجی:
Equipment: Line_400kV_North_01
این مفهوم بعداً زمانی که از Objectهای واقعی PowerFactory نام آنها را استخراج کنیم، اهمیت زیادی پیدا میکند.
🔹 ترکیب String با عدد
یکی از کاربردهای بسیار مهم String، ساخت گزارش است.
فرض کنید:
Line Name = Line_230kV_05
Loading = 108.35 %
میخواهیم این دو را در یک پیام نمایش دهیم.
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
string lineName;
double loading;
lineName = 'Line_230kV_05';
loading = 108.35;
printf('Line %s has a loading of %.2f %%', lineName, loading);
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
خروجی:
Line Line_230kV_05 has a loading of 108.35 %
اینجا سه مفهوم با هم ترکیب شدهاند:
String
+
Double
+
printf
این الگو در گزارشهای DPL بسیار پرکاربرد خواهد بود.
#سطح_1
#DIgSILENT #PowerFactory #DPL #PowerSystems #مهندسی_برق
✅ @PowerFactoryDIgSILENT
𝐏𝐨𝐰𝐞𝐫𝐅𝐚𝐜𝐭𝐨𝐫𝐲 𝐃𝐈𝐠𝐒𝐈𝐋𝐄𝐍𝐓 | آموزش نرم افزار دیگسایلنت پاورفکتوری
🔰 سطح 1 - بخش 14 🔰 📌 String در DPL در پستهای قبلی با int و double آشنا شدیم. تا اینجا بیشتر با اعداد و محاسبات کار کردیم؛ اما در PowerFactory دائماً با اطلاعات متنی هم سروکار داریم: نام خط نام باس نام پست نام ترانسفورماتور نام Study Case نام سناریو پیامهای…
🔰 ادامه سطح 1 - بخش 14 🔰
🔹 ساخت پیامهای خوانا
فرض کنید میخواهیم وضعیت یک تجهیز را گزارش کنیم:
میتوانیم نام تجهیز را در یک String نگهداری کنیم:
این روش باعث میشود Script ما بتواند برای تجهیزات مختلف، پیامهای متفاوت و خوانا تولید کند.
🔹 چند String در یک برنامه
میتوانیم چند Variable از نوع String داشته باشیم.
مثلاً:
خروجی:
چنین ساختاری بعدها برای گزارشگیری خودکار بسیار مفید خواهد بود.
🔹 ترکیب چند String
گاهی میخواهیم چند قطعه متن را به یک متن تبدیل کنیم.
مثلاً:
و به یک متن مانند:
برسیم.
در DPL برای کار با Stringها توابع و امکانات مختلفی وجود دارد که در بخش مربوط به String Operations بهصورت دقیق بررسی خواهیم کرد.
نکته مهم این است که فعلاً مفهوم را در ذهن داشته باشید:
🔹 String و گزارش تجهیزات
فرض کنید در آینده یک Script داریم که خطوط دارای Overload را پیدا میکند.
برای هر خط میتوانیم اطلاعاتی مانند:
را در گزارش قرار دهیم.
مثلاً خروجی:
در اینجا:
یعنی String بخش مهمی از سیستم گزارشگیری ما خواهد بود.
🔥 10. یک مثال واقعیتر
فرض کنید اطلاعات یک تجهیز به این صورت است:
میتوانیم اطلاعات متنی و عددی را کنار هم قرار دهیم:
خروجی:
این دقیقاً شبیه ساختار اطلاعاتی است که در پروژههای واقعی DPL با آن کار خواهیم کرد.
#سطح_1
#DIgSILENT #PowerFactory #DPL #PowerSystems #مهندسی_برق
✅ @PowerFactoryDIgSILENT
🔹 ساخت پیامهای خوانا
فرض کنید میخواهیم وضعیت یک تجهیز را گزارش کنیم:
Transformer TR_63_20_01 is overloaded.
میتوانیم نام تجهیز را در یک String نگهداری کنیم:
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
string transformerName;
transformerName = 'TR_63_20_01';
printf('Transformer %s is overloaded.', transformerName);
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
این روش باعث میشود Script ما بتواند برای تجهیزات مختلف، پیامهای متفاوت و خوانا تولید کند.
🔹 چند String در یک برنامه
میتوانیم چند Variable از نوع String داشته باشیم.
مثلاً:
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
string region;
string substation;
string voltageLevel;
string studyCase;
region = 'North';
substation = 'Substation_01';
voltageLevel = '230 kV';
studyCase = 'Peak_Load';
printf('Region : %s', region);
printf('Substation : %s', substation);
printf('Voltage Level: %s', voltageLevel);
printf('Study Case : %s', studyCase);
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
خروجی:
Region : North
Substation : Substation_01
Voltage Level: 230 kV
Study Case : Peak_Load
چنین ساختاری بعدها برای گزارشگیری خودکار بسیار مفید خواهد بود.
🔹 ترکیب چند String
گاهی میخواهیم چند قطعه متن را به یک متن تبدیل کنیم.
مثلاً:
North
+
Substation_01
+
230 kV
و به یک متن مانند:
North - Substation_01 - 230 kV
برسیم.
در DPL برای کار با Stringها توابع و امکانات مختلفی وجود دارد که در بخش مربوط به String Operations بهصورت دقیق بررسی خواهیم کرد.
نکته مهم این است که فعلاً مفهوم را در ذهن داشته باشید:
String 1 + String 2
↓
String جدید
🔹 String و گزارش تجهیزات
فرض کنید در آینده یک Script داریم که خطوط دارای Overload را پیدا میکند.
برای هر خط میتوانیم اطلاعاتی مانند:
Line Name
Loading
Status
را در گزارش قرار دهیم.
مثلاً خروجی:
Line_230_01 | 104.52 % | OVERLOADED
Line_230_07 | 112.35 % | OVERLOADED
Line_400_02 | 101.18 % | OVERLOADED
در اینجا:
Line Name → String
Loading → Double
Status → String
یعنی String بخش مهمی از سیستم گزارشگیری ما خواهد بود.
🔥 10. یک مثال واقعیتر
فرض کنید اطلاعات یک تجهیز به این صورت است:
Equipment Name = TR_230_63_01
Type = Transformer
Voltage Level = 230 kV / 63 kV
Loading = 96.75 %
میتوانیم اطلاعات متنی و عددی را کنار هم قرار دهیم:
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
string equipmentName;
string equipmentType;
string voltageLevel;
double loading;
equipmentName = 'TR_230_63_01';
equipmentType = 'Transformer';
voltageLevel = '230 kV / 63 kV';
loading = 96.75;
printf('Equipment : %s', equipmentName);
printf('Type : %s', equipmentType);
printf('Voltage : %s', voltageLevel);
printf('Loading : %.2f %%', loading);
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
خروجی:
Equipment : TR_230_63_01
Type : Transformer
Voltage : 230 kV / 63 kV
Loading : 96.75 %
این دقیقاً شبیه ساختار اطلاعاتی است که در پروژههای واقعی DPL با آن کار خواهیم کرد.
#سطح_1
#DIgSILENT #PowerFactory #DPL #PowerSystems #مهندسی_برق
✅ @PowerFactoryDIgSILENT
𝐏𝐨𝐰𝐞𝐫𝐅𝐚𝐜𝐭𝐨𝐫𝐲 𝐃𝐈𝐠𝐒𝐈𝐋𝐄𝐍𝐓 | آموزش نرم افزار دیگسایلنت پاورفکتوری
🔰 ادامه سطح 1 - بخش 14 🔰 🔹 ساخت پیامهای خوانا فرض کنید میخواهیم وضعیت یک تجهیز را گزارش کنیم: Transformer TR_63_20_01 is overloaded. میتوانیم نام تجهیز را در یک String نگهداری کنیم: ! =================================== ! ✅ Telegram: @PowerFactoryDIgSILENT…
🔰 ادامه سطح 1 - بخش 14 🔰
🔹 String و Objectهای PowerFactory
یکی از کاربردهای مهم String این است که بتوانیم اطلاعات متنی مربوط به Objectها را ذخیره یا نمایش دهیم.
در PowerFactory یک Object مانند یک خط، ترانس یا Bus دارای اطلاعاتی مانند نام است.
بهصورت مفهومی:
مثلاً:
در بخش Object و Attribute یاد خواهیم گرفت که چگونه این اطلاعات را از Objectهای واقعی PowerFactory دریافت کنیم.
🔹 String برای ساخت عنوان گزارش
فرض کنید Script ما قرار است نتایج یک Study Case را گزارش کند.
میتوانیم عنوان گزارش را در یک String نگهداری کنیم:
خروجی:
این مفهوم در پروژههای گزارشگیری پیشرفته بسیار کاربردی خواهد بود.
⚠️ String را با Object اشتباه نگیرید
این دو یکی نیستند:
و:
اولی:
است و فقط متن نام خط را نگهداری میکند.
دومی:
است و به خود Object موجود در PowerFactory اشاره میکند.
به زبان ساده:
این تفاوت زمانی که وارد بخش Objectهای PowerFactory شویم بسیار مهم خواهد شد.
🔹 String و Objectهای PowerFactory
یکی از کاربردهای مهم String این است که بتوانیم اطلاعات متنی مربوط به Objectها را ذخیره یا نمایش دهیم.
در PowerFactory یک Object مانند یک خط، ترانس یا Bus دارای اطلاعاتی مانند نام است.
بهصورت مفهومی:
PowerFactory Object
↓
Name
↓
String
مثلاً:
ElmLne
↓
Line_230kV_01
↓
String
در بخش Object و Attribute یاد خواهیم گرفت که چگونه این اطلاعات را از Objectهای واقعی PowerFactory دریافت کنیم.
🔹 String برای ساخت عنوان گزارش
فرض کنید Script ما قرار است نتایج یک Study Case را گزارش کند.
میتوانیم عنوان گزارش را در یک String نگهداری کنیم:
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
string reportTitle;
reportTitle = 'Load Flow Analysis - Peak Load';
printf('====================================');
printf('%s', reportTitle);
printf('====================================');
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
خروجی:
====================================
Load Flow Analysis - Peak Load
====================================
این مفهوم در پروژههای گزارشگیری پیشرفته بسیار کاربردی خواهد بود.
⚠️ String را با Object اشتباه نگیرید
این دو یکی نیستند:
'Line_230kV_01'
و:
Line Object
اولی:
String
است و فقط متن نام خط را نگهداری میکند.
دومی:
Object
است و به خود Object موجود در PowerFactory اشاره میکند.
به زبان ساده:
String
↓
"نام خط چیست؟"
Object
↓
"خود خط کدام است؟"
این تفاوت زمانی که وارد بخش Objectهای PowerFactory شویم بسیار مهم خواهد شد.
𝐏𝐨𝐰𝐞𝐫𝐅𝐚𝐜𝐭𝐨𝐫𝐲 𝐃𝐈𝐠𝐒𝐈𝐋𝐄𝐍𝐓 | آموزش نرم افزار دیگسایلنت پاورفکتوری
🔰 ادامه سطح 1 - بخش 14 🔰 🔹 String و Objectهای PowerFactory یکی از کاربردهای مهم String این است که بتوانیم اطلاعات متنی مربوط به Objectها را ذخیره یا نمایش دهیم. در PowerFactory یک Object مانند یک خط، ترانس یا Bus دارای اطلاعاتی مانند نام است. بهصورت مفهومی:…
🎯 تمرین شماره 14
فرض کنید در یک پروژه سه ناحیه داریم:
و میخواهیم برای یک گزارش، اطلاعات زیر را نگهداری کنیم:
☜ نام ناحیه
☜ نام پست
☜ سطح ولتاژ
☜ نام Study Case
☜ نوع تجهیز
برنامهای بنویسید که این اطلاعات را در ۵ Variable از نوع String ذخیره کند و سپس یک گزارش خوانا با
اما یک شرط مهم دارد:
مثلاً میتوانید یک پست 132 کیلوولت در ناحیهای فرضی انتخاب کنید.
👈 هدف تمرین
تمرکز این تمرین روی این چهار موضوع است:
#تمرین_سطح_1
#تمرین
فرض کنید در یک پروژه سه ناحیه داریم:
North
Center
South
و میخواهیم برای یک گزارش، اطلاعات زیر را نگهداری کنیم:
☜ نام ناحیه
☜ نام پست
☜ سطح ولتاژ
☜ نام Study Case
☜ نوع تجهیز
برنامهای بنویسید که این اطلاعات را در ۵ Variable از نوع String ذخیره کند و سپس یک گزارش خوانا با
printf تولید کند.اما یک شرط مهم دارد:
🔸 مقادیر تمرین را خودتان انتخاب کنید و از مقادیر مثالهای این پست استفاده نکنید.
مثلاً میتوانید یک پست 132 کیلوولت در ناحیهای فرضی انتخاب کنید.
👈 هدف تمرین
تمرکز این تمرین روی این چهار موضوع است:
String Definition
↓
Assignment
↓
Multiple Strings
↓
Formatted Output
#تمرین_سطح_1
#تمرین
بچهها اگر پیشنهادی دارید در مورد مطالب و روند کانال بگین
@ElectricalDocumentAdmin
اگر هم میتونید در تولید محتوا کمک ما کنید، بگین.
@ElectricalDocumentAdmin
اگر هم میتونید در تولید محتوا کمک ما کنید، بگین.
نگین کم کار شدیما 😅
سرمون به شدت شلوغه برای دوتا کانال جدید دیگه 😎
البته حواسمون به این سمت هم هست 😉
سرمون به شدت شلوغه برای دوتا کانال جدید دیگه 😎
البته حواسمون به این سمت هم هست 😉
🔰 سطح 1 - بخش 15 🔰
📌 Set در DPL
در PowerFactory تقریباً هیچ پروژه اتوماسیونی را نمیتوان بدون کار با مجموعهای از Objectها انجام داد.
فرض کنید میخواهیم:
☜ تمام خطوط شبکه را پیدا کنیم.
☜ تمام ترانسفورماتورها را بررسی کنیم.
☜ همه Busها را پیمایش کنیم.
☜ تجهیزات یک Substation را پردازش کنیم.
☜ روی چند صد یا چند هزار Object یک عملیات انجام دهیم.
در این شرایط نمیتوانیم برای هر Object یک Variable جداگانه تعریف کنیم.
اینجاست که Set وارد میشود.
🔹 Set چیست؟
در DPL، یک
بهصورت مفهومی:
بنابراین:
مثلاً:
میتوانند اعضای یک Set باشند.
🔹 تعریف Set
در DPL یک Set را با
در این مرحله فقط یک Variable به نام
🔹 چرا Set مهم است؟
فرض کنید در یک شبکه 500 خط داریم.
روش اشتباه این است که بخواهیم چیزی شبیه این داشته باشیم:
این روش اصلاً برای Automation مناسب نیست.
بهتر است:
یعنی یک Set داشته باشیم که تمام خطوط موردنظر داخل آن قرار گرفته باشند.
🔹 Set و Object چه تفاوتی دارند؟
این دو مفهوم را باید کاملاً از هم جدا کنیم.
👈 Object
یک تجهیز مشخص:
👈 Set
مجموعهای از تجهیزات:
بهصورت مفهومی:
🔹 پیدا کردن مجموعهای از تجهیزات
یکی از مهمترین کاربردهای Set در DPL، دریافت مجموعهای از Objectها از PowerFactory است.
مثلاً میتوانیم مجموعهای از خطوط شبکه را دریافت کنیم.
اینجا:
یعنی Objectهای کلاس
نتیجه جستجو در:
قرار میگیرد.
🔹 ()Count چیست؟
وقتی چند Object داخل یک Set داریم، یکی از اطلاعاتی که معمولاً به آن نیاز داریم، تعداد Objectها است.
برای این کار میتوانیم از:
استفاده کنیم.
مثلاً:
اگر 127 خط پیدا شده باشد:
🔹 پیمایش اعضای Set
حالا قسمت مهمتر شروع میشود.
فرض کنید 127 خط داریم.
میخواهیم تکتک آنها را بررسی کنیم.
اینجا از Loop استفاده میکنیم.
ساختار مفهومی:
برای این کار یک Variable از نوع
مثلاً:
اینجا چند مفهوم مهم را همزمان میبینیم:
و این دقیقاً همان الگویی است که بعدها برای پردازش تعداد زیادی تجهیز در PowerFactory استفاده خواهیم کرد.
🔹 First() و Next()
در پیمایش Set:
اولین Object مجموعه را در اختیار ما قرار میدهد.
سپس:
به Object بعدی میرود.
مثلاً:
به همین دلیل میتوانیم تمام اعضای Set را یکییکی پردازش کنیم.
#سطح_1
#DIgSILENT #PowerFactory #DPL #PowerSystems #مهندسی_برق
✅ @PowerFactoryDIgSILENT
📌 Set در DPL
در PowerFactory تقریباً هیچ پروژه اتوماسیونی را نمیتوان بدون کار با مجموعهای از Objectها انجام داد.
فرض کنید میخواهیم:
☜ تمام خطوط شبکه را پیدا کنیم.
☜ تمام ترانسفورماتورها را بررسی کنیم.
☜ همه Busها را پیمایش کنیم.
☜ تجهیزات یک Substation را پردازش کنیم.
☜ روی چند صد یا چند هزار Object یک عملیات انجام دهیم.
در این شرایط نمیتوانیم برای هر Object یک Variable جداگانه تعریف کنیم.
اینجاست که Set وارد میشود.
🔹 Set چیست؟
در DPL، یک
set برای نگهداری مجموعهای از Objectها استفاده میشود.بهصورت مفهومی:
Set
│
├── Line 1
├── Line 2
├── Line 3
└── Line 4
بنابراین:
Object → یک تجهیز
Set → مجموعهای از تجهیزات
مثلاً:
Line_01
Line_02
Line_03
Line_04
میتوانند اعضای یک Set باشند.
🔹 تعریف Set
در DPL یک Set را با
set تعریف میکنیم:! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
set Lines;
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
در این مرحله فقط یک Variable به نام
Lines ساختهایم که قرار است مجموعهای از Objectها را نگهداری کند.🔹 چرا Set مهم است؟
فرض کنید در یک شبکه 500 خط داریم.
روش اشتباه این است که بخواهیم چیزی شبیه این داشته باشیم:
Line1
Line2
Line3
...
Line500
این روش اصلاً برای Automation مناسب نیست.
بهتر است:
500 Line Objects
↓
Set
↓
پردازش با Loop
یعنی یک Set داشته باشیم که تمام خطوط موردنظر داخل آن قرار گرفته باشند.
🔹 Set و Object چه تفاوتی دارند؟
این دو مفهوم را باید کاملاً از هم جدا کنیم.
👈 Object
یک تجهیز مشخص:
Line_230_01
👈 Set
مجموعهای از تجهیزات:
Line_230_01
Line_230_02
Line_230_03
بهصورت مفهومی:
Object
↓
یک تجهیز
Set
↓
چند Object
🔹 پیدا کردن مجموعهای از تجهیزات
یکی از مهمترین کاربردهای Set در DPL، دریافت مجموعهای از Objectها از PowerFactory است.
مثلاً میتوانیم مجموعهای از خطوط شبکه را دریافت کنیم.
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
set Lines;
Lines = GetCalcRelevantObjects('*.ElmLne');
printf('Number of lines = %d', Lines.Count());
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
اینجا:
*.ElmLne
یعنی Objectهای کلاس
ElmLne را جستجو کن.نتیجه جستجو در:
Lines
قرار میگیرد.
🔹 ()Count چیست؟
وقتی چند Object داخل یک Set داریم، یکی از اطلاعاتی که معمولاً به آن نیاز داریم، تعداد Objectها است.
برای این کار میتوانیم از:
Count()
استفاده کنیم.
مثلاً:
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
set Lines;
Lines = GetCalcRelevantObjects('*.ElmLne');
printf('Total Lines = %d', Lines.Count());
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
اگر 127 خط پیدا شده باشد:
Total Lines = 127
🔹 پیمایش اعضای Set
حالا قسمت مهمتر شروع میشود.
فرض کنید 127 خط داریم.
میخواهیم تکتک آنها را بررسی کنیم.
اینجا از Loop استفاده میکنیم.
ساختار مفهومی:
Set
↓
Line 1
↓
Line 2
↓
Line 3
↓
...
↓
Line 127
برای این کار یک Variable از نوع
object بهعنوان اشارهگر به Object فعلی نیاز داریم.مثلاً:
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
set Lines;
object Line;
Lines = GetCalcRelevantObjects('*.ElmLne');
for (Line = Lines.First(); Line; Line = Lines.Next())
{
printf('%s', Line.loc_name);
}
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
اینجا چند مفهوم مهم را همزمان میبینیم:
Set
↓
First()
↓
Object
↓
Next()
↓
Object بعدی
و این دقیقاً همان الگویی است که بعدها برای پردازش تعداد زیادی تجهیز در PowerFactory استفاده خواهیم کرد.
🔹 First() و Next()
در پیمایش Set:
First()
اولین Object مجموعه را در اختیار ما قرار میدهد.
سپس:
Next()
به Object بعدی میرود.
مثلاً:
Set
│
├── Line_01 ← First()
├── Line_02 ← Next()
└── Line_03 ← Next()
به همین دلیل میتوانیم تمام اعضای Set را یکییکی پردازش کنیم.
#سطح_1
#DIgSILENT #PowerFactory #DPL #PowerSystems #مهندسی_برق
✅ @PowerFactoryDIgSILENT
𝐏𝐨𝐰𝐞𝐫𝐅𝐚𝐜𝐭𝐨𝐫𝐲 𝐃𝐈𝐠𝐒𝐈𝐋𝐄𝐍𝐓 | آموزش نرم افزار دیگسایلنت پاورفکتوری
🔰 سطح 1 - بخش 15 🔰 📌 Set در DPL در PowerFactory تقریباً هیچ پروژه اتوماسیونی را نمیتوان بدون کار با مجموعهای از Objectها انجام داد. فرض کنید میخواهیم: ☜ تمام خطوط شبکه را پیدا کنیم. ☜ تمام ترانسفورماتورها را بررسی کنیم. ☜ همه Busها را پیمایش کنیم. ☜…
🔰 ادامه سطح 1 - بخش 15 🔰
🔹 یک مثال واقعیتر
فرض کنید میخواهیم نام تمام خطوط شبکه را چاپ کنیم:
اگر شبکه شامل این خطوط باشد:
خروجی چیزی شبیه این خواهد بود:
🔥 Set فقط برای خطوط نیست
Set میتواند مجموعهای از انواع مختلف Objectهای PowerFactory را نگهداری کند.
مثلاً:
خطوط
ترانسفورماتورها
Busها
ژنراتورها
بارها
البته انتخاب دقیق Class به نوع تجهیز و ساختار مدل PowerFactory بستگی دارد.
🔹 Set و تحلیل سیستم قدرت
فرض کنید میخواهیم تمام خطوط را بررسی کنیم و Loading آنها را بخوانیم.
منطق کلی:
در نتیجه Set تبدیل میشود به نقطه شروع بسیاری از Scriptهای تحلیلی.
مثلاً:
🔹 Set خالی
ممکن است جستجو هیچ Objectای پیدا نکند.
مثلاً:
این وضعیت باید در Scriptهای حرفهای مدیریت شود.
مثلاً قبل از پردازش، تعداد اعضا را بررسی کنیم:
این کار از بروز بسیاری از خطاهای منطقی در Script جلوگیری میکند.
⚠️ یک نکته بسیار مهم
Set خودش تجهیز نیست.
مثلاً:
یک Set است.
اما:
یک Object است.
پس نمیتوانیم Attributeهایی مثل:
را مستقیماً از خود Set بخوانیم.
ابتدا باید یک Object از Set بگیریم:
مثلاً:
🔥 Set + Object + Attribute
این سه مفهوم از پایههای DPL هستند.
مثلاً:
در این Script
مجموعه خطوط
خط فعلی
نام خط فعلی
این الگو را به خاطر بسپارید:
بعدها تقریباً تمام Automationهای PowerFactory را بر اساس همین منطق توسعه خواهیم داد.
🔹 Set و حجم بالای تجهیزات
فرض کنید یک شبکه داریم با:
ما نمیخواهیم برای هر Object یک Variable جداگانه بسازیم.
بلکه:
سپس با Loop روی هر Set عملیات موردنظر را انجام میدهیم.
این یکی از دلایل اصلی اهمیت Set در پروژههای بزرگ PowerFactory است.
🧠 جمعبندی
در این پست یاد گرفتیم:
☜
☜ یک Set میتواند تعداد زیادی Object داشته باشد.
☜ میتوان مجموعه تجهیزات را با توابع جستجو دریافت کرد.
☜
☜ با
☜ برای پردازش Objectهای داخل Set از Loop استفاده میکنیم.
☜ Set با Object تفاوت دارد.
برای دسترسی به Attribute باید از Object موجود در Set استفاده کنیم.
⭐️ الگوی طلایی این بخش
این الگو یکی از مهمترین پایههای برنامهنویسی DPL در PowerFactory است.
#سطح_1
#DIgSILENT #PowerFactory #DPL #PowerSystems #مهندسی_برق
✅ @PowerFactoryDIgSILENT
🔹 یک مثال واقعیتر
فرض کنید میخواهیم نام تمام خطوط شبکه را چاپ کنیم:
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
set Lines;
object Line;
Lines = GetCalcRelevantObjects('*.ElmLne');
for (Line = Lines.First(); Line; Line = Lines.Next())
{
printf('Line: %s', Line.loc_name);
}
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
اگر شبکه شامل این خطوط باشد:
Line_North_01
Line_North_02
Line_Center_05
Line_South_03
خروجی چیزی شبیه این خواهد بود:
Line: Line_North_01
Line: Line_North_02
Line: Line_Center_05
Line: Line_South_03
🔥 Set فقط برای خطوط نیست
Set میتواند مجموعهای از انواع مختلف Objectهای PowerFactory را نگهداری کند.
مثلاً:
خطوط
*.ElmLne
ترانسفورماتورها
*.ElmTr2
Busها
*.ElmTerm
ژنراتورها
*.ElmSym
بارها
*.ElmLod
البته انتخاب دقیق Class به نوع تجهیز و ساختار مدل PowerFactory بستگی دارد.
🔹 Set و تحلیل سیستم قدرت
فرض کنید میخواهیم تمام خطوط را بررسی کنیم و Loading آنها را بخوانیم.
منطق کلی:
GetCalcRelevantObjects
↓
Set Lines
↓
Loop
↓
Current Line
↓
Read Attribute
↓
Loading
در نتیجه Set تبدیل میشود به نقطه شروع بسیاری از Scriptهای تحلیلی.
مثلاً:
تمام خطوط
↓
Set
↓
Load Flow
↓
خواندن Loading
↓
پیدا کردن خطوط Overloaded
🔹 Set خالی
ممکن است جستجو هیچ Objectای پیدا نکند.
مثلاً:
Set
↓
هیچ Objectی وجود ندارد
این وضعیت باید در Scriptهای حرفهای مدیریت شود.
مثلاً قبل از پردازش، تعداد اعضا را بررسی کنیم:
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
set Lines;
Lines = GetCalcRelevantObjects('*.ElmLne');
if (Lines.Count() == 0)
{
printf('No lines were found.');
}
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
این کار از بروز بسیاری از خطاهای منطقی در Script جلوگیری میکند.
⚠️ یک نکته بسیار مهم
Set خودش تجهیز نیست.
مثلاً:
Lines
یک Set است.
اما:
Line_230_01
یک Object است.
پس نمیتوانیم Attributeهایی مثل:
loc_name
uknom
loading
را مستقیماً از خود Set بخوانیم.
ابتدا باید یک Object از Set بگیریم:
Set
↓
Object
↓
Attribute
مثلاً:
Lines
↓
Line
↓
Line.loc_name
🔥 Set + Object + Attribute
این سه مفهوم از پایههای DPL هستند.
مثلاً:
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
set Lines;
object Line;
Lines = GetCalcRelevantObjects('*.ElmLne');
for (Line = Lines.First(); Line; Line = Lines.Next())
{
printf('Name = %s', Line.loc_name);
}
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
در این Script
Linesمجموعه خطوط
Lineخط فعلی
Line.loc_nameنام خط فعلی
این الگو را به خاطر بسپارید:
SET
↓
OBJECT
↓
ATTRIBUTE
بعدها تقریباً تمام Automationهای PowerFactory را بر اساس همین منطق توسعه خواهیم داد.
🔹 Set و حجم بالای تجهیزات
فرض کنید یک شبکه داریم با:
5,000 Line
2,000 Transformer
8,000 Load
1,500 Generator
ما نمیخواهیم برای هر Object یک Variable جداگانه بسازیم.
بلکه:
5,000 Lines
↓
Set Lines
2,000 Transformers
↓
Set Transformers
8,000 Loads
↓
Set Loads
سپس با Loop روی هر Set عملیات موردنظر را انجام میدهیم.
این یکی از دلایل اصلی اهمیت Set در پروژههای بزرگ PowerFactory است.
🧠 جمعبندی
در این پست یاد گرفتیم:
☜
Set برای نگهداری مجموعهای از Objectها استفاده میشود.☜ یک Set میتواند تعداد زیادی Object داشته باشد.
☜ میتوان مجموعه تجهیزات را با توابع جستجو دریافت کرد.
☜
()Count تعداد اعضای Set را مشخص میکند.☜ با
()First و ()Next میتوان اعضای Set را پیمایش کرد.☜ برای پردازش Objectهای داخل Set از Loop استفاده میکنیم.
☜ Set با Object تفاوت دارد.
برای دسترسی به Attribute باید از Object موجود در Set استفاده کنیم.
⭐️ الگوی طلایی این بخش
Search
↓
Set
↓
Object
↓
Attribute
↓
Process
این الگو یکی از مهمترین پایههای برنامهنویسی DPL در PowerFactory است.
#سطح_1
#DIgSILENT #PowerFactory #DPL #PowerSystems #مهندسی_برق
✅ @PowerFactoryDIgSILENT