DarkInside |
11.03.2016 22:57 |
Ответ: Работа в стартапе
Цитата:
Сообщение от RegIon
(Сообщение 304753)
Забудь про Блитз, нужно хотя бы на тот же питон переписать.
На питон кстати можно все переписать, досканально, коль уже на нем есть генератор.
Я бы смог на питон переписать блитзовский проект, если он за собой не тянет 3d (Хотя есть же Coccos на этот случай)
Хотя кстати и генератор документации на питон не так сложно переписать с AutoIt.
Если это так востребовано, то можно поднять потом сервер, с питоном это не сложно будет
|
Я то это понимаю. Но в питоне я слишком слаб, только начал изучать. Просто нашел готовую библиотеку на питоне для экспорта в автокад и разобрался, как генерить описание чертежей для этой библиотеки. Но с ней есть проблемы, отсутствуют типы линий (основная, тонкая, штрих-пунктирная и т.д.), у меня сейчас генерится всё тонкими линиями, нужно разобраться в структуре DXF-файла и добавить основную линию. Хотя, может она и есть уже в этой библиотеке, просто я чего-то не понимаю.
Блиц я знаю очень давно, мне в нем проще по-быстрому изложить всю логику, питон еще учить и учить. В AutoIT там совсем немного кода - функции для работы с вордом скомпилированы в экзешники и вызываются из блица. Вот по поводу перевода кода на питон, там логика довольно сложная...переводить, думаю, куча времени уйдет...вот пример нескольких функций на блице (примерно в таком стиле 20 тыс. строк):
В принципе я только за, если весь код будет на питоне, но как-то это надо организовать...
Код:
Function perebor()
For i = 1 To kol_objects_mode
If kat_mode$(i) = "III" And Float(s_p_mode$ (i)) <= 660 Then
If Float(s_p_mode$ (i)) <= 330 Then
rp_kol = rp_kol + 1
rp_ini (rp_kol) = i
p_p_rp$ (rp_kol) = p_p_mode$ (i)
q_p_rp$ (rp_kol) = q_p_mode$ (i)
s_p_rp$ (rp_kol) = s_p_mode$ (i)
Else
rp_kol = rp_kol + 1
rp_ini (rp_kol) = i
p_p_rp$ (rp_kol) = Str(Float (p_p_mode$ (i)) / 2)
q_p_rp$ (rp_kol) = Str(Float (q_p_mode$ (i)) / 2)
s_p_rp$ (rp_kol) = Str(Float (s_p_mode$ (i)) / 2)
rp_kol = rp_kol + 1
rp_ini (rp_kol) = i
p_p_rp$ (rp_kol) = Str(Float (p_p_mode$ (i)) / 2)
q_p_rp$ (rp_kol) = Str(Float (q_p_mode$ (i)) / 2)
s_p_rp$ (rp_kol) = Str(Float (s_p_mode$ (i)) / 2)
EndIf
EndIf
Next
For tp_1 = 1 To kol_objects_mode
If kat_mode$(tp_1) <> "III" Then
For tp_2 = 0 To kol_objects_mode
If (kat_mode$(tp_2) = "II" And tp_2 <> tp_1) Or tp_2 = 0 Then
n% = rp_kol
end_str$ = ""
str_t$ = ""
a_dec = 0
For i = 1 To n%
end_str$ = end_str$ + "1"
Next
While str_t$ <> end_str$
str_t$ = Bin$(a_dec)
If Len(str_t$) > n% Then
str_t$ = Right (str_t$, n%)
ElseIf Len(str_t$) < n%
While Len(str_t$) < n%
str_t$ = "0" + str_t$
Wend
EndIf
rp_str$ = ""
add_kol = 0
For i = 1 To n%
add_ini$ = Mid$ (str_t$, i, 1)
If add_ini$ = 1 Then
add_kol = add_kol + 1
If add_kol > 4 Then
Exit
Else
rp_str$ = rp_str$ + Str(i) + "+"
EndIf
EndIf
Next
If add_kol <= 4 Then
If rp_str$ <> "" Then
rp_str$ = Left (rp_str$, Len(rp_str$) - 1)
EndIf
If Instr(rp_str$, "+") <> 0 Then
rp_1 = Int(Left (rp_str$, Instr(rp_str$, "+") - 1))
rp_str$ = Right (rp_str$, Len(rp_str$) - Instr(rp_str$, "+"))
Else
rp_1 = Int(rp_str$)
rp_str$ = ""
EndIf
If Instr(rp_str$, "+") <> 0 Then
rp_2 = Int(Left (rp_str$, Instr(rp_str$, "+") - 1))
rp_str$ = Right (rp_str$, Len(rp_str$) - Instr(rp_str$, "+"))
Else
rp_2 = Int(rp_str$)
rp_str$ = ""
EndIf
If Instr(rp_str$, "+") <> 0 Then
rp_3 = Int(Left (rp_str$, Instr(rp_str$, "+") - 1))
rp_str$ = Right (rp_str$, Len(rp_str$) - Instr(rp_str$, "+"))
Else
rp_3 = Int(rp_str$)
rp_str$ = ""
EndIf
If Instr(rp_str$, "+") <> 0 Then
rp_4 = Int(Left (rp_str$, Instr(rp_str$, "+") - 1))
rp_str$ = Right (rp_str$, Len(rp_str$) - Instr(rp_str$, "+"))
Else
rp_4 = Int(rp_str$)
rp_str$ = ""
EndIf
calc_k (tp_1, tp_2, rp_1, rp_2, rp_3, rp_4)
tp_rep_kol = tp_rep_kol + 1
EndIf
a_dec = a_dec + 1
Wend
EndIf
Next
ElseIf kat_mode$(tp_1) = "III" Then
n% = rp_kol
end_str$ = ""
str_t$ = ""
a_dec = 0
For i = 1 To n%
end_str$ = end_str$ + "1"
Next
While str_t$ <> end_str$
str_t$ = Bin$(a_dec)
If Len(str_t$) > n% Then
str_t$ = Right (str_t$, n%)
ElseIf Len(str_t$) < n%
While Len(str_t$) < n%
str_t$ = "0" + str_t$
Wend
EndIf
rp_str$ = ""
add_kol = 0
For i = 1 To n%
add_ini$ = Mid$ (str_t$, i, 1)
If add_ini$ = 1 Then
add_kol = add_kol + 1
If add_kol > 4 Then
Exit
Else
rp_str$ = rp_str$ + Str(i) + "+"
EndIf
EndIf
Next
If add_kol <= 4 Then
If rp_str$ <> "" Then
rp_str$ = Left (rp_str$, Len(rp_str$) - 1)
EndIf
If Instr(rp_str$, "+") <> 0 Then
rp_1 = Int(Left (rp_str$, Instr(rp_str$, "+") - 1))
rp_str$ = Right (rp_str$, Len(rp_str$) - Instr(rp_str$, "+"))
Else
rp_1 = Int(rp_str$)
rp_str$ = ""
EndIf
If Instr(rp_str$, "+") <> 0 Then
rp_2 = Int(Left (rp_str$, Instr(rp_str$, "+") - 1))
rp_str$ = Right (rp_str$, Len(rp_str$) - Instr(rp_str$, "+"))
Else
rp_2 = Int(rp_str$)
rp_str$ = ""
EndIf
If Instr(rp_str$, "+") <> 0 Then
rp_3 = Int(Left (rp_str$, Instr(rp_str$, "+") - 1))
rp_str$ = Right (rp_str$, Len(rp_str$) - Instr(rp_str$, "+"))
Else
rp_3 = Int(rp_str$)
rp_str$ = ""
EndIf
If Instr(rp_str$, "+") <> 0 Then
rp_4 = Int(Left (rp_str$, Instr(rp_str$, "+") - 1))
rp_str$ = Right (rp_str$, Len(rp_str$) - Instr(rp_str$, "+"))
Else
rp_4 = Int(rp_str$)
rp_str$ = ""
EndIf
If rp_ini(rp_1) <> tp_1 And rp_ini(rp_2) <> tp_1 And rp_ini(rp_3) <> tp_1 And rp_ini(rp_4) <> tp_1 Then
calc_k (tp_1, 0, rp_1, rp_2, rp_3, rp_4)
tp_rep_kol = tp_rep_kol + 1
EndIf
EndIf
a_dec = a_dec + 1
Wend
EndIf
Next
End Function
Function calc_k(tp_1, tp_2 = 0, rp_1 = 0, rp_2 = 0, rp_3 = 0, rp_4 = 0)
; tp_2 ТОЛЬКО II категории
; К одному цеху I, II или III(с ТП -выше 660 кВА) категории подключаем от 0 до 4 РП и резервируемый цех II категории
If kat_mode$(tp_1) = "I" Then
For n_tr_1 = 2 To 2; Step 2
s_nom_tr = kz_TP_ini (tp_1, tp_2, rp_1, rp_2, rp_3, rp_4, n_tr_1, 0.7, 0.75)
If s_nom_tr > 0 Then
If tp_2 > 0 Then
kol_var_II = kz_TP_2_ini (tp_1, n_tr_1, tp_2, rp_1, rp_2, rp_3, rp_4, 0.75, 0.8)
If kol_var_II > 0 Then
For i = 1 To kol_var_II
rp_1_ini = 1
rp_2_ini = 1
rp_3_ini = 1
rp_4_ini = 1
rp_1_t = 0
rp_2_t = 0
rp_3_t = 0
rp_4_t = 0
If rp_1 > 0 And rp_1 <> rp_1_kz_TP_2_ADD_return (i) And rp_1 <> rp_2_kz_TP_2_ADD_return (i) And rp_1 <> rp_3_kz_TP_2_ADD_return (i) And rp_1 <> rp_4_kz_TP_2_ADD_return (i) And rp_1 <> rp_1_kz_TP_2_ini_return (i) And rp_1 <> rp_2_kz_TP_2_ini_return (i) And rp_1 <> rp_3_kz_TP_2_ini_return (i) And rp_1 <> rp_4_kz_TP_2_ini_return (i) Then rp_1_ini = 0
If rp_2 > 0 And rp_2 <> rp_1_kz_TP_2_ADD_return (i) And rp_2 <> rp_2_kz_TP_2_ADD_return (i) And rp_2 <> rp_3_kz_TP_2_ADD_return (i) And rp_2 <> rp_4_kz_TP_2_ADD_return (i) And rp_2 <> rp_1_kz_TP_2_ini_return (i) And rp_2 <> rp_2_kz_TP_2_ini_return (i) And rp_2 <> rp_3_kz_TP_2_ini_return (i) And rp_2 <> rp_4_kz_TP_2_ini_return (i) Then rp_2_ini = 0
If rp_3 > 0 And rp_3 <> rp_1_kz_TP_2_ADD_return (i) And rp_3 <> rp_2_kz_TP_2_ADD_return (i) And rp_3 <> rp_3_kz_TP_2_ADD_return (i) And rp_3 <> rp_4_kz_TP_2_ADD_return (i) And rp_3 <> rp_1_kz_TP_2_ini_return (i) And rp_3 <> rp_2_kz_TP_2_ini_return (i) And rp_3 <> rp_3_kz_TP_2_ini_return (i) And rp_3 <> rp_4_kz_TP_2_ini_return (i) Then rp_3_ini = 0
If rp_4 > 0 And rp_4 <> rp_1_kz_TP_2_ADD_return (i) And rp_4 <> rp_2_kz_TP_2_ADD_return (i) And rp_4 <> rp_3_kz_TP_2_ADD_return (i) And rp_4 <> rp_4_kz_TP_2_ADD_return (i) And rp_4 <> rp_1_kz_TP_2_ini_return (i) And rp_4 <> rp_2_kz_TP_2_ini_return (i) And rp_4 <> rp_3_kz_TP_2_ini_return (i) And rp_4 <> rp_4_kz_TP_2_ini_return (i) Then rp_4_ini = 0
If rp_1_ini = 0 Then
If rp_to_TP (tp_1, rp_1, Float(s_p_rp$(rp_1))) = 1 Then
rp_1_ini = 1
rp_1_t = rp_1
EndIf
EndIf
If rp_2_ini = 0 Then
If rp_to_TP (tp_1, rp_2, Float(s_p_rp$(rp_2))) = 1 Then
rp_2_ini = 1
rp_2_t = rp_2
EndIf
EndIf
If rp_3_ini = 0 Then
If rp_to_TP (tp_1, rp_3, Float(s_p_rp$(rp_3))) = 1 Then
rp_3_ini = 1
rp_3_t = rp_3
EndIf
EndIf
If rp_4_ini = 0 Then
If rp_to_TP (tp_1, rp_4, Float(s_p_rp$(rp_4))) = 1 Then
rp_4_ini = 1
rp_4_t = rp_4
EndIf
EndIf
If rp_1_ini = 1 And rp_2_ini = 1 And rp_3_ini = 1 And rp_4_ini = 1 Then
w_add = w_add + 1
tp_1_rep(w_add) = tp_1
n_tr_rep_1 (w_add) = n_tr_1
s_tr_rep_1 (w_add) = s_nom_tr
tp_2_rep(w_add) = tp_2
n = step_over (rp_1_t, rp_2_t, rp_3_t, rp_4_t)
For z = 1 To n
If z = 1 Then rp_1_rep_1(w_add) = rp_add_hz_III(z)
If z = 2 Then rp_2_rep_1(w_add) = rp_add_hz_III(z)
If z = 3 Then rp_3_rep_1(w_add) = rp_add_hz_III(z)
If z = 4 Then rp_4_rep_1(w_add) = rp_add_hz_III(z)
Next
n = step_over (rp_1_kz_TP_2_ini_return(i), rp_2_kz_TP_2_ini_return(i), rp_3_kz_TP_2_ini_return(i), rp_4_kz_TP_2_ini_return(i))
For z = 1 To n
If z = 1 Then rp_1_rep_2(w_add) = rp_add_hz_III(z)
If z = 2 Then rp_2_rep_2(w_add) = rp_add_hz_III(z)
If z = 3 Then rp_3_rep_2(w_add) = rp_add_hz_III(z)
If z = 4 Then rp_4_rep_2(w_add) = rp_add_hz_III(z)
Next
n = step_over (rp_1_kz_TP_2_ADD_return(i), rp_2_kz_TP_2_ADD_return(i), rp_3_kz_TP_2_ADD_return(i), rp_4_kz_TP_2_ADD_return(i))
For z = 1 To n
If z = 1 Then rp_1_addable_rep_2(w_add) = rp_add_hz_III(z)
If z = 2 Then rp_2_added_rep_2(w_add) = rp_add_hz_III(z)
If z = 3 Then rp_3_added_rep_2(w_add) = rp_add_hz_III(z)
If z = 4 Then rp_4_added_rep_2(w_add) = rp_add_hz_III(z)
Next
EndIf
TP_1_over_write (tp_1, n_tr_1, s_nom_tr, rp_1_t, rp_2_t, rp_3_t, rp_4_t, tp_2, rp_1_kz_TP_2_ini_return (i), rp_2_kz_TP_2_ini_return (i), rp_3_kz_TP_2_ini_return (i), rp_4_kz_TP_2_ini_return (i), rp_1_kz_TP_2_ADD_return (i), rp_2_kz_TP_2_ADD_return (i), rp_3_kz_TP_2_ADD_return (i), rp_4_kz_TP_2_ADD_return (i))
Next
EndIf
ElseIf tp_2 = 0 Then
rp_1_ini = 1
rp_2_ini = 1
rp_3_ini = 1
rp_4_ini = 1
If rp_1 > 0 And rp_to_TP (tp_1, rp_1, Float(s_p_rp$(rp_1))) = 0 Then rp_1_ini = 0
If rp_2 > 0 And rp_to_TP (tp_1, rp_2, Float(s_p_rp$(rp_2))) = 0 Then rp_2_ini = 0
If rp_3 > 0 And rp_to_TP (tp_1, rp_3, Float(s_p_rp$(rp_3))) = 0 Then rp_3_ini = 0
If rp_4 > 0 And rp_to_TP (tp_1, rp_4, Float(s_p_rp$(rp_4))) = 0 Then rp_4_ini = 0
If rp_1_ini = 1 And rp_2_ini = 1 And rp_3_ini = 1 And rp_4_ini = 1 Then
w_add = w_add + 1
tp_1_rep(w_add) = tp_1
n_tr_rep_1 (w_add) = n_tr_1
s_tr_rep_1 (w_add) = s_nom_tr
n = step_over (rp_1, rp_2, rp_3, rp_4)
For z = 1 To n
If z = 1 Then rp_1_rep_1(w_add) = rp_add_hz_III(z)
If z = 2 Then rp_2_rep_1(w_add) = rp_add_hz_III(z)
If z = 3 Then rp_3_rep_1(w_add) = rp_add_hz_III(z)
If z = 4 Then rp_4_rep_1(w_add) = rp_add_hz_III(z)
Next
EndIf
TP_1_over_write (tp_1, n_tr_1, s_nom_tr, rp_1, rp_2, rp_3, rp_4)
EndIf
EndIf
Next
ElseIf kat_mode$(tp_1) = "II" Then
If tp_2 > 0 Then
For n_tr_1 = 1 To 2
s_nom_tr = kz_TP_ini (tp_1, tp_2, rp_1, rp_2, rp_3, rp_4, n_tr_1, 0.75, 0.8)
If s_nom_tr > 0 Then
kol_var_II = kz_TP_2_ini (tp_1, n_tr_1, tp_2, rp_1, rp_2, rp_3, rp_4, 0.75, 0.8)
If kol_var_II > 0 Then
For i = 1 To kol_var_II
rp_1_ini = 1
rp_2_ini = 1
rp_3_ini = 1
rp_4_ini = 1
rp_1_t = 0
rp_2_t = 0
rp_3_t = 0
rp_4_t = 0
If rp_1 > 0 And rp_1 <> rp_1_kz_TP_2_ADD_return (i) And rp_1 <> rp_2_kz_TP_2_ADD_return (i) And rp_1 <> rp_3_kz_TP_2_ADD_return (i) And rp_1 <> rp_4_kz_TP_2_ADD_return (i) And rp_1 <> rp_1_kz_TP_2_ini_return (i) And rp_1 <> rp_2_kz_TP_2_ini_return (i) And rp_1 <> rp_3_kz_TP_2_ini_return (i) And rp_1 <> rp_4_kz_TP_2_ini_return (i) Then rp_1_ini = 0
If rp_2 > 0 And rp_2 <> rp_1_kz_TP_2_ADD_return (i) And rp_2 <> rp_2_kz_TP_2_ADD_return (i) And rp_2 <> rp_3_kz_TP_2_ADD_return (i) And rp_2 <> rp_4_kz_TP_2_ADD_return (i) And rp_2 <> rp_1_kz_TP_2_ini_return (i) And rp_2 <> rp_2_kz_TP_2_ini_return (i) And rp_2 <> rp_3_kz_TP_2_ini_return (i) And rp_2 <> rp_4_kz_TP_2_ini_return (i) Then rp_2_ini = 0
If rp_3 > 0 And rp_3 <> rp_1_kz_TP_2_ADD_return (i) And rp_3 <> rp_2_kz_TP_2_ADD_return (i) And rp_3 <> rp_3_kz_TP_2_ADD_return (i) And rp_3 <> rp_4_kz_TP_2_ADD_return (i) And rp_3 <> rp_1_kz_TP_2_ini_return (i) And rp_3 <> rp_2_kz_TP_2_ini_return (i) And rp_3 <> rp_3_kz_TP_2_ini_return (i) And rp_3 <> rp_4_kz_TP_2_ini_return (i) Then rp_3_ini = 0
If rp_4 > 0 And rp_4 <> rp_1_kz_TP_2_ADD_return (i) And rp_4 <> rp_2_kz_TP_2_ADD_return (i) And rp_4 <> rp_3_kz_TP_2_ADD_return (i) And rp_4 <> rp_4_kz_TP_2_ADD_return (i) And rp_4 <> rp_1_kz_TP_2_ini_return (i) And rp_4 <> rp_2_kz_TP_2_ini_return (i) And rp_4 <> rp_3_kz_TP_2_ini_return (i) And rp_4 <> rp_4_kz_TP_2_ini_return (i) Then rp_4_ini = 0
If rp_1_ini = 0 Then
If rp_to_TP (tp_1, rp_1, Float(s_p_rp$(rp_1))) = 1 Then
rp_1_ini = 1
rp_1_t = rp_1
EndIf
EndIf
If rp_2_ini = 0 Then
If rp_to_TP (tp_1, rp_2, Float(s_p_rp$(rp_2))) = 1 Then
rp_2_ini = 1
rp_2_t = rp_2
EndIf
EndIf
If rp_3_ini = 0 Then
If rp_to_TP (tp_1, rp_3, Float(s_p_rp$(rp_3))) = 1 Then
rp_3_ini = 1
rp_3_t = rp_3
EndIf
EndIf
If rp_4_ini = 0 Then
If rp_to_TP (tp_1, rp_4, Float(s_p_rp$(rp_4))) = 1 Then
rp_4_ini = 1
rp_4_t = rp_4
EndIf
EndIf
If rp_1_ini = 1 And rp_2_ini = 1 And rp_3_ini = 1 And rp_4_ini = 1 Then
w_add = w_add + 1
tp_1_rep(w_add) = tp_1
n_tr_rep_1 (w_add) = n_tr_1
s_tr_rep_1 (w_add) = s_nom_tr
tp_2_rep(w_add) = tp_2
n = step_over (rp_1_t, rp_2_t, rp_3_t, rp_4_t)
For z = 1 To n
If z = 1 Then rp_1_rep_1(w_add) = rp_add_hz_III(z)
If z = 2 Then rp_2_rep_1(w_add) = rp_add_hz_III(z)
If z = 3 Then rp_3_rep_1(w_add) = rp_add_hz_III(z)
If z = 4 Then rp_4_rep_1(w_add) = rp_add_hz_III(z)
Next
n = step_over (rp_1_kz_TP_2_ini_return(i), rp_2_kz_TP_2_ini_return(i), rp_3_kz_TP_2_ini_return(i), rp_4_kz_TP_2_ini_return(i))
For z = 1 To n
If z = 1 Then rp_1_rep_2(w_add) = rp_add_hz_III(z)
If z = 2 Then rp_2_rep_2(w_add) = rp_add_hz_III(z)
If z = 3 Then rp_3_rep_2(w_add) = rp_add_hz_III(z)
If z = 4 Then rp_4_rep_2(w_add) = rp_add_hz_III(z)
Next
n = step_over (rp_1_kz_TP_2_ADD_return(i), rp_2_kz_TP_2_ADD_return(i), rp_3_kz_TP_2_ADD_return(i), rp_4_kz_TP_2_ADD_return(i))
For z = 1 To n
If z = 1 Then rp_1_addable_rep_2(w_add) = rp_add_hz_III(z)
If z = 2 Then rp_2_added_rep_2(w_add) = rp_add_hz_III(z)
If z = 3 Then rp_3_added_rep_2(w_add) = rp_add_hz_III(z)
If z = 4 Then rp_4_added_rep_2(w_add) = rp_add_hz_III(z)
Next
EndIf
TP_1_over_write (tp_1, n_tr_1, s_nom_tr, rp_1_t, rp_2_t, rp_3_t, rp_4_t, tp_2, rp_1_kz_TP_2_ini_return (i), rp_2_kz_TP_2_ini_return (i), rp_3_kz_TP_2_ini_return (i), rp_4_kz_TP_2_ini_return (i), rp_1_kz_TP_2_ADD_return (i), rp_2_kz_TP_2_ADD_return (i), rp_3_kz_TP_2_ADD_return (i), rp_4_kz_TP_2_ADD_return (i))
Next
EndIf
EndIf
Next
ElseIf tp_2 = 0 Then
For n_tr_1 = 2 To 2; Step 2
s_nom_tr = kz_TP_ini (tp_1, tp_2, rp_1, rp_2, rp_3, rp_4, n_tr_1, 0.75, 0.8)
If s_nom_tr > 0 Then
rp_1_ini = 1
rp_2_ini = 1
rp_3_ini = 1
rp_4_ini = 1
If rp_1 > 0 And rp_to_TP (tp_1, rp_1, Float(s_p_rp$(rp_1))) = 0 Then rp_1_ini = 0
If rp_2 > 0 And rp_to_TP (tp_1, rp_2, Float(s_p_rp$(rp_2))) = 0 Then rp_2_ini = 0
If rp_3 > 0 And rp_to_TP (tp_1, rp_3, Float(s_p_rp$(rp_3))) = 0 Then rp_3_ini = 0
If rp_4 > 0 And rp_to_TP (tp_1, rp_4, Float(s_p_rp$(rp_4))) = 0 Then rp_4_ini = 0
If rp_1_ini = 1 And rp_2_ini = 1 And rp_3_ini = 1 And rp_4_ini = 1 Then
w_add = w_add + 1
tp_1_rep(w_add) = tp_1
n_tr_rep_1 (w_add) = n_tr_1
s_tr_rep_1 (w_add) = s_nom_tr
n = step_over (rp_1, rp_2, rp_3, rp_4)
For z = 1 To n
If z = 1 Then rp_1_rep_1(w_add) = rp_add_hz_III(z)
If z = 2 Then rp_2_rep_1(w_add) = rp_add_hz_III(z)
If z = 3 Then rp_3_rep_1(w_add) = rp_add_hz_III(z)
If z = 4 Then rp_4_rep_1(w_add) = rp_add_hz_III(z)
Next
EndIf
TP_1_over_write (tp_1, n_tr_1, s_nom_tr, rp_1, rp_2, rp_3, rp_4)
EndIf
Next
EndIf
ElseIf kat_mode$(tp_1) = "III" Then
For n_tr_1 = 1 To 2
s_nom_tr = kz_TP_ini (tp_1, tp_2, rp_1, rp_2, rp_3, rp_4, n_tr_1, 0.8, 0.9)
If s_nom_tr > 0 Then
rp_1_ini = 1
rp_2_ini = 1
rp_3_ini = 1
rp_4_ini = 1
If rp_1 > 0 And rp_to_TP (tp_1, rp_1, Float(s_p_rp$(rp_1))) = 0 Then rp_1_ini = 0
If rp_2 > 0 And rp_to_TP (tp_1, rp_2, Float(s_p_rp$(rp_2))) = 0 Then rp_2_ini = 0
If rp_3 > 0 And rp_to_TP (tp_1, rp_3, Float(s_p_rp$(rp_3))) = 0 Then rp_3_ini = 0
If rp_4 > 0 And rp_to_TP (tp_1, rp_4, Float(s_p_rp$(rp_4))) = 0 Then rp_4_ini = 0
If rp_1_ini = 1 And rp_2_ini = 1 And rp_3_ini = 1 And rp_4_ini = 1 Then
w_add = w_add + 1
tp_1_rep(w_add) = tp_1
n_tr_rep_1 (w_add) = n_tr_1
s_tr_rep_1 (w_add) = s_nom_tr
n = step_over (rp_1, rp_2, rp_3, rp_4)
For z = 1 To n
If z = 1 Then rp_1_rep_1(w_add) = rp_add_hz_III(z)
If z = 2 Then rp_2_rep_1(w_add) = rp_add_hz_III(z)
If z = 3 Then rp_3_rep_1(w_add) = rp_add_hz_III(z)
If z = 4 Then rp_4_rep_1(w_add) = rp_add_hz_III(z)
Next
EndIf
TP_1_over_write (tp_1, n_tr_1, s_nom_tr, rp_1, rp_2, rp_3, rp_4)
EndIf
Next
EndIf
End Function
Function step_over(rp_1, rp_2, rp_3, rp_4)
Dim rp_add_hz_III (5)
n = 0
If rp_1 > 0 Then
n = n + 1
rp_add_hz_III (n) = rp_1
EndIf
If rp_2 > 0 Then
n = n + 1
rp_add_hz_III (n) = rp_2
EndIf
If rp_3 > 0 Then
n = n + 1
rp_add_hz_III (n) = rp_3
EndIf
If rp_4 > 0 Then
n = n + 1
rp_add_hz_III (n) = rp_4
EndIf
Return n
End Function
Function TP_1_over_write(tp_1, n_tr_1, s_tr_1, rp_1 = 0, rp_2 = 0, rp_3 = 0, rp_4 = 0, tp_2 = 0, rp_1_II = 0, rp_2_II = 0, rp_3_II = 0, rp_4_II = 0, rp_1_II_addble = 0, rp_2_II_add = 0, rp_3_II_add = 0, rp_4_II_add = 0)
kol_var = rp_add_rp(tp_1, rp_1, rp_2, rp_3, rp_4)
If kol_var > 0 Then
For i = 1 To kol_var
If rp_to_TP(tp_1, rp_add_rp_return_rp_1 (i), Float(s_p_rp$(rp_add_rp_return_rp_1(i))) + Float(s_p_rp$(rp_add_rp_return_rp_2(i))) + Float(s_p_rp$(rp_add_rp_return_rp_3(i))) + Float(s_p_rp$(rp_add_rp_return_rp_4(i)))) > 0 Then
rp_1_ini = 1
rp_2_ini = 1
rp_3_ini = 1
rp_4_ini = 1
rp_1_t = 0
rp_2_t = 0
rp_3_t = 0
rp_4_t = 0
If rp_1 > 0 And rp_add_rp_return_rp_1(i) <> rp_1 And rp_add_rp_return_rp_2(i) <> rp_1 And rp_add_rp_return_rp_3(i) <> rp_1 And rp_add_rp_return_rp_4(i) <> rp_1 Then rp_1_ini = 0
If rp_2 > 0 And rp_add_rp_return_rp_1(i) <> rp_2 And rp_add_rp_return_rp_2(i) <> rp_2 And rp_add_rp_return_rp_3(i) <> rp_2 And rp_add_rp_return_rp_4(i) <> rp_2 Then rp_2_ini = 0
If rp_3 > 0 And rp_add_rp_return_rp_1(i) <> rp_3 And rp_add_rp_return_rp_2(i) <> rp_3 And rp_add_rp_return_rp_3(i) <> rp_3 And rp_add_rp_return_rp_4(i) <> rp_3 Then rp_3_ini = 0
If rp_4 > 0 And rp_add_rp_return_rp_1(i) <> rp_4 And rp_add_rp_return_rp_2(i) <> rp_4 And rp_add_rp_return_rp_3(i) <> rp_4 And rp_add_rp_return_rp_4(i) <> rp_4 Then rp_4_ini = 0
If rp_1_ini = 0 Then
If rp_to_TP (tp_1, rp_1, Float(s_p_rp$(rp_1))) = 1 Then
rp_1_ini = 1
rp_1_t = rp_1
EndIf
EndIf
If rp_2_ini = 0 Then
If rp_to_TP (tp_1, rp_2, Float(s_p_rp$(rp_2))) = 1 Then
rp_2_ini = 1
rp_2_t = rp_2
EndIf
EndIf
If rp_3_ini = 0 Then
If rp_to_TP (tp_1, rp_3, Float(s_p_rp$(rp_3))) = 1 Then
rp_3_ini = 1
rp_3_t = rp_3
EndIf
EndIf
If rp_4_ini = 0 Then
If rp_to_TP (tp_1, rp_4, Float(s_p_rp$(rp_4))) = 1 Then
rp_4_ini = 1
rp_4_t = rp_4
EndIf
EndIf
If rp_1_ini = 1 And rp_2_ini = 1 And rp_3_ini = 1 And rp_4_ini = 1 Then
w_add = w_add + 1
tp_1_rep(w_add) = tp_1
n_tr_rep_1 (w_add) = n_tr_1
s_tr_rep_1 (w_add) = s_tr_1
tp_2_rep(w_add) = tp_2
n = step_over (rp_1_t, rp_2_t, rp_3_t, rp_4_t)
For z = 1 To n
If z = 1 Then rp_1_rep_1(w_add) = rp_add_hz_III(z)
If z = 2 Then rp_2_rep_1(w_add) = rp_add_hz_III(z)
If z = 3 Then rp_3_rep_1(w_add) = rp_add_hz_III(z)
If z = 4 Then rp_4_rep_1(w_add) = rp_add_hz_III(z)
Next
n = step_over (rp_add_rp_return_rp_1(i), rp_add_rp_return_rp_2(i), rp_add_rp_return_rp_3(i), rp_add_rp_return_rp_4(i))
For z = 1 To n
If z = 1 Then rp_1_addable_rep_1(w_add) = rp_add_hz_III(z)
If z = 2 Then rp_2_added_rep_1(w_add) = rp_add_hz_III(z)
If z = 3 Then rp_3_added_rep_1(w_add) = rp_add_hz_III(z)
If z = 4 Then rp_4_added_rep_1(w_add) = rp_add_hz_III(z)
Next
n = step_over (rp_1_II, rp_2_II, rp_3_II, rp_4_II)
For z = 1 To n
If z = 1 Then rp_1_rep_2(w_add) = rp_add_hz_III(z)
If z = 2 Then rp_2_rep_2(w_add) = rp_add_hz_III(z)
If z = 3 Then rp_3_rep_2(w_add) = rp_add_hz_III(z)
If z = 4 Then rp_4_rep_2(w_add) = rp_add_hz_III(z)
Next
n = step_over (rp_1_II_addble, rp_2_II_add, rp_3_II_add, rp_4_II_add)
For z = 1 To n
If z = 1 Then rp_1_addable_rep_2(w_add) = rp_add_hz_III(z)
If z = 2 Then rp_2_added_rep_2(w_add) = rp_add_hz_III(z)
If z = 3 Then rp_3_added_rep_2(w_add) = rp_add_hz_III(z)
If z = 4 Then rp_4_added_rep_2(w_add) = rp_add_hz_III(z)
Next
EndIf
EndIf
Next
EndIf
End Function
Function kz_TP_ini(tp_1, tp_2, rp_1, rp_2, rp_3, rp_4, n_tr, k_z_1#, k_z_2#)
ras_nagr# = Float(p_p_mode$(tp_2))
ras_q# = Float(q_p_mode$(tp_2))
For ku = 1 To 32
If Int(ku_nom%(ku)) >= ((ras_nagr# * (ras_q#/ras_nagr# - 0.33)) * 0.97) Then
q_qu_2 = ku_nom%(ku)
Exit
EndIf
If ku = 32 Then q_qu_2 = ku_nom%(32)
Next
P_sum# = Float(p_p_mode$(tp_1)) + Float(p_p_mode$(tp_2)) + Float(p_p_rp$(rp_1)) + Float(p_p_rp$(rp_2)) + Float(p_p_rp$(rp_3)) + Float(p_p_rp$(rp_4))
Q_sum# = Float(q_p_mode$(tp_1)) + Float(q_p_mode$(tp_2)) - q_qu_2 + Float(q_p_rp$(rp_1)) + Float(q_p_rp$(rp_2)) + Float(q_p_rp$(rp_3)) + Float(q_p_rp$(rp_4))
tg# = Q_sum# / P_sum#
Qqu# = P_sum# * (tg# - 0.33)
For ku = 1 To 32
If Int(ku_nom%(ku)) * n_tr >= (Qqu# * 0.97) Then
Qqu_2# = ku_nom%(ku)
Exit
EndIf
If ku = 32 Then Qqu_2# = ku_nom%(32)
Next
S_sum# = Sqr(P_sum#^2 + (Q_sum# - (Qqu_2# * n_tr))^2)
For e = 1 To 8
k_z# = S_sum# / (n_tr * trans%(e))
If k_z# >= (k_z_1# - delta_kz#) And k_z# <= (k_z_2# + delta_kz#) Then
Return trans%(e)
Exit
EndIf
Next
End Function
Function kz_TP_2_ini(tp_1, n_tr_1, tp_2, rp_1, rp_2, rp_3, rp_4, k_z_1#, k_z_2#); ТП-1 и ТП-2 > 0, РП: 0 - 4
If tp_1 > 0 And tp_2 > 0 And k_z_1# > 0 And k_z_2# > 0 Then
Dim rp_1_kz_TP_2_ini_return (900000)
Dim rp_2_kz_TP_2_ini_return (900000)
Dim rp_3_kz_TP_2_ini_return (900000)
Dim rp_4_kz_TP_2_ini_return (900000)
Dim rp_1_kz_TP_2_ADD_return (900000)
Dim rp_2_kz_TP_2_ADD_return (900000)
Dim rp_3_kz_TP_2_ADD_return (900000)
Dim rp_4_kz_TP_2_ADD_return (900000)
Dim rp_add_hz_II (5)
If rp_1 > 0 Then
n = n + 1
rp_add_hz_II (n) = rp_1
EndIf
If rp_2 > 0 Then
n = n + 1
rp_add_hz_II (n) = rp_2
EndIf
If rp_3 > 0 Then
n = n + 1
rp_add_hz_II (n) = rp_3
EndIf
If rp_4 > 0 Then
n = n + 1
rp_add_hz_II (n) = rp_4
EndIf
If n = 0 Then
P_sum_II# = Float(p_p_mode$(tp_2))
Q_sum_II# = Float(q_p_mode$(tp_2))
If n_tr_1 = 1 Then
P_sum_II# = P_sum_II# + Float(p_p_mode$(tp_1))
Q_sum_II# = Q_sum_II# + Float(q_p_mode$(tp_1))
EndIf
tg_II# = Q_sum_II# / P_sum_II#
Qqu_II# = P_sum_II# * (tg_II# - 0.33)
For ku = 1 To 32
If Int (ku_nom%(ku)) >= (Qqu_II# * 0.97) Then
Qqu_2_II# = ku_nom%(ku)
Exit
EndIf
If ku = 32 Then Qqu_2_II# = ku_nom%(32)
Next
S_sum_II# = Sqr(P_sum_II#^2 + (Q_sum_II# - Qqu_2_II#)^2)
For e_II = 1 To 8
k_z_II# = S_sum_II# / trans%(e_II)
If k_z_II# >= (k_z_1# - delta_kz#) And k_z_II# <= (k_z_2# + delta_kz#) Then
If TP_to_TP (tp_1, tp_2, k_z_II#, trans%(e_II), 0, 0) > 0 Then i_add = i_add + 1
Exit
EndIf
Next
ElseIf n > 0 Then
For i = 1 To n
end_str$ = end_str$ + "1"
Next
While str_t$ <> end_str$
str_t$ = Bin$(a_dec)
If Len(str_t$) > n% Then
str_t$ = Right (str_t$, n%)
ElseIf Len(str_t$) < n%
While Len(str_t$) < n%
str_t$ = "0" + str_t$
Wend
EndIf
rp_1_II = rp_add_hz_II (1)
rp_2_II = rp_add_hz_II (2)
rp_3_II = rp_add_hz_II (3)
rp_4_II = rp_add_hz_II (4)
For i = 1 To n%
add_ini$ = Mid$ (str_t$, i, 1)
If i = 1 And add_ini$ = "0" Then rp_1_II = 0
If i = 2 And add_ini$ = "0" Then rp_2_II = 0
If i = 3 And add_ini$ = "0" Then rp_3_II = 0
If i = 4 And add_ini$ = "0" Then rp_4_II = 0
Next
p_en_II = 0
If rp_1_II > 0 Then p_en_II = p_en_II + 1
If rp_2_II > 0 Then p_en_II = p_en_II + 1
If rp_3_II > 0 Then p_en_II = p_en_II + 1
If rp_4_II > 0 Then p_en_II = p_en_II + 1
P_sum_II# = Float(p_p_mode$(tp_2)) + Float(p_p_rp$(rp_1_II)) + Float(p_p_rp$(rp_2_II)) + Float(p_p_rp$(rp_3_II)) + Float(p_p_rp$(rp_4_II))
Q_sum_II# = Float(q_p_mode$(tp_2)) + Float(q_p_rp$(rp_1_II)) + Float(q_p_rp$(rp_2_II)) + Float(q_p_rp$(rp_3_II)) + Float(q_p_rp$(rp_4_II))
If n_tr_1 = 1 Then
P_sum_II# = P_sum_II# + Float(p_p_mode$(tp_1))
Q_sum_II# = Q_sum_II# + Float(q_p_mode$(tp_1))
EndIf
tg_II# = Q_sum_II# / P_sum_II#
Qqu_II# = P_sum_II# * (tg_II# - 0.33)
For ku = 1 To 32
If Int (ku_nom%(ku)) >= (Qqu_II# * 0.97) Then
Qqu_2_II# = ku_nom%(ku)
Exit
EndIf
If ku = 32 Then Qqu_2_II# = ku_nom%(32)
Next
S_sum_II# = Sqr(P_sum_II#^2 + (Q_sum_II# - Qqu_2_II#)^2)
For e_II = 1 To 8
k_z_II# = S_sum_II# / trans%(e_II)
If k_z_II# >= (k_z_1# - delta_kz#) And k_z_II# <= (k_z_2# + delta_kz#) Then
rp_1_ini = 1
rp_2_ini = 1
rp_3_ini = 1
rp_4_ini = 1
If rp_1_II > 0 And rp_to_TP (tp_2, rp_1_II, Float(s_p_rp$(rp_1_II))) = 0 Then rp_1_ini = 0
If rp_2_II > 0 And rp_to_TP (tp_2, rp_2_II, Float(s_p_rp$(rp_2_II))) = 0 Then rp_2_ini = 0
If rp_3_II > 0 And rp_to_TP (tp_2, rp_3_II, Float(s_p_rp$(rp_3_II))) = 0 Then rp_3_ini = 0
If rp_4_II > 0 And rp_to_TP (tp_2, rp_4_II, Float(s_p_rp$(rp_4_II))) = 0 Then rp_4_ini = 0
If rp_1_ini = 1 And rp_2_ini = 1 And rp_3_ini = 1 And rp_4_ini = 1 Then
P_dop_tp_2# = Float(p_p_rp$(rp_1_II)) + Float(p_p_rp$(rp_2_II)) + Float(p_p_rp$(rp_3_II)) + Float(p_p_rp$(rp_4_II))
Q_dop_tp_2# = Float(q_p_rp$(rp_1_II)) + Float(q_p_rp$(rp_2_II)) + Float(q_p_rp$(rp_3_II)) + Float(q_p_rp$(rp_4_II))
If TP_to_TP (tp_1, tp_2, k_z_II#, trans%(e_II), P_dop_tp_2#, Q_dop_tp_2#) > 0 Then
i_add = i_add + 1
rp_1_kz_TP_2_ini_return (i_add) = rp_1_II
rp_2_kz_TP_2_ini_return (i_add) = rp_2_II
rp_3_kz_TP_2_ini_return (i_add) = rp_3_II
rp_4_kz_TP_2_ini_return (i_add) = rp_4_II
EndIf
EndIf
If p_en_II >= 2 Then
kol_var = rp_add_rp (tp_2, rp_1_II, rp_2_II, rp_3_II, rp_4_II)
If kol_var > 0 Then
For i = 1 To kol_var
If rp_to_TP (tp_2, rp_add_rp_return_rp_1 (i), Float(s_p_rp$(rp_1_II))) > 0 Then
rp_1_ini = 1
rp_2_ini = 1
rp_3_ini = 1
rp_4_ini = 1
rp_1_t = 0
rp_2_t = 0
rp_3_t = 0
rp_4_t = 0
If rp_1_II > 0 And rp_add_rp_return_rp_1(i) <> rp_1_II And rp_add_rp_return_rp_2(i) <> rp_1_II And rp_add_rp_return_rp_3(i) <> rp_1_II And rp_add_rp_return_rp_4(i) <> rp_1_II Then rp_1_ini = 0
If rp_2_II > 0 And rp_add_rp_return_rp_1(i) <> rp_2_II And rp_add_rp_return_rp_2(i) <> rp_2_II And rp_add_rp_return_rp_3(i) <> rp_2_II And rp_add_rp_return_rp_4(i) <> rp_2_II Then rp_2_ini = 0
If rp_3_II > 0 And rp_add_rp_return_rp_1(i) <> rp_3_II And rp_add_rp_return_rp_2(i) <> rp_3_II And rp_add_rp_return_rp_3(i) <> rp_3_II And rp_add_rp_return_rp_4(i) <> rp_3_II Then rp_3_ini = 0
If rp_4_II > 0 And rp_add_rp_return_rp_1(i) <> rp_4_II And rp_add_rp_return_rp_2(i) <> rp_4_II And rp_add_rp_return_rp_3(i) <> rp_4_II And rp_add_rp_return_rp_4(i) <> rp_4_II Then rp_4_ini = 0
If rp_1_ini = 0 Then
If rp_to_TP (tp_2, rp_1_II, Float(s_p_rp$(rp_1_II))) = 1 Then
rp_1_ini = 1
rp_1_t = rp_1_II
EndIf
EndIf
If rp_2_ini = 0 Then
If rp_to_TP (tp_2, rp_2_II, Float(s_p_rp$(rp_2_II))) = 1 Then
rp_2_ini = 1
rp_2_t = rp_2_II
EndIf
EndIf
If rp_3_ini = 0 Then
If rp_to_TP (tp_2, rp_3_II, Float(s_p_rp$(rp_3_II))) = 1 Then
rp_3_ini = 1
rp_3_t = rp_3_II
EndIf
EndIf
If rp_4_ini = 0 Then
If rp_to_TP (tp_2, rp_4_II, Float(s_p_rp$(rp_4_II))) = 1 Then
rp_4_ini = 1
rp_4_t = rp_4_II
EndIf
EndIf
If rp_1_ini = 1 And rp_2_ini = 1 And rp_3_ini = 1 And rp_4_ini = 1 Then
P_dop_tp_2# = Float(p_p_rp$(rp_add_rp_return_rp_1(i))) + Float(p_p_rp$(rp_add_rp_return_rp_2(i))) + Float(p_p_rp$(rp_add_rp_return_rp_3(i))) + Float(p_p_rp$(rp_add_rp_return_rp_4(i))) + Float(p_p_rp$(rp_1_t)) + Float(p_p_rp$(rp_2_t)) + Float(p_p_rp$(rp_3_t)) + Float(p_p_rp$(rp_4_t))
Q_dop_tp_2# = Float(q_p_rp$(rp_add_rp_return_rp_1(i))) + Float(q_p_rp$(rp_add_rp_return_rp_2(i))) + Float(q_p_rp$(rp_add_rp_return_rp_3(i))) + Float(q_p_rp$(rp_add_rp_return_rp_4(i))) + Float(q_p_rp$(rp_1_t)) + Float(q_p_rp$(rp_2_t)) + Float(q_p_rp$(rp_3_t)) + Float(q_p_rp$(rp_4_t))
If n_tr_1 = 1 Then
P_dop_tp_2# = P_dop_tp_2# + Float(p_p_mode$(tp_1))
Q_dop_tp_2# = Q_dop_tp_2# + Float(q_p_mode$(tp_1))
EndIf
If TP_to_TP (tp_1, tp_2, k_z_II#, trans%(e_II), P_dop_tp_2#, Q_dop_tp_2#) > 0 Then
i_add = i_add + 1
rp_1_kz_TP_2_ADD_return (i_add) = rp_add_rp_return_rp_1(i)
rp_2_kz_TP_2_ADD_return (i_add) = rp_add_rp_return_rp_2(i)
rp_3_kz_TP_2_ADD_return (i_add) = rp_add_rp_return_rp_3(i)
rp_4_kz_TP_2_ADD_return (i_add) = rp_add_rp_return_rp_4(i)
If rp_1_t > 0 Then rp_1_kz_TP_2_ini_return (i_add) = rp_1_t
If rp_2_t > 0 Then rp_2_kz_TP_2_ini_return (i_add) = rp_2_t
If rp_3_t > 0 Then rp_3_kz_TP_2_ini_return (i_add) = rp_3_t
If rp_4_t > 0 Then rp_4_kz_TP_2_ini_return (i_add) = rp_4_t
EndIf
EndIf
EndIf
Next
EndIf
EndIf
Exit
EndIf
Next
a_dec = a_dec + 1
Wend
EndIf
Return i_add
EndIf
End Function
Function TP_to_TP(tp_1, tp_2, k_z_2#, s_nom_tr_tp_2, P_dop_tp_2#, Q_dop_tp_2#)
; только если ТП-1 > 0 и ТП-2 > 0 и Кз > 0 и Sном > 0
; проверка возможности резервирования одной ТП II категории к другой ТП
; k_z_2# - расчетный коэффициент загрузки резервируемой ТП-2
; s_nom_tr_tp_2 - номинальная мощность трансформаторов резервируемой ТП-2
;P_dop_tp_2# - суммарная активная мощность РП, подключенных к резервируемой ТП-2
;Q_dop_tp_2# - суммарная реактивная мощность РП, подключенных к резервируемой ТП-2
If tp_1 > 0 And tp_2 > 0 And k_z_2# > 0 And s_nom_tr_tp_2 > 0 Then
For i = 1 To 8
If trans (i) = s_nom_tr_tp_2 Then
i_add = i
Exit
EndIf
Next
If trans (i_add) = 0 Then Return 0
ras_nagr# = Float(p_p_mode$(tp_2)) + P_dop_tp_2#
ras_q# = Float(q_p_mode$(tp_2)) + Q_dop_tp_2#
For ku = 1 To 32
If Int(ku_nom%(ku)) >= ((ras_nagr# * (ras_q#/ras_nagr# - 0.33)) * 0.97) Then
q_qu_2 = ku_nom%(ku)
Exit
EndIf
If ku = 32 Then q_qu_2 = ku_nom%(32)
Next
If tp_type$(tp_2) = "ТСЗ" Then
delta_p_tp# = delta_p_xx_tsz#(i_add) + (delta_p_kz_tsz#(i_add) * (k_z_2#^2))
delta_q_xx# = (t_xx_tsz# (i_add) * s_nom_tr_tp_2) / 100
delta_q_kz# = (u_kz_tsz# (i_add) * s_nom_tr_tp_2) / 100
delta_q_tp# = delta_q_xx# + (delta_q_kz# * (k_z_2#^2))
Else
delta_p_tp# = delta_p_xx_tm#(i_add) + (delta_p_kz_tm#(i_add) * (k_z_2#^2))
delta_q_xx# = (t_xx_tm# (i_add) * s_nom_tr_tp_2) / 100
delta_q_kz# = (u_kz_tm# (i_add) * s_nom_tr_tp_2) / 100
delta_q_tp# = delta_q_xx# + (delta_q_kz# * (k_z_2#^2))
EndIf
While kl_ini = 0
n_line = n_line + 1
If n_line > 4 Then Return 0
s_nom_tp# = Sqr((ras_nagr# / n_line + delta_p_tp#)^2 + ((ras_q# - q_qu_2) / n_line + delta_q_tp#)^2)
i_r_nom# = s_nom_tp# / (Sqr(3) * 0.4)
i_r_nom_dop# = i_r_nom# / k_1_koef#(n_line)
If kl_04_ini(tp_1, tp_2, i_r_nom_dop#) > 0 Then Return 1
Wend
EndIf
End Function
Function rp_to_TP(tp, rp, S_sum_rp#)
; только если ТП и РП больше 0
; проверка возможности подключения одной РП (или связки) к ТП
; S_sum_rp# - суммарная мощность связки РП
If tp > 0 And rp > 0 And S_sum_rp# <= 330 Then
While kl_ini = 0
n_line = n_line + 1
If n_line > 2 Then Return 0
i_r# = S_sum_rp# / (n_line * Sqr(3) * 0.4)
If kl_04_ini(tp, rp_ini(rp), i_r#) > 0 Then Return 1
Wend
EndIf
End Function
Function kl_04_ini(obj_1, obj_2, i_r#)
l_kl_tp# = min_dist_ceh_to_ceh# (obj_1, obj_2)
For acb = 4 To 12
If Float(tok_acb_04$ (acb)) >= (i_r# * 1.05) Then
L_dop# = Float(d_p_acb_04$(acb)) * 5 * (Float(tok_acb_04$(acb)) / i_r#)
If l_kl_tp# < L_dop# Then Return s_acb_04$(acb)
EndIf
If acb = 12 Then
Return 0
EndIf
Next
End Function
Function kl_vv_ini(obj_1, obj_2, i_r#)
;If Int(u_raspred$) = 6 Then
;For acb = 4 To 12
;If Float(tok_aasv_6$ (acb)) >= (i_r#*1.05) And Float(s_aasv_6$(acb)) >= (I_r_n# / 1.4) * 1.1 Then
;acb_tp = acb
;L_dop# = Float(L_dp_aasv_6$(acb_tp)) * 10 * (Float(tok_aasv_6$ (acb)) / i_r#)
;Exit
;EndIf
;Next
;ElseIf Int(u_raspred$) = 10 Then
;For acb = 3 To 11
;If Float(tok_aasv_10$ (acb)) >= (i_r#*1.05) And Float(s_aasv_10$(acb)) >= (I_r_n# / 1.4) * 1.1 Then
;acb_tp = acb
;L_dop# = Float(L_dp_aasv_10$(acb_tp)) * 10 * (Float(tok_aasv_10$ (acb)) / i_r#)
;Exit
;EndIf
;Next
;EndIf
End Function
Function rp_to_rp(rp_1, rp_2, S_sum_rp#)
; только если РП-1 и РП-2 больше 0
; проверка возможности подключения одной РП (или связки) к РП [addable]
; S_sum_rp# - суммарная мощность связки РП
If rp_1 > 0 And rp_2 > 0 And S_sum_rp# <= 330 And (rp_ini(rp_1) <> rp_ini(rp_2)) Then
While kl_ini = 0
n_line = n_line + 1
If n_line > 2 Then Return 0
i_r# = S_sum_rp# / (n_line * Sqr(3) * 0.4)
If kl_04_ini(rp_ini(rp_1), rp_ini(rp_2), i_r#) > 0 Then Return 1
Wend
EndIf
End Function
Function rp_add_rp(tp, rp_1, rp_2, rp_3, rp_4)
; учитывает варианты, в которых ТП > 0 и количество РП - 2 и более
; перебор всех возможных связок из РП (взаимоподключаемых по магистрали и без)
If tp > 0 Then
p_en = 0
Dim rp_add_hz (5)
If rp_1 > 0 Then
p_en = p_en + 1
rp_add_hz (p_en) = rp_1
EndIf
If rp_2 > 0 Then
p_en = p_en + 1
rp_add_hz (p_en) = rp_2
EndIf
If rp_3 > 0 Then
p_en = p_en + 1
rp_add_hz (p_en) = rp_3
EndIf
If rp_4 > 0 Then
p_en = p_en + 1
rp_add_hz (p_en) = rp_4
EndIf
EndIf
If p_en >= 2 Then
For q = 1 To p_en
If q = 1 Then
n_III = p_en - 1
end_str_III$ = ""
str_t_III$ = ""
a_dec_III = 0
For i = 1 To n_III
end_str_III$ = end_str_III$ + "1"
Next
While str_t_III$ <> end_str_III$
str_t_III$ = Bin$(a_dec_III)
If Len(str_t_III$) > n_III Then
str_t_III$ = Right (str_t_III$, n_III)
ElseIf Len(str_t_III$) < n_III
While Len(str_t_III$) < n_III
str_t_III$ = "0" + str_t_III$
Wend
EndIf
rp_2_III = 0
rp_3_III = 0
rp_4_III = 0
rp_1_III = rp_add_hz (q)
For i = 2 To p_en
add_ini_III$ = Mid$ (str_t_III$, (i - 1), 1)
If i = 2 And add_ini_III$ = "1" Then rp_2_III = rp_add_hz(2)
If i = 3 And add_ini_III$ = "1" Then rp_3_III = rp_add_hz(3)
If i = 4 And add_ini_III$ = "1" Then rp_4_III = rp_add_hz(4)
Next
S_sum_rp# = rp_add_ini (tp, rp_1_III, rp_2_III, rp_3_III, rp_4_III)
If S_sum_rp# > 0 Then
rp_add_rp_ini = rp_add_rp_ini + 1
rp_add_rp_return_rp_1 (rp_add_rp_ini) = rp_1_III
rp_add_rp_return_rp_2 (rp_add_rp_ini) = rp_2_III
rp_add_rp_return_rp_3 (rp_add_rp_ini) = rp_3_III
rp_add_rp_return_rp_4 (rp_add_rp_ini) = rp_4_III
EndIf
a_dec_III = a_dec_III + 1
Wend
ElseIf q = 2 Then
n_III = p_en - 1
end_str_III$ = ""
str_t_III$ = ""
a_dec_III = 0
For i = 1 To n_III
end_str_III$ = end_str_III$ + "1"
Next
While str_t_III$ <> end_str_III$
str_t_III$ = Bin$(a_dec_III)
If Len(str_t_III$) > n_III Then
str_t_III$ = Right (str_t_III$, n_III)
ElseIf Len(str_t_III$) < n_III
While Len(str_t_III$) < n_III
str_t_III$ = "0" + str_t_III$
Wend
EndIf
rp_2_III = 0
rp_3_III = 0
rp_4_III = 0
rp_1_III = rp_add_hz (q)
For i = 2 To p_en
add_ini_III$ = Mid$ (str_t_III$, (i - 1), 1)
If i = 2 And add_ini_III$ = "1" Then rp_2_III = rp_add_hz(1)
If i = 3 And add_ini_III$ = "1" Then rp_3_III = rp_add_hz(3)
If i = 4 And add_ini_III$ = "1" Then rp_4_III = rp_add_hz(4)
Next
S_sum_rp# = rp_add_ini (tp, rp_1_III, rp_2_III, rp_3_III, rp_4_III)
If S_sum_rp# > 0 Then
rp_add_rp_ini = rp_add_rp_ini + 1
rp_add_rp_return_rp_1 (rp_add_rp_ini) = rp_1_III
rp_add_rp_return_rp_2 (rp_add_rp_ini) = rp_2_III
rp_add_rp_return_rp_3 (rp_add_rp_ini) = rp_3_III
rp_add_rp_return_rp_4 (rp_add_rp_ini) = rp_4_III
EndIf
a_dec_III = a_dec_III + 1
Wend
ElseIf q = 3 Then
n_III = p_en - 1
end_str_III$ = ""
str_t_III$ = ""
a_dec_III = 0
For i = 1 To n_III
end_str_III$ = end_str_III$ + "1"
Next
While str_t_III$ <> end_str_III$
str_t_III$ = Bin$(a_dec_III)
If Len(str_t_III$) > n_III Then
str_t_III$ = Right (str_t_III$, n_III)
ElseIf Len(str_t_III$) < n_III
While Len(str_t_III$) < n_III
str_t_III$ = "0" + str_t_III$
Wend
EndIf
rp_2_III = 0
rp_3_III = 0
rp_4_III = 0
rp_1_III = rp_add_hz (q)
For i = 2 To p_en
add_ini_III$ = Mid$ (str_t_III$, (i - 1), 1)
If i = 2 And add_ini_III$ = "1" Then rp_2_III = rp_add_hz(1)
If i = 3 And add_ini_III$ = "1" Then rp_3_III = rp_add_hz(2)
If i = 4 And add_ini_III$ = "1" Then rp_4_III = rp_add_hz(4)
Next
S_sum_rp# = rp_add_ini (tp, rp_1_III, rp_2_III, rp_3_III, rp_4_III)
If S_sum_rp# > 0 Then
rp_add_rp_ini = rp_add_rp_ini + 1
rp_add_rp_return_rp_1 (rp_add_rp_ini) = rp_1_III
rp_add_rp_return_rp_2 (rp_add_rp_ini) = rp_2_III
rp_add_rp_return_rp_3 (rp_add_rp_ini) = rp_3_III
rp_add_rp_return_rp_4 (rp_add_rp_ini) = rp_4_III
EndIf
a_dec_III = a_dec_III + 1
Wend
ElseIf q = 4 Then
n_III = p_en - 1
end_str_III$ = ""
str_t_III$ = ""
a_dec_III = 0
For i = 1 To n_III
end_str_III$ = end_str_III$ + "1"
Next
While str_t_III$ <> end_str_III$
str_t_III$ = Bin$(a_dec_III)
If Len(str_t_III$) > n_III Then
str_t_III$ = Right (str_t_III$, n_III)
ElseIf Len(str_t_III$) < n_III
While Len(str_t_III$) < n_III
str_t_III$ = "0" + str_t_III$
Wend
EndIf
rp_2_III = 0
rp_3_III = 0
rp_4_III = 0
rp_1_III = rp_add_hz (q)
For i = 2 To p_en
add_ini_III$ = Mid$ (str_t_III$, (i - 1), 1)
If i = 2 And add_ini_III$ = "1" Then rp_2_III = rp_add_hz(1)
If i = 3 And add_ini_III$ = "1" Then rp_3_III = rp_add_hz(2)
If i = 4 And add_ini_III$ = "1" Then rp_4_III = rp_add_hz(3)
Next
S_sum_rp# = rp_add_ini (tp, rp_1_III, rp_2_III, rp_3_III, rp_4_III)
If S_sum_rp# > 0 Then
rp_add_rp_ini = rp_add_rp_ini + 1
rp_add_rp_return_rp_1 (rp_add_rp_ini) = rp_1_III
rp_add_rp_return_rp_2 (rp_add_rp_ini) = rp_2_III
rp_add_rp_return_rp_3 (rp_add_rp_ini) = rp_3_III
rp_add_rp_return_rp_4 (rp_add_rp_ini) = rp_4_III
EndIf
a_dec_III = a_dec_III + 1
Wend
EndIf
Next
EndIf
Return rp_add_rp_ini
End Function
Function rp_add_ini#(tp = 0, rp_1, rp_2 = 0, rp_3 = 0, rp_4 = 0)
; только если количество подключаемых РП 2 и более, иначе возвращает 0
; проверка возможности создания магистралей(связок) из РП, подключенных к ТП
If rp_1 > 0 And (rp_2 > 0 Or rp_3 > 0 Or rp_4 > 0) And (rp_ini(rp_1) <> rp_ini(rp_2)) And (rp_ini(rp_1) <> rp_ini(rp_3)) And (rp_ini(rp_1) <> rp_ini(rp_4)) Then
S_sum_rp# = Float(s_p_rp$(rp_1))
If rp_2 > 0 Then S_sum_rp# = S_sum_rp# + Float(s_p_rp$(rp_2))
If rp_3 > 0 Then S_sum_rp# = S_sum_rp# + Float(s_p_rp$(rp_3))
If rp_4 > 0 Then S_sum_rp# = S_sum_rp# + Float(s_p_rp$(rp_4))
If rp_to_TP (tp, rp_1, S_sum_rp#) = 1 Or (tp = 0 And S_sum_rp# <= 330) Then
rp_2_ini = 1
rp_3_ini = 1
rp_4_ini = 1
If rp_2 > 0 And rp_to_rp (rp_1, rp_2, Float(s_p_rp$(rp_2))) = 0 Then rp_2_ini = 0
If rp_3 > 0 And rp_to_rp (rp_1, rp_3, Float(s_p_rp$(rp_3))) = 0 Then rp_3_ini = 0
If rp_4 > 0 And rp_to_rp (rp_1, rp_4, Float(s_p_rp$(rp_4))) = 0 Then rp_4_ini = 0
If rp_2_ini = 1 And rp_3_ini = 1 And rp_4_ini = 1 Then
Return S_sum_rp#
Else
Return 0
EndIf
Else
Return -1
EndIf
Else
Return -1
EndIf
End Function
Function min_dist_ceh_to_ceh#(ceh_1, ceh_2, mode = 0)
; mode = 0 - сумма катетов; 1 - гипотенуза
kol_line_do = 0
kol_line_do_2 = 0
If kol_objects_mode <> kol_objects Then
ceh_1 = obj_st_2_ini(ceh_1)
ceh_2 = obj_st_2_ini(ceh_2)
EndIf
For k = 1 To (ceh_1 - 1)
kol_line_do = kol_line_do + kol_line (k)
Next
For k = 1 To (ceh_2 - 1)
kol_line_do_2 = kol_line_do_2 + kol_line (k)
Next
Dim l_point#(kol_objects + 1, kol_objects + 1, kol_line (ceh_1) + 1, kol_line (ceh_2) + 1)
For k = 1 To kol_line (ceh_1)
For kt = 1 To kol_line (ceh_2)
l_point# (ceh_1, ceh_2, k, kt) = Float(mashtab$) * (Sqr(((x1(kol_line_do + k) - x1(kol_line_do_2 + kt))^2) + ((y1(kol_line_do + k) - y1(kol_line_do_2 + kt))^2)))
If l_point# (ceh_1, ceh_2, k, kt) = 0 Then l_point# (ceh_1, ceh_2, k, kt) = 20
Next
Next
min_dist_c_2_c# = l_point#(ceh_1, ceh_2, 1, 1)
For k = 1 To kol_line (ceh_1)
For kt = 1 To kol_line (ceh_2)
If l_point#(ceh_1, ceh_2, k, kt) < min_dist_c_2_c# Then
min_dist_c_2_c# = l_point#(ceh_1, ceh_2, k, kt)
min_dist_c_2_c_x_1 = x1(kol_line_do + k)
min_dist_c_2_c_y_1 = y1(kol_line_do + k)
min_dist_c_2_c_x_2 = x1(kol_line_do_2 + kt)
min_dist_c_2_c_y_2 = y1(kol_line_do_2 + kt)
ElseIf l_point#(ceh_1, ceh_2, k, kt) = min_dist_c_2_c# Then
min_dist_c_2_c_2# = l_point#(ceh_1, ceh_2, k, kt)
min_dist_c_2_c_x_1_2 = x1(kol_line_do + k)
min_dist_c_2_c_y_1_2 = y1(kol_line_do + k)
min_dist_c_2_c_x_2_2 = x1(kol_line_do_2 + kt)
min_dist_c_2_c_y_2_2 = y1(kol_line_do_2 + kt)
EndIf
Next
Next
If min_dist_c_2_c_2# <> min_dist_c_2_c#
min_dist_c_2_c_x_1_2 = 0
min_dist_c_2_c_y_1_2 = 0
min_dist_c_2_c_x_2_2 = 0
min_dist_c_2_c_y_2_2 = 0
EndIf
;Color 255, 255, 255
;Line min_dist_c_2_c_x_1(ceh_1, ceh_2), min_dist_c_2_c_y_1(ceh_1, ceh_2), min_dist_c_2_c_x_2(ceh_1, ceh_2), min_dist_c_2_c_y_2(ceh_1, ceh_2)
;Line min_dist_c_2_c_x_1_2(ceh_1, ceh_2), min_dist_c_2_c_y_1_2(ceh_1, ceh_2), min_dist_c_2_c_x_2_2(ceh_1, ceh_2), min_dist_c_2_c_y_2_2(ceh_1, ceh_2)
If mode = 1 Then
Return min_dist_c_2_c#
ElseIf mode = 0 Then
If min_dist_c_2_c_x_1 > min_dist_c_2_c_x_2 Then
d_x = min_dist_c_2_c_x_1 - min_dist_c_2_c_x_2
Else
d_x = min_dist_c_2_c_x_2 - min_dist_c_2_c_x_1
EndIf
If min_dist_c_2_c_y_1 > min_dist_c_2_c_y_2 Then
d_y = min_dist_c_2_c_y_1 - min_dist_c_2_c_y_2
Else
d_y = min_dist_c_2_c_y_2 - min_dist_c_2_c_y_1
EndIf
min_dist_c_2_c# = 1.06 * Float(mashtab$) * (d_x + d_y)
If min_dist_c_2_c# = 0 Then min_dist_c_2_c# = 20
Return min_dist_c_2_c#
EndIf
End Function
|