Скрипт для управления термостатом Termex Topic is solved

Помощь в написании скриптов
fizhimikRUS

Скрипт для управления термостатом Termex  Topic is solved

Post by fizhimikRUS » 12 May 2023, 08:53

Помогите с написанием скрипта для управления М12М (Блок регулирования температуры).
К сожалению штатным образом нельзя уменьшить скорость нагрева/охлаждения и придется вводить команду в консоль фирменного ПО (у нас версия только с портом USB).
Необходимо вводить команду ":00012178 SET.VAL WR Temp", где Temp - десятичное число с 2 знаками после запятой, например 60.00. При этом, требуется увеличивать число Temp на 0.01 каждый час и вводить команду в консоль. То есть начальная температура например 5.00, через час 5.01, через еще час 5.02...

mcl
Posts: 357
Joined: 04 May 2018, 16:35

Re: Скрипт для управления термостатом Termex

Post by mcl » 12 May 2023, 18:43

fizhimikRUS wrote: Помогите с написанием скрипта для управления М12М (Блок регулирования температуры).
К сожалению штатным образом нельзя уменьшить скорость нагрева/охлаждения и придется вводить команду в консоль фирменного ПО (у нас версия только с портом USB).
Необходимо вводить команду ":00012178 SET.VAL WR Temp", где Temp - десятичное число с 2 знаками после запятой, например 60.00. При этом, требуется увеличивать число Temp на 0.01 каждый час и вводить команду в консоль. То есть начальная температура например 5.00, через час 5.01, через еще час 5.02...
Звучит столь же абсурдно, сколь изобретательно.

Примерный код под AHK.v1/v2 (отличия незначительные). Запускается сочетанием Ctrl+F12. Останавливается через Shift+F12.
Предельную температуру, вероятно, можно установить через SET.MAX заранее, но пусть будет и в коде.
Если в консоль попадают не все символы, придётся поиграться с SendMode/SetKeyDelay.
Гарантий работоспособности, понятное дело, дать не могу.

AHK.v1
AHK.v2
github://oGDIp - GDI+ wrapper for AHK v1.1

fizhimik
Posts: 6
Joined: 12 May 2023, 08:32

Re: Скрипт для управления термостатом Termex

Post by fizhimik » 15 May 2023, 03:14

Спасибо большое! Все прекрасно работает!
Spoiler
"Звучит столь же абсурдно, сколь изобретательно." - а кто же знал что ограничение снизу по охлаждению/нагреву 0.01 град/мин? При уменьшении скорости - термостат сразу выходит на конечную температуру. И при заказе термостата я решил не парится с управлением по RS485/232 и сказал брать термостат без доп. интерфейсов, типа все на блоке управления настраивается с минимум телодвижений.
Теперь встает вопрос: можно ли привязать скрипт непосредственно к программе MasterGraph.exe от Термекса, чтобы можно было параллельно работать за компом? Или ставить виртуалку, (пробрасывать порт?) и запускать прогу+скрипт там и пущай крутится там 5 суток по плану?

mcl
Posts: 357
Joined: 04 May 2018, 16:35

Re: Скрипт для управления термостатом Termex

Post by mcl » 15 May 2023, 11:58

fizhimik wrote: можно ли привязать скрипт непосредственно к программе MasterGraph.exe от Термекса, чтобы можно было параллельно работать за компом?
Можно попробовать отсылать команды через ControlSend, найдя идентификатор консоли через Window Spy (этот скрипт идёт в комплекте с AHK, можно запустить через меню иконки в трее). Если с консолью не получится, может, выйдет автоматизировать через поле „Температуры“ (ControlSetText) и кнопку „Изменить“ (ControlClick).
github://oGDIp - GDI+ wrapper for AHK v1.1

fizhimik
Posts: 6
Joined: 12 May 2023, 08:32

Re: Скрипт для управления термостатом Termex

Post by fizhimik » 16 May 2023, 03:11

mcl wrote:
15 May 2023, 11:58
fizhimik wrote: можно ли привязать скрипт непосредственно к программе MasterGraph.exe от Термекса, чтобы можно было параллельно работать за компом?
Можно попробовать отсылать команды через ControlSend, найдя идентификатор консоли через Window Spy (этот скрипт идёт в комплекте с AHK, можно запустить через меню иконки в трее). Если с консолью не получится, может, выйдет автоматизировать через поле „Температуры“ (ControlSetText) и кнопку „Изменить“ (ControlClick).
Спасибо, попробую.
Еще вопрос: а можно из консоли фирменного ПО прочитать ответ от прибора? Прибор не всегда записывает команды = нет ответа от него. Хочется сделать все по красоте, чтобы был повторный посыл команды в случае ошибки.

mcl
Posts: 357
Joined: 04 May 2018, 16:35

Re: Скрипт для управления термостатом Termex

Post by mcl » 16 May 2023, 05:42

fizhimik wrote: Еще вопрос: а можно из консоли фирменного ПО прочитать ответ от прибора?
Предположительно, через тот же класс (идентификатор) консоли и ControlGetText.
github://oGDIp - GDI+ wrapper for AHK v1.1

fizhimik
Posts: 6
Joined: 12 May 2023, 08:32

Re: Скрипт для управления термостатом Termex

Post by fizhimik » 16 May 2023, 10:23

Спасибо! Подскажите как должна выглядеть правильно команда для ControlSendText, а то все скрипт ругается, а что не пойму. По примеру на страничке гайда не смог разобраться.

mcl
Posts: 357
Joined: 04 May 2018, 16:35

Re: Скрипт для управления термостатом Termex

Post by mcl » 16 May 2023, 11:38

fizhimik wrote: Спасибо! Подскажите как должна выглядеть правильно команда для ControlSendText, а то все скрипт ругается, а что не пойму. По примеру на страничке гайда не смог разобраться.

Code: Select all

; F1 - демонстрация ControlGetText/ControlSend
F1::
DetectHiddenWindows On

If Not WinExist("ahk_exe calc.exe") {
	Run, calc.exe
	WinWaitActive, ahk_exe calc.exe
}

ControlGetText, myVar, Static4, ahk_exe calc.exe
MsgBox, %myVar%

ControlSend, Static4, 1234, ahk_exe calc.exe

Sleep 100
ControlGetText, myVar, Static4, ahk_exe calc.exe
MsgBox, %myVar%
Return
Attachments
calcstatic4.png
calcstatic4.png (55.26 KiB) Viewed 1671 times
github://oGDIp - GDI+ wrapper for AHK v1.1

fizhimik
Posts: 6
Joined: 12 May 2023, 08:32

Re: Скрипт для управления термостатом Termex

Post by fizhimik » 17 May 2023, 05:03

К сожалению, не смог ваш пример воспроизвести. Что я делаю не так? Видимо затык в ClassNN? Для моего калькулятора он ApplicationFrameInputSinkWindow1 по любому полю а не Static4 как у вас.
Если пробовать notepad.exe то работает.
Spoiler

fizhimik
Posts: 6
Joined: 12 May 2023, 08:32

Re: Скрипт для управления термостатом Termex

Post by fizhimik » 17 May 2023, 08:54

Видимо консоль выцепить не получится.
Spoiler
Хотя поле ввода уставки отображается в Window Spy нормально и читается.
Как тогда можно сделать через -- "Если с консолью не получится, может, выйдет автоматизировать через поле „Температуры“ (ControlSetText) и кнопку „Изменить“ (ControlClick)."?
Через ControlSetText что то через раз получается, но не понимаю как. Кнопка "Изменить" то же определяется
Spoiler
И почему то ваш код требует AutoHotkey 1.1

mcl
Posts: 357
Joined: 04 May 2018, 16:35

Re: Скрипт для управления термостатом Termex

Post by mcl » 17 May 2023, 10:13

fizhimik wrote: К сожалению, не смог ваш пример воспроизвести.
Ваш калькулятор написан с применением новейших технологий, на которые AHK не рассчитан. Способы есть, но они зело мудрёны.
Видимо, консоль выцепить не получится.
На скринах не увидел, почему не получится. Класс есть, но текст не извлекается?
Через ControlSetText что-то через раз получается, но не понимаю как.
В смысле, через раз? Можете показать ваш код?
ControlSetText и ControlSend — две разные команды. Первая просто меняет текст в контроле (на это программа может не реагировать), вторая посылает в контрол нажатия клавиш.
И почему-то ваш код требует AutoHotkey 1.1
Потому что AHK.v1 в разы более распространён, и в нём и у меня, и у сообщества больше опыта, а AHK.v2 только в прошлом году вышел из беты — пока не слишком уверенно на нём пишу. Ну и в вашей постановке задачи про версию ничего не было сказано.
github://oGDIp - GDI+ wrapper for AHK v1.1

fizhimik
Posts: 6
Joined: 12 May 2023, 08:32

Re: Скрипт для управления термостатом Termex

Post by fizhimik » 17 May 2023, 11:28

На скринах не увидел, почему не получится. Класс есть, но текст не извлекается?
Да, класс одинаков для двух вкладок в программе, плюс обратил внимание, что Windows Spy читает только самую верхнюю строчку
Spoiler
В смысле, через раз? Можете показать ваш код?
Да это не код, а обрезок вашего для баловства, в нем только команда
ControlSetText, TLabeledEdit1, 17, ahk_exe MasterGraph.exe
Вставляется цифра 17, но только если курсор установлен в поле Уставка.
ControlSetText и ControlSend — две разные команды. Первая просто меняет текст в контроле (на это программа может не реагировать), вторая посылает в контрол нажатия клавиш.
Да я просто подвис в какую сторону нужно работать, вставлять в поле значение а затем нажимать изменить? Мозг кипит уже, прокатит так или нет. Хотелось что бы прокатило, может таким образом блок управления будет адекватно работать.
Сейчас блок управляется через консольную команду в виртуалке по вашему самому первому коду, но к сожалению блок управления бывает подвисает на 30 минут и не отвечает на консольную команду, но главное что команды в консоль пишутся.
По сути пока все работает как то, но хочется повыпендриваться. Но познаний не хватает. Если что вот скрин с кодом кнопки изменить.
Spoiler
Потому что AHK.v1 в разы более распространён, и в нём и у меня, и у сообщества больше опыта, а AHK.v2 только в прошлом году вышел из беты — пока не слишком уверенно на нём пишу. Ну и в вашей постановке задачи про версию ничего не было сказано.
Это не претензия, это я сам не понял почему скрипт попросил установить версию 1.1

mcl
Posts: 357
Joined: 04 May 2018, 16:35

Re: Скрипт для управления термостатом Termex

Post by mcl » 17 May 2023, 13:01

fizhimik wrote: Да, класс одинаков для двух вкладок в программе, плюс обратил внимание, что Windows Spy читает только самую верхнюю строчку.

ControlSetText, TLabeledEdit1, 17, ahk_exe MasterGraph.exe
Вставляется цифра 17, но только если курсор установлен в поле Уставка.

Да я просто подвис в какую сторону нужно работать, вставлять в поле значение а затем нажимать изменить? Мозг кипит уже, прокатит так или нет.
Увы, удалённо такие вещи решать — только головную боль множить. „Прокатит или нет“ можно узнать только через эксперименты in vivo.

Window Spy читает одну строку только чтобы показать, что что-то всё-таки можно прочесть. То, что классы одинаковые, наверное, некритично, если есть возможность оставить открытой вкладку с консолью. Экспериментируйте с ControlGetText / ControlSend.

Только определитесь с версией AHK, там синтаксис и поведение хоть и похожи, но всё же не одинаковы.

Code: Select all

ControlSetText,  Control,  NewText,    WinTitle   ; AHK.v1
ControlSetText   "Text",   "Control",  WinTitle   ; AHK.v2
github://oGDIp - GDI+ wrapper for AHK v1.1

Post Reply

Return to “Помощь”