𝐏𝐨𝐰𝐞𝐫𝐅𝐚𝐜𝐭𝐨𝐫𝐲 𝐃𝐈𝐠𝐒𝐈𝐋𝐄𝐍𝐓 | آموزش نرم افزار دیگسایلنت پاورفکتوری
🔰 سطح 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
𝐏𝐨𝐰𝐞𝐫𝐅𝐚𝐜𝐭𝐨𝐫𝐲 𝐃𝐈𝐠𝐒𝐈𝐋𝐄𝐍𝐓 | آموزش نرم افزار دیگسایلنت پاورفکتوری
🔰 ادامه سطح 1 - بخش 15 🔰 🔹 یک مثال واقعیتر فرض کنید میخواهیم نام تمام خطوط شبکه را چاپ کنیم: ! =================================== ! ✅ Telegram: @PowerFactoryDIgSILENT ! =================================== set Lines; object Line; Lines = GetCalcRelev…
🎯 تمرین شماره 15
بدون استفاده از مثال خطوط این پست، یک Script بنویسید که:
مجموعهای از ترانسفورماتورهای دو سیمپیچه را پیدا کند.
تعداد آنها را نمایش دهد.
با استفاده از
نام هر ترانسفورماتور را چاپ کند.
🎯 نکته
این بار فقط کد را کپی نکنید.
خودتان این زنجیره را بسازید:
#تمرین_سطح_1
#تمرین
بدون استفاده از مثال خطوط این پست، یک Script بنویسید که:
مجموعهای از ترانسفورماتورهای دو سیمپیچه را پیدا کند.
تعداد آنها را نمایش دهد.
با استفاده از
First() و Next() روی آنها پیمایش کند.نام هر ترانسفورماتور را چاپ کند.
🎯 نکته
این بار فقط کد را کپی نکنید.
خودتان این زنجیره را بسازید:
Transformer Objects
↓
Set
↓
Count
↓
Loop
↓
Current Object
↓
loc_name
#تمرین_سطح_1
#تمرین
🔰 سطح 1 - بخش 16 🔰
📌 توابع پایه ریاضی در DPL
در این بخش با اولین گروه از توابع ریاضی در DPL آشنا میشویم؛ توابعی که در پردازش نتایج، محاسبات مهندسی و اتوماسیون مطالعات سیستم قدرت بسیار کاربردی هستند.
👈 توابع این بخش
در این پیام، سه تابع اول را بررسی میکنیم:
1️⃣ ()abs — قدرمطلق
تابع
ورودی
خروجی
قدر مطلق مقدار
مثال ساده
خروجی:
⚡️ مثال سیستم قدرت
فرض کنید ولتاژ یک باس
نتیجه:
📌 نکته: اگر علامت اختلاف برای تحلیل مهم باشد، نباید از
2️⃣ ()ceil — گرد کردن به بالا
تابع
ورودی
خروجی
کوچکترین عدد صحیح بزرگتر یا مساوی
مثال ساده
نتیجه:
⚡️ مثال سیستم قدرت
فرض کنید بار یک پست
برای اینکه تعداد ترانسفورماتورها را به عدد صحیحی برسانیم که ظرفیت کل کمتر از بار نباشد:
نتیجه:
📌 چون 3 ترانس فقط
3️⃣ ()floor — گرد کردن به پایین
تابع
ورودی
خروجی
بزرگترین عدد صحیح کوچکتر یا مساوی
مثال ساده
نتیجه:
⚡️ مثال سیستم قدرت
فرض کنید ظرفیت هر واحد ترانسفورماتور
نتیجه:
🔎 تفاوت
برای مقدار
پس بهصورت ساده:
#سطح_1
#DIgSILENT #PowerFactory #DPL #PowerSystems #مهندسی_برق
✅ @PowerFactoryDIgSILENT
📌 توابع پایه ریاضی در DPL
در این بخش با اولین گروه از توابع ریاضی در DPL آشنا میشویم؛ توابعی که در پردازش نتایج، محاسبات مهندسی و اتوماسیون مطالعات سیستم قدرت بسیار کاربردی هستند.
👈 توابع این بخش
abs()ceil()floor()frac()max()min()modulo()round()trunc()در این پیام، سه تابع اول را بررسی میکنیم:
1️⃣ ()abs — قدرمطلق
تابع
()abs قدرمطلق یک مقدار را محاسبه میکند.ورودی
x → مقدار عددیخروجی
قدر مطلق مقدار
xمثال ساده
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
double x;
double result;
x = -15.7;
result = abs(x);
printf('Absolute value = %.2f', result);
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
خروجی:
15.70⚡️ مثال سیستم قدرت
فرض کنید ولتاژ یک باس
0.94 pu و ولتاژ مرجع 1.00 pu است و میخواهیم مقدار انحراف ولتاژ را بدون توجه به علامت محاسبه کنیم:! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
double U;
double Uref;
double deviation;
U = 0.94;
Uref = 1.00;
deviation = abs(U - Uref);
printf('Voltage deviation = %.3f pu', deviation);
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
نتیجه:
Voltage deviation = 0.060 pu
📌 نکته: اگر علامت اختلاف برای تحلیل مهم باشد، نباید از
abs() استفاده کنیم؛ زیرا علامت را حذف میکند.2️⃣ ()ceil — گرد کردن به بالا
تابع
()ceil کوچکترین عدد صحیح بزرگتر یا مساوی مقدار ورودی را برمیگرداند.ورودی
x → مقدار عددیخروجی
کوچکترین عدد صحیح بزرگتر یا مساوی
xمثال ساده
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
double x;
double result;
x = 4.2;
result = ceil(x);
printf('Result = %.0f', result);
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
نتیجه:
5
⚡️ مثال سیستم قدرت
فرض کنید بار یک پست
83MVA است و ظرفیت هر ترانسفورماتور 25MVA است.برای اینکه تعداد ترانسفورماتورها را به عدد صحیحی برسانیم که ظرفیت کل کمتر از بار نباشد:
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
double load;
double transformerCapacity;
double numberOfTransformers;
load = 83.0;
transformerCapacity = 25.0;
numberOfTransformers = ceil(load / transformerCapacity);
printf('Required transformers = %.0f',
numberOfTransformers);
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
نتیجه:
Required transformers = 4
📌 چون 3 ترانس فقط
75MVA ظرفیت ایجاد میکنند و برای 83MVA کافی نیستند.3️⃣ ()floor — گرد کردن به پایین
تابع
()floor بزرگترین عدد صحیح کوچکتر یا مساوی مقدار ورودی را برمیگرداند.ورودی
x → مقدار عددیخروجی
بزرگترین عدد صحیح کوچکتر یا مساوی
xمثال ساده
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
double x;
double result;
x = 4.8;
result = floor(x);
printf('Result = %.0f', result);
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
نتیجه:
4
⚡️ مثال سیستم قدرت
فرض کنید ظرفیت هر واحد ترانسفورماتور
25 MVA و بار 87 MVA است. اگر بخواهیم تعداد واحدهای کامل 25 مگاولتآمپری موجود در این مقدار را به دست آوریم:! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
double load;
double transformerCapacity;
double completeUnits;
load = 87.0;
transformerCapacity = 25.0;
completeUnits = floor(load / transformerCapacity);
printf('Complete units = %.0f',
completeUnits);
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
نتیجه:
Complete units = 3
🔎 تفاوت
()ceil و ()floorبرای مقدار
4.8:ceil(4.8) = 5
floor(4.8) = 4
پس بهصورت ساده:
ceil() → گرد کردن به سمت بالاfloor() → گرد کردن به سمت پایین#سطح_1
#DIgSILENT #PowerFactory #DPL #PowerSystems #مهندسی_برق
✅ @PowerFactoryDIgSILENT
𝐏𝐨𝐰𝐞𝐫𝐅𝐚𝐜𝐭𝐨𝐫𝐲 𝐃𝐈𝐠𝐒𝐈𝐋𝐄𝐍𝐓 | آموزش نرم افزار دیگسایلنت پاورفکتوری
🔰 سطح 1 - بخش 16 🔰 📌 توابع پایه ریاضی در DPL در این بخش با اولین گروه از توابع ریاضی در DPL آشنا میشویم؛ توابعی که در پردازش نتایج، محاسبات مهندسی و اتوماسیون مطالعات سیستم قدرت بسیار کاربردی هستند. 👈 توابع این بخش abs() ceil() floor() frac() max() min()…
🔰 ادامه سطح 1 - بخش 16 🔰
4️⃣ ()frac — بخش کسری
تابع
ورودی
خروجی
بخش کسری مقدار
مثال ساده
نتیجه مورد انتظار:
⚡️ مثال سیستم قدرت
فرض کنید یک محاسبه، تعداد تقریبی پلههای موردنیاز یک تجهیز را برابر
📌 نکته: در مستندات برخی نسخههای PowerFactory، توضیح خروجی
5️⃣ ()max — بیشینه دو مقدار
تابع
ورودی
خروجی
بزرگترِ
مثال ساده
نتیجه:
⚡️ مثال سیستم قدرت
فرض کنید جریان دو فیدر را از نتایج مطالعه داریم و میخواهیم بیشترین جریان را مشخص کنیم:
نتیجه:
📌 در یک اسکریپت واقعی DPL میتوان این منطق را روی نتایج چندین تجهیز اعمال کرد تا بیشترین جریان، بیشترین بارگذاری یا بیشترین انحراف ولتاژ شناسایی شود.
6️⃣ ()min — کمینه دو مقدار
تابع
ورودی
خروجی
کوچکترِ
مثال ساده
نتیجه:
⚡️ مثال سیستم قدرت
فرض کنید ولتاژ دو باس را داریم و میخواهیم پایینترین ولتاژ را مشخص کنیم:
نتیجه:
📌 این منطق در اسکریپتهای ارزیابی شبکه میتواند برای پیدا کردن ضعیفترین باس از نظر ولتاژ استفاده شود.
🧠 جمعبندی
استخراج بخش کسری
انتخاب مقدار بزرگتر
انتخاب مقدار کوچکتر
#سطح_1
#DIgSILENT #PowerFactory #DPL #PowerSystems #مهندسی_برق
✅ @PowerFactoryDIgSILENT
4️⃣ ()frac — بخش کسری
تابع
()frac برای بهدستآوردن بخش کسری یک مقدار استفاده میشود.ورودی
x → مقدار عددیخروجی
بخش کسری مقدار
xمثال ساده
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
double x;
double result;
x = 7.35;
result = frac(x);
printf('Fractional part = %.2f', result);
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
نتیجه مورد انتظار:
Fractional part = 0.35
⚡️ مثال سیستم قدرت
فرض کنید یک محاسبه، تعداد تقریبی پلههای موردنیاز یک تجهیز را برابر
6.35 نشان داده است. با ()frac میتوان بخش اعشاری این مقدار را جدا کرد:! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
double requiredSteps;
double fractionalPart;
requiredSteps = 6.35;
fractionalPart = frac(requiredSteps);
printf('Required steps = %.2f', requiredSteps);
printf('Fractional part = %.2f', fractionalPart);
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
📌 نکته: در مستندات برخی نسخههای PowerFactory، توضیح خروجی
()frac بهصورت ناسازگار با تعریف رایج این تابع درج شده است. بنابراین اگر در پروژه از این تابع استفاده میکنید، رفتار آن را در نسخه PowerFactory خودتان یکبار تست کنید.5️⃣ ()max — بیشینه دو مقدار
تابع
()max مقدار بزرگتر بین دو ورودی را برمیگرداند.ورودی
x → مقدار اولy → مقدار دومخروجی
بزرگترِ
x و yمثال ساده
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
double x;
double y;
double result;
x = 12.5;
y = 18.7;
result = max(x, y);
printf('Maximum = %.2f', result);
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
نتیجه:
Maximum = 18.70
⚡️ مثال سیستم قدرت
فرض کنید جریان دو فیدر را از نتایج مطالعه داریم و میخواهیم بیشترین جریان را مشخص کنیم:
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
double I1;
double I2;
double Imax;
I1 = 425.0;
I2 = 510.0;
Imax = max(I1, I2);
printf('Maximum feeder current = %.1f A', Imax);
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
نتیجه:
Maximum feeder current = 510.0 A
📌 در یک اسکریپت واقعی DPL میتوان این منطق را روی نتایج چندین تجهیز اعمال کرد تا بیشترین جریان، بیشترین بارگذاری یا بیشترین انحراف ولتاژ شناسایی شود.
6️⃣ ()min — کمینه دو مقدار
تابع
()min مقدار کوچکتر بین دو ورودی را برمیگرداند.ورودی
x → مقدار اولy → مقدار دومخروجی
کوچکترِ
x و yمثال ساده
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
double x;
double y;
double result;
x = 12.5;
y = 18.7;
result = min(x, y);
printf('Minimum = %.2f', result);
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
نتیجه:
Minimum = 12.50
⚡️ مثال سیستم قدرت
فرض کنید ولتاژ دو باس را داریم و میخواهیم پایینترین ولتاژ را مشخص کنیم:
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
double U1;
double U2;
double Umin;
U1 = 0.98;
U2 = 0.93;
Umin = min(U1, U2);
printf('Minimum voltage = %.3f pu', Umin);
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
نتیجه:
Minimum voltage = 0.930 pu
📌 این منطق در اسکریپتهای ارزیابی شبکه میتواند برای پیدا کردن ضعیفترین باس از نظر ولتاژ استفاده شود.
🧠 جمعبندی
frac(x)استخراج بخش کسری
max(x,y)انتخاب مقدار بزرگتر
min(x,y)انتخاب مقدار کوچکتر
#سطح_1
#DIgSILENT #PowerFactory #DPL #PowerSystems #مهندسی_برق
✅ @PowerFactoryDIgSILENT
𝐏𝐨𝐰𝐞𝐫𝐅𝐚𝐜𝐭𝐨𝐫𝐲 𝐃𝐈𝐠𝐒𝐈𝐋𝐄𝐍𝐓 | آموزش نرم افزار دیگسایلنت پاورفکتوری
🔰 ادامه سطح 1 - بخش 16 🔰 4️⃣ ()frac — بخش کسری تابع ()frac برای بهدستآوردن بخش کسری یک مقدار استفاده میشود. ورودی x → مقدار عددی خروجی بخش کسری مقدار x مثال ساده ! =================================== ! ✅ Telegram: @PowerFactoryDIgSILENT ! ==========…
🔰 ادامه سطح 1 - بخش 16 🔰
7️⃣ ()modulo — باقیمانده تقسیم
تابع
ورودی
خروجی
باقیمانده تقسیم
مثال ساده
خروجی:
⚡️ مثال سیستم قدرت
فرض کنید در یک مطالعه، 20 سناریوی مختلف داریم و میخواهیم بعد از هر 5 سناریو یک عملیات خاص انجام دهیم.
در این حالت، شرط برای سناریوهای زیر برقرار میشود:
📌 ()modulo در حلقهها برای ایجاد الگوهای تکرارشونده بسیار کاربردی است.
8️⃣ ()round — گرد کردن
تابع
ورودی
خروجی
نزدیکترین عدد صحیح به
مثال ساده
نتیجه:
⚡️ مثال سیستم قدرت
فرض کنید در یک محاسبه، تعداد تقریبی پلههای موردنیاز یک بانک خازنی
نتیجه:
⚠️ تفاوت با ()ceil
این دو تابع را با هم اشتباه نگیریم:
9️⃣ ()trunc — حذف بخش اعشاری
تابع
ورودی
خروجی
قسمت صحیح مقدار
مثال ساده
نتیجه:
⚡️ مثال سیستم قدرت
فرض کنید نسبت ظرفیت محاسبهشده برای چند واحد تجهیز برابر
نتیجه:
🔎 مقایسه سه تابع
اگر مقدار ورودی
گرد کردن به بالا
نزدیکترین عدد صحیح
حذف بخش اعشاری
🧠 جمعبندی بخش 16
در این بخش با 9 تابع پایه ریاضی DPL آشنا شدیم:
📌 این توابع از پایهایترین ابزارهای DPL برای انجام محاسبات و پردازش نتایج مطالعات سیستم قدرت هستند.
#سطح_1
#DIgSILENT #PowerFactory #DPL #PowerSystems #مهندسی_برق
✅ @PowerFactoryDIgSILENT
7️⃣ ()modulo — باقیمانده تقسیم
تابع
()modulo باقیمانده تقسیم یک عدد بر عدد دیگر را محاسبه میکند.ورودی
x → عدد اولy → عدد دوم یا مقسومعلیهخروجی
باقیمانده تقسیم
x بر yمثال ساده
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
double result;
result = modulo(17, 5);
printf('17 modulo 5 = %.0f', result);
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
خروجی:
17 modulo 5 = 2
⚡️ مثال سیستم قدرت
فرض کنید در یک مطالعه، 20 سناریوی مختلف داریم و میخواهیم بعد از هر 5 سناریو یک عملیات خاص انجام دهیم.
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
int i;
for (i = 1; i <= 20; i += 1) {
if (modulo(i, 5) == 0) {
printf('Checkpoint reached at scenario %d', i);
}
}
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
در این حالت، شرط برای سناریوهای زیر برقرار میشود:
5 → 10 → 15 → 20
📌 ()modulo در حلقهها برای ایجاد الگوهای تکرارشونده بسیار کاربردی است.
8️⃣ ()round — گرد کردن
تابع
()round مقدار ورودی را به نزدیکترین عدد صحیح گرد میکند.ورودی
x → مقدار عددیخروجی
نزدیکترین عدد صحیح به
xمثال ساده
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
double x;
double result;
x = 7.6;
result = round(x);
printf('Rounded value = %.0f', result);
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
نتیجه:
Rounded value = 8
⚡️ مثال سیستم قدرت
فرض کنید در یک محاسبه، تعداد تقریبی پلههای موردنیاز یک بانک خازنی
7.6 به دست آمده است:! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
double requiredSteps;
double steps;
requiredSteps = 7.6;
steps = round(requiredSteps);
printf('Required capacitor steps = %.0f', steps);
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
نتیجه:
Required capacitor steps = 8
⚠️ تفاوت با ()ceil
این دو تابع را با هم اشتباه نگیریم:
ceil(7.2) → 8
round(7.2) → 7
()ceil همیشه به سمت بالا میرود، اما ()round نزدیکترین عدد صحیح را انتخاب میکند.9️⃣ ()trunc — حذف بخش اعشاری
تابع
trunc() بخش اعشاری عدد را حذف میکند و قسمت صحیح آن را برمیگرداند.ورودی
x → مقدار عددیخروجی
قسمت صحیح مقدار
xمثال ساده
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
double x;
double result;
x = 7.89;
result = trunc(x);
printf('Truncated value = %.0f', result);
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
نتیجه:
Truncated value = 7
⚡️ مثال سیستم قدرت
فرض کنید نسبت ظرفیت محاسبهشده برای چند واحد تجهیز برابر
5.87 است و فقط تعداد واحدهای کامل برایمان اهمیت دارد:! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
double capacityRatio;
double completeUnits;
capacityRatio = 5.87;
completeUnits = trunc(capacityRatio);
printf('Complete units = %.0f', completeUnits);
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
نتیجه:
Complete units = 5
🔎 مقایسه سه تابع
اگر مقدار ورودی
7.6 باشد:ceil(7.6) = 8
گرد کردن به بالا
round(7.6) = 8
نزدیکترین عدد صحیح
trunc(7.6) = 7
حذف بخش اعشاری
🧠 جمعبندی بخش 16
در این بخش با 9 تابع پایه ریاضی DPL آشنا شدیم:
abs() → قدرمطلقceil() → گرد کردن به بالاfloor() → گرد کردن به پایینfrac() → بخش کسریmax() → بیشینهmin() → کمینهmodulo() → باقیمانده تقسیمround() → نزدیکترین عدد صحیحtrunc() → حذف بخش اعشاری📌 این توابع از پایهایترین ابزارهای DPL برای انجام محاسبات و پردازش نتایج مطالعات سیستم قدرت هستند.
#سطح_1
#DIgSILENT #PowerFactory #DPL #PowerSystems #مهندسی_برق
✅ @PowerFactoryDIgSILENT
𝐏𝐨𝐰𝐞𝐫𝐅𝐚𝐜𝐭𝐨𝐫𝐲 𝐃𝐈𝐠𝐒𝐈𝐋𝐄𝐍𝐓 | آموزش نرم افزار دیگسایلنت پاورفکتوری
🔰 ادامه سطح 1 - بخش 16 🔰 7️⃣ ()modulo — باقیمانده تقسیم تابع ()modulo باقیمانده تقسیم یک عدد بر عدد دیگر را محاسبه میکند. ورودی x → عدد اول y → عدد دوم یا مقسومعلیه خروجی باقیمانده تقسیم x بر y مثال ساده ! =================================== ! ✅ Telegram:…
🎯 تمرین شماره 16
بدون استفاده از مثالهای خود این پست، یک Script بنویسید که:
مقدار بار یک ترانسفورماتور را بر اساس توان ظاهری و ظرفیت نامی آن محاسبه کند.
با استفاده از
با استفاده از
با استفاده از
با استفاده از
با استفاده از
با استفاده از
🎯 نکته
هدف تمرین فقط استفاده از چند تابع بهصورت جداگانه نیست؛ سعی کنید چند تابع را در یک محاسبه ترکیب کنید.
⚠️ محدودیت: در این تمرین از توابعی که هنوز آموزش ندادهایم استفاده نکنید.
#تمرین_سطح_1
#تمرین
بدون استفاده از مثالهای خود این پست، یک Script بنویسید که:
مقدار بار یک ترانسفورماتور را بر اساس توان ظاهری و ظرفیت نامی آن محاسبه کند.
با استفاده از
()ceil تعداد ترانسفورماتورهای موردنیاز برای تأمین بار را به دست آورد.با استفاده از
()round مقدار بارگذاری را به نزدیکترین عدد صحیح گرد کند.با استفاده از
()abs میزان اختلاف بارگذاری با مقدار مرجع 80% را محاسبه کند.با استفاده از
()max و ()min بیشترین و کمترین مقدار بارگذاری را بین چند مقدار مشخص پیدا کند.با استفاده از
()modulo مشخص کند کدام شمارههای سناریو مضرب 5 هستند.با استفاده از
()trunc بخش صحیح یک نسبت محاسباتی را استخراج کند.🎯 نکته
هدف تمرین فقط استفاده از چند تابع بهصورت جداگانه نیست؛ سعی کنید چند تابع را در یک محاسبه ترکیب کنید.
⚠️ محدودیت: در این تمرین از توابعی که هنوز آموزش ندادهایم استفاده نکنید.
#تمرین_سطح_1
#تمرین
🔰 سطح 1 - بخش 17 🔰
📌 توان و ریشه در DPL
در این بخش با سه تابع مهم برای انجام محاسبات توان و ریشه در DPL آشنا میشویم:
این توابع در محاسبات مهندسی سیستم قدرت، بهخصوص در محاسبات توان، امپدانس، جریان، ولتاژ و کمیتهای فازوری کاربرد زیادی دارند.
1️⃣ ()pow — توان
تابع
ورودی
خروجی
مقدار
مثال ساده
خروجی:
⚡️ مثال سیستم قدرت
در محاسبات سیستم قدرت، توان ظاهری سهفاز از رابطه زیر به دست میآید:
همچنین برای محاسبه مربع یک کمیت، میتوان از
فرض کنید ولتاژ فاز
👈 ()pow زمانی مفید است که توان موردنظر یک مقدار ثابت یا متغیر باشد.
2️⃣ ()sqr — مربع
تابع
ورودی
خروجی
مثال ساده
خروجی:
⚡️ مثال سیستم قدرت
یکی از کاربردهای مهم مربع در سیستم قدرت، محاسبه تلفات اهمی است:
فرض کنید جریان یک خط
نتیجه:
یعنی:
📌 در اینجا
3️⃣ ()sqrt — ریشه دوم
تابع
ورودی
خروجی
ریشه دوم
مثال ساده
خروجی:
⚡️ مثال سیستم قدرت
اگر یک فازور به صورت:
باشد، اندازه آن از رابطه زیر به دست میآید:
مثلاً:
بنابراین:
در DPL:
نتیجه:
📌 این مثال نشان میدهد چگونه میتوان چند تابع DPL را با یکدیگر ترکیب کرد:
🔎 تفاوت ()pow و ()sqr
هر دو میتوانند مربع یک مقدار را محاسبه کنند:
و:
اما وقتی هدف مشخصاً مربع کردن است، استفاده از
در مقابل، زمانی که توان متغیر باشد،
🧠 جمعبندی
محاسبه
محاسبه
محاسبه
این سه تابع از ابزارهای مهم DPL برای انجام محاسبات ریاضی در اسکریپتهای مهندسی هستند.
#سطح_1
#DIgSILENT #PowerFactory #DPL #PowerSystems #مهندسی_برق
✅ @PowerFactoryDIgSILENT
📌 توان و ریشه در DPL
در این بخش با سه تابع مهم برای انجام محاسبات توان و ریشه در DPL آشنا میشویم:
pow()sqr()sqrt()این توابع در محاسبات مهندسی سیستم قدرت، بهخصوص در محاسبات توان، امپدانس، جریان، ولتاژ و کمیتهای فازوری کاربرد زیادی دارند.
1️⃣ ()pow — توان
تابع
pow() مقدار x را به توان y میرساند.ورودی
x → پایهy → توانخروجی
مقدار
xʸمثال ساده
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
double x;
double y;
double result;
x = 2.0;
y = 5.0;
result = pow(x, y);
printf('%.1f ^ %.1f = %.1f', x, y, result);
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
خروجی:
2.0 ^ 5.0 = 32.0
⚡️ مثال سیستم قدرت
در محاسبات سیستم قدرت، توان ظاهری سهفاز از رابطه زیر به دست میآید:
S = √3 × V × I
همچنین برای محاسبه مربع یک کمیت، میتوان از
()pow استفاده کرد.فرض کنید ولتاژ فاز
230kV و جریان 500A باشد و بخواهیم مقدار V² را محاسبه کنیم:! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
double U;
double U2;
U = 230.0;
U2 = pow(U, 2.0);
printf('U = %.1f kV', U);
printf('U^2 = %.1f kV^2', U2);
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
👈 ()pow زمانی مفید است که توان موردنظر یک مقدار ثابت یا متغیر باشد.
2️⃣ ()sqr — مربع
تابع
()sqr مربع مقدار ورودی را محاسبه میکند.ورودی
x → مقدار عددیخروجی
x²مثال ساده
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
double x;
double result;
x = 7.0;
result = sqr(x);
printf('Square of %.1f = %.1f', x, result);
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
خروجی:
Square of 7.0 = 49.0
⚡️ مثال سیستم قدرت
یکی از کاربردهای مهم مربع در سیستم قدرت، محاسبه تلفات اهمی است:
P_loss = I² × R
فرض کنید جریان یک خط
500A و مقاومت آن 0.08Ω باشد:! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
double I;
double R;
double Ploss;
I = 500.0;
R = 0.08;
Ploss = sqr(I) * R;
printf('Line loss = %.1f W', Ploss);
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
نتیجه:
Line loss = 20000.0 W
یعنی:
20kW
📌 در اینجا
sqr(I) مستقیماً برای محاسبه I² استفاده شده است.3️⃣ ()sqrt — ریشه دوم
تابع
()sqrt ریشه دوم یک مقدار را محاسبه میکند.ورودی
x → مقدار عددیخروجی
ریشه دوم
xمثال ساده
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
double x;
double result;
x = 81.0;
result = sqrt(x);
printf('sqrt(%.1f) = %.1f', x, result);
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
خروجی:
sqrt(81.0) = 9.0⚡️ مثال سیستم قدرت
اگر یک فازور به صورت:
Z = R + jX
باشد، اندازه آن از رابطه زیر به دست میآید:
|Z| = √(R² + X²)
مثلاً:
R = 3 Ω
X = 4 Ω
بنابراین:
|Z| = 5 Ω
در DPL:
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
double R;
double X;
double Z;
R = 3.0;
X = 4.0;
Z = sqrt(sqr(R) + sqr(X));
printf('Impedance magnitude = %.2f Ohm', Z);
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
نتیجه:
Impedance magnitude = 5.00 Ohm
📌 این مثال نشان میدهد چگونه میتوان چند تابع DPL را با یکدیگر ترکیب کرد:
R و X
↓
sqr()
↓
جمع مربعات
↓
sqrt()
↓
|Z|
🔎 تفاوت ()pow و ()sqr
هر دو میتوانند مربع یک مقدار را محاسبه کنند:
pow(x, 2)
و:
sqr(x)
اما وقتی هدف مشخصاً مربع کردن است، استفاده از
()sqr سادهتر و خواناتر است.در مقابل، زمانی که توان متغیر باشد،
()pow انتخاب مناسبتری است:result = pow(x, n);
🧠 جمعبندی
pow(x,y)محاسبه
xʸsqr(x)محاسبه
x²sqrt(x)محاسبه
x√این سه تابع از ابزارهای مهم DPL برای انجام محاسبات ریاضی در اسکریپتهای مهندسی هستند.
#سطح_1
#DIgSILENT #PowerFactory #DPL #PowerSystems #مهندسی_برق
✅ @PowerFactoryDIgSILENT
𝐏𝐨𝐰𝐞𝐫𝐅𝐚𝐜𝐭𝐨𝐫𝐲 𝐃𝐈𝐠𝐒𝐈𝐋𝐄𝐍𝐓 | آموزش نرم افزار دیگسایلنت پاورفکتوری
🔰 سطح 1 - بخش 17 🔰 📌 توان و ریشه در DPL در این بخش با سه تابع مهم برای انجام محاسبات توان و ریشه در DPL آشنا میشویم: pow() sqr() sqrt() این توابع در محاسبات مهندسی سیستم قدرت، بهخصوص در محاسبات توان، امپدانس، جریان، ولتاژ و کمیتهای فازوری کاربرد زیادی…
🎯 تمرین شماره 17
یک سیستم سهفاز متعادل را در نظر بگیرید که:
ولتاژ خط به خط:
توان اکتیو:
ضریب توان:
مقاومت معادل هر فاز:
یک Script بنویسید که موارد زیر را حساب کند:
تمام مقادیر محاسبهشده را با واحد مناسب چاپ کنید.
👈 نکته
در این تمرین فقط به خود توابع فکر نکنید؛ سعی کنید زنجیره محاسبات یک مطالعه بار ساده در شبکه سهفاز را بسازید:
#تمرین_سطح_1
#تمرین
یک سیستم سهفاز متعادل را در نظر بگیرید که:
ولتاژ خط به خط:
V = 132 kVتوان اکتیو:
P = 75 MWضریب توان:
PF = 0.85مقاومت معادل هر فاز:
R = 0.12 Ωیک Script بنویسید که موارد زیر را حساب کند:
S = P / PFI = S / (√3 × V)P_loss = 3 × I² × R%Loss = (P_loss / P) × 100تمام مقادیر محاسبهشده را با واحد مناسب چاپ کنید.
👈 نکته
در این تمرین فقط به خود توابع فکر نکنید؛ سعی کنید زنجیره محاسبات یک مطالعه بار ساده در شبکه سهفاز را بسازید:
P + PF
↓
S
↓
I
↓
I²
↓
P_loss
↓
%Loss
#تمرین_سطح_1
#تمرین
🔰 سطح 1 - بخش 18 🔰
📌 توابع لگاریتمی و نمایی در DPL
در این بخش با سه تابع زیر آشنا میشویم:
این توابع در محاسبات مهندسی، مدلسازی رفتارهای نمایی و برخی محاسبات مرتبط با سیستمهای قدرت و تجهیزات الکتریکی کاربرد دارند.
1️⃣ ()exp — تابع نمایی
تابع
ورودی
🔹 این آرگومان اختیاری است و اگر وارد نشود، مقدار پیشفرض آن
خروجی
مقدار:
مثال ساده
نتیجه تقریباً:
⚡️ مثال سیستم قدرت
رفتار برخی کمیتهای مهندسی را میتوان با مدل نمایی نمایش داد. برای مثال، فرض کنید یک کمیت با رابطه زیر تغییر میکند:
این نوع رابطه در مدلسازی پاسخ گذرا و کاهش نمایی دیده میشود.
📌 نکته: در این مثال ()exp برای ایجاد بخش نمایی مدل استفاده شده است.
2️⃣ ()ln — لگاریتم طبیعی
تابع
مبنای لگاریتم طبیعی عدد
ورودی
خروجی
مثال ساده
نتیجه تقریباً:
⚡️ مثال سیستم قدرت
یکی از کاربردهای لگاریتم طبیعی در مهندسی برق، حل روابط نمایی است.
اگر رابطهای به شکل زیر داشته باشیم:
برای بهدستآوردن
مثلاً:
👈 بنابراین ()ln در واقع میتواند عملیات معکوس ()exp را انجام دهد.
#سطح_1
#DIgSILENT #PowerFactory #DPL #PowerSystems #مهندسی_برق
✅ @PowerFactoryDIgSILENT
📌 توابع لگاریتمی و نمایی در DPL
در این بخش با سه تابع زیر آشنا میشویم:
exp()ln()log()این توابع در محاسبات مهندسی، مدلسازی رفتارهای نمایی و برخی محاسبات مرتبط با سیستمهای قدرت و تجهیزات الکتریکی کاربرد دارند.
1️⃣ ()exp — تابع نمایی
تابع
()exp مقدار e را به توان x میرساند.ورودی
x → توان عدد e🔹 این آرگومان اختیاری است و اگر وارد نشود، مقدار پیشفرض آن
1 است.خروجی
مقدار:
eˣمثال ساده
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
double x;
double result;
x = 2.0;
result = exp(x);
printf('exp(%.1f) = %.4f', x, result);
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
نتیجه تقریباً:
exp(2) = 7.3891
⚡️ مثال سیستم قدرت
رفتار برخی کمیتهای مهندسی را میتوان با مدل نمایی نمایش داد. برای مثال، فرض کنید یک کمیت با رابطه زیر تغییر میکند:
y = y0 × e^(-t/T)
این نوع رابطه در مدلسازی پاسخ گذرا و کاهش نمایی دیده میشود.
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
double y0;
double t;
double T;
double y;
y0 = 1.0;
t = 0.5;
T = 0.2;
y = y0 * exp(-t / T);
printf('y = %.4f', y);
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
📌 نکته: در این مثال ()exp برای ایجاد بخش نمایی مدل استفاده شده است.
2️⃣ ()ln — لگاریتم طبیعی
تابع
()ln لگاریتم طبیعی یک مقدار را محاسبه میکند.مبنای لگاریتم طبیعی عدد
e است.ورودی
x → مقدار مثبتخروجی
ln(x)مثال ساده
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
double x;
double result;
x = 10.0;
result = ln(x);
printf('ln(%.1f) = %.4f', x, result);
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
نتیجه تقریباً:
ln(10) = 2.3026
⚡️ مثال سیستم قدرت
یکی از کاربردهای لگاریتم طبیعی در مهندسی برق، حل روابط نمایی است.
اگر رابطهای به شکل زیر داشته باشیم:
y = eˣ
برای بهدستآوردن
x میتوانیم از ()ln استفاده کنیم:x = ln(y)
مثلاً:
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
double y;
double x;
y = 5.0;
x = ln(y);
printf('x = %.4f', x);
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
👈 بنابراین ()ln در واقع میتواند عملیات معکوس ()exp را انجام دهد.
#سطح_1
#DIgSILENT #PowerFactory #DPL #PowerSystems #مهندسی_برق
✅ @PowerFactoryDIgSILENT
𝐏𝐨𝐰𝐞𝐫𝐅𝐚𝐜𝐭𝐨𝐫𝐲 𝐃𝐈𝐠𝐒𝐈𝐋𝐄𝐍𝐓 | آموزش نرم افزار دیگسایلنت پاورفکتوری
🔰 سطح 1 - بخش 18 🔰 📌 توابع لگاریتمی و نمایی در DPL در این بخش با سه تابع زیر آشنا میشویم: exp() ln() log() این توابع در محاسبات مهندسی، مدلسازی رفتارهای نمایی و برخی محاسبات مرتبط با سیستمهای قدرت و تجهیزات الکتریکی کاربرد دارند. 1️⃣ ()exp — تابع نمایی…
🔰 ادامه سطح 1 - بخش 18 🔰
3️⃣ ()log — لگاریتم پایه 10
تابع
ورودی
خروجی
مثال ساده
نتیجه:
⚡️ مثال سیستم قدرت
یکی از کاربردهای بسیار مهم لگاریتم پایه 10 در مهندسی برق، تبدیل کمیتها به مقیاس لگاریتمی است.
برای مثال در محاسبات دسیبل:
میتوان از
نتیجه تقریباً:
🔎 تفاوت ()ln و ()log
این دو تابع را نباید با هم اشتباه گرفت:
📌 در DPL
⚠️ نکات و محدودیتها
🔸 آرگومان
🔸
🔸 هنگام استفاده از روابط نمایی و لگاریتمی در محاسبات مهندسی، واحدها و مقیاس کمیتها را بهدرستی بررسی کنید.
🧠 جمعبندی
محاسبه
لگاریتم طبیعی
لگاریتم پایه 10
#سطح_1
#DIgSILENT #PowerFactory #DPL #PowerSystems #مهندسی_برق
✅ @PowerFactoryDIgSILENT
3️⃣ ()log — لگاریتم پایه 10
تابع
()log لگاریتم یک مقدار را با پایه 10 محاسبه میکند.ورودی
x → مقدار مثبتخروجی
log₁₀(x)مثال ساده
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
double x;
double result;
x = 1000.0;
result = log(x);
printf('log10(%.1f) = %.1f', x, result);
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
نتیجه:
log10(1000) = 3
⚡️ مثال سیستم قدرت
یکی از کاربردهای بسیار مهم لگاریتم پایه 10 در مهندسی برق، تبدیل کمیتها به مقیاس لگاریتمی است.
برای مثال در محاسبات دسیبل:
dB = 20 × log₁₀(V₂/V₁)
میتوان از
()log استفاده کرد:! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
double V1;
double V2;
double dB;
V1 = 1.0;
V2 = 2.0;
dB = 20.0 * log(V2 / V1);
printf('Voltage ratio = %.2f', V2 / V1);
printf('Level = %.2f dB', dB);
! ===================================
! ✅ Telegram: @PowerFactoryDIgSILENT
! ===================================
نتیجه تقریباً:
Level = 6.02 dB
🔎 تفاوت ()ln و ()log
این دو تابع را نباید با هم اشتباه گرفت:
مثال -------------- پا---------- تابع
ln(x) ------- e ------- ln(10) ≈ 2.3026
log(x) ------- 10 ------- log(1000) = 3
📌 در DPL
ln() → لگاریتم طبیعیlog() → لگاریتم پایه 10⚠️ نکات و محدودیتها
🔸 آرگومان
ln() و log() باید در محدوده مجاز تابع قرار داشته باشد؛ برای مقادیر حقیقی، مقدار ورودی باید مثبت باشد.🔸
exp(x) برای مقادیر بسیار بزرگ میتواند باعث Overflow عددی شود.🔸 هنگام استفاده از روابط نمایی و لگاریتمی در محاسبات مهندسی، واحدها و مقیاس کمیتها را بهدرستی بررسی کنید.
🧠 جمعبندی
exp(x)محاسبه
eˣln(x)لگاریتم طبیعی
log(x)لگاریتم پایه 10
#سطح_1
#DIgSILENT #PowerFactory #DPL #PowerSystems #مهندسی_برق
✅ @PowerFactoryDIgSILENT
𝐏𝐨𝐰𝐞𝐫𝐅𝐚𝐜𝐭𝐨𝐫𝐲 𝐃𝐈𝐠𝐒𝐈𝐋𝐄𝐍𝐓 | آموزش نرم افزار دیگسایلنت پاورفکتوری
🔰 ادامه سطح 1 - بخش 18 🔰 3️⃣ ()log — لگاریتم پایه 10 تابع ()log لگاریتم یک مقدار را با پایه 10 محاسبه میکند. ورودی x → مقدار مثبت خروجی log₁₀(x) مثال ساده ! =================================== ! ✅ Telegram: @PowerFactoryDIgSILENT ! ===================…
🎯 تمرین شماره 18
در یک خط انتقال، مقدار یک کمیت در طول خط بهصورت نمایی کاهش مییابد.
فرض کنید مقدار اولیه کمیت
یک Script بنویسید که:
مقدار ثابت کاهش
و سپس مقدار کمیت را در فاصله
و در ادامه زیر را نیز محاسبه کنید:
مقدار
🎯 نکته
اینجا قرار نیست فقط سه تابع را جداگانه امتحان کنید؛ باید از آنها برای حل یک مدل واقعی مهندسی استفاده کنید:
💡 مفهوم جدیدی که در این تمرین یاد میگیرید:
مدلهای نمایی کاهش کمیتها و ارتباط آنها با مقیاس لگاریتمی و dB.
⚠️ هدف تمرین این نیست که فرمولها را عیناً کپی کنید؛ ابتدا روابط مهندسی را روی کاغذ بنویسید و سپس آنها را با توابع DPL پیادهسازی کنید.
#تمرین_سطح_1
#تمرین
در یک خط انتقال، مقدار یک کمیت در طول خط بهصورت نمایی کاهش مییابد.
فرض کنید مقدار اولیه کمیت
100 بوده و پس از طی مسافت 80 km به 40 رسیده است.یک Script بنویسید که:
مقدار ثابت کاهش
α را از رابطه زیر به دست آورد:V(x) = V₀ × e^(-αx)
و سپس مقدار کمیت را در فاصله
120km پیشبینی کنید.و در ادامه زیر را نیز محاسبه کنید:
20 × log₁₀(V₀ / V120)
مقدار
α، مقدار پیشبینیشده در 120km و مقدار دسیبل را نمایش دهید.🎯 نکته
اینجا قرار نیست فقط سه تابع را جداگانه امتحان کنید؛ باید از آنها برای حل یک مدل واقعی مهندسی استفاده کنید:
مقدار اولیه + مقدار اندازهگیریشده
↓
ln()
↓
استخراج ضریب کاهش α
↓
exp()
↓
پیشبینی مقدار جدید
↓
log()
↓
بیان کاهش در مقیاس dB
💡 مفهوم جدیدی که در این تمرین یاد میگیرید:
مدلهای نمایی کاهش کمیتها و ارتباط آنها با مقیاس لگاریتمی و dB.
⚠️ هدف تمرین این نیست که فرمولها را عیناً کپی کنید؛ ابتدا روابط مهندسی را روی کاغذ بنویسید و سپس آنها را با توابع DPL پیادهسازی کنید.
#تمرین_سطح_1
#تمرین