Как указать внутреннюю часть столбца в HYSYS через Excel VBA Automation? - PullRequest
0 голосов
/ 07 января 2019

Я построил шаблон моделирования в Aspen HYSYS V9 и хочу перенести данные для внутренних элементов столбца, таких как внутренний тип, тип лотка / упаковки и конечная стадия, из листа Excel в HYSYS с помощью VBA Automation. Я не нашел внутренних объектов в браузере объектов, поэтому я попытался получить доступ к внутренним объектам с помощью переменной backdoor. Чтобы выяснить это прозвище, я записал скрипт, в котором я открыл «внутреннюю» страницу столбца и изменил тип с «трейдинг» на «упакованный» и обратно на «трейдинг». Скрипт показывает следующее:

Message "FlowSht.1/UnitOpObject.400(Regenerator)" "view"
Message "FlowSht.1/UnitOpObject.400(Regenerator)/FlowSht.600" "MakeMeActiveColumnOp"
SpecWhileSolving Specify "FlowSht.1/UnitOpObject.400(Regenerator)" ":Enum.590.0"  0.000000000000e+000 
SpecWhileSolving Specify "FlowSht.1/UnitOpObject.400(Regenerator)" ":Enum.590.0"  0.000000000000e+000
SpecWhileSolving Message "FlowSht.1/UnitOpObject.400(Regenerator)/FlowSht.600" "MakeMeActiveColumnOp"
Specify "FlowSht.1/UnitOpObject.400(Regenerator)" ":PageNumber.0"  1.000000000000e+001
SpecWhileSolving Specify "Utility.300(Internals-1@Main Tower@COL4)" ":Index.709"  0.000000000000e+000
Specify "Utility.300(Internals-1@Main Tower@COL4)" ":Index.709"  0.000000000000e+000
SpecWhileSolving Specify "Utility.300(Internals-1@Main Tower@COL4)" ":Selection.711.0"  1.000000000000e+000
Specify "Utility.300(Internals-1@Main Tower@COL4)" ":Index.709"  0.000000000000e+000
Specify "Utility.300(Internals-1@Main Tower@COL4)" ":Index.709"  0.000000000000e+000
SpecWhileSolving Specify "Utility.300(Internals-1@Main Tower@COL4)" ":Selection.711.0"  0.000000000000e+000
Specify "Utility.300(Internals-1@Main Tower@COL4)" ":Index.709"  0.000000000000e+000

Тогда я написал следующий код VBA:

Dim hyfs As Flowsheet
Dim hyfsBD As BackDoor
Dim hyBDVar As RealVariable

Set hyfs = hycase.Flowsheet
Set hyfsBD = hyfs

Set hyBDVar = hyfsBD.BackDoorVariable("Utility.300(Internals-1@Main Tower@COL1)" & ":Selection.711.0").Variable

hyBDVar.SetValue 1, ""

Но возвращаемое значение hyBDVar равно -32767, и я получаю сообщение об ошибке: «Метод« Задать значение »для объекта« InternalRealVariable »завершился неудачей».

1 Ответ

0 голосов
/ 08 января 2019

Так что я вроде нашел решение сам, но это поднимает другой вопрос. Можно указать внутреннюю часть столбца, обратившись к вспомогательной таблице столбца. Я обнаружил моникеры, используя тот же метод, что и выше, и скрипт показал следующее:

Message "FlowSht.1/UnitOpObject.400(Absorber)/FlowSht.600/UnitOpObject.400(Main Tower)" "CloseViewX"
Message "FlowSht.1/UnitOpObject.400(Absorber)/FlowSht.600/UnitOpObject.400(Main Tower)" "view"
Specify "FlowSht.1/UnitOpObject.400(Absorber)/FlowSht.600/UnitOpObject.400(Main Tower)" ":Enum.591.1"  0.000000000000e+000
Specify "FlowSht.1/UnitOpObject.400(Absorber)/FlowSht.600/UnitOpObject.400(Main Tower)" ":Enum.591.1"  0.000000000000e+000
Specify "FlowSht.1/UnitOpObject.400(Absorber)/FlowSht.600/UnitOpObject.400(Main Tower)/TrayStageData.550" ":Selection.201"  0.000000000000e+000
Specify "FlowSht.1/UnitOpObject.400(Absorber)/FlowSht.600/UnitOpObject.400(Main Tower)/TrayStageData.550" ":Selection.201"  1.000000000000e+000
Specify "FlowSht.1/UnitOpObject.400(Absorber)/FlowSht.600/UnitOpObject.400(Main Tower)/TrayStageData.550" ":Selection.201"  3.000000000000e+000
Specify "FlowSht.1/UnitOpObject.400(Absorber)/FlowSht.600/UnitOpObject.400(Main Tower)/TrayStageData.550" ":Selection.201"  2.000000000000e+000

Значения 0,1,3 и 2 соответствуют типам внутренних колонн: Сито, Клапан, Крышка пузыря и Упаковка.

Следующий код работает для этой спецификации:

Dim hyfs As Flowsheet
Dim hyfsBD As BackDoor
Dim hyBDVar As RealVariable

Set hyfs = hycase.Flowsheet
Set hyfsBD = hyfs

Set hyBDVar = hyfsBD.BackDoorVariable("UnitOpObject.400(Absorber)/FlowSht.600/UnitOpObject.400(Main Tower)/TrayStageData.550:Selection.201").Variable

hyBDVar.SetValue 1, ""

В этом случае столбец указывается как столбец клапана.

При выборе типа колонки с упаковкой можно выбрать упаковочный материал, используя эту переменную бэкдора:

hyBDVar = hyfsBD.BackDoorVariable("UnitOpObject.400(Absorber)/FlowSht.600/UnitOpObject.400(Main Tower):ExtraData.523.0).Variable

Другие названия для внутренних спецификаций можно узнать, записав скрипт и изменив спецификации в подсписке.

Остается вопрос, как получить доступ к гидравлическим участкам, как составить спецификации для этих участков и почему переменная бэкдора, упомянутая в вопросе, не сработала для этого. Но я отправлю новый вопрос для этого.

...