Quote from: jitterjames on February 06, 2019, 07:49:04 AM
Unfortunately VC.SetEventTimer uses seconds as the smallest unit of time.
To get a half second you would need another method such as VC.Pause, which uses milliseconds.
Спасибо за ответ!
HOT TIP! Exploring the commands packaged in VC's standard configurations is a great way to learn how to build your own. You can also clone a command as a starting point: just right-click and select "Clone" (or type Alt-C).
This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.
Show posts MenuQuote from: jitterjames on February 06, 2019, 07:49:04 AM
Unfortunately VC.SetEventTimer uses seconds as the smallest unit of time.
To get a half second you would need another method such as VC.Pause, which uses milliseconds.
Quote from: nime5ter on February 02, 2019, 12:00:27 PM
You do not need a separate folder for each command, unless it helps you to find commands in your command tree.
Each unique command must use its own variable. Otherwise, the two commands interfere with one another.
In the XML that you posted, you were using the same variable ({var.mode}) to control two separate functions ("flaps" and "radiators").
I have now deleted all{var.mode} references and replaced it with two unique variables: {var.flaps} and {var.radiators}.
The following commands function. I do not know if they accomplish what you need, but they work.


<?xml version="1.0" encoding="utf-8" ?>
- <VoiceCommands version="2.2.1.6" space="preserve" date="2/6/2019 12:00:00 AM">
<groupCollection open="False" name="Flysim" />
- <commandGroup open="True" name="Закрылки" enabled="True" prefix="" priority="0" requiredProcess="" description="">
- <command id="211" name="Закрылки" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
- <if ifBlockDisabled="False" ifNot="False">
<ifType>(A)==(B)</ifType>
<ifParams>{var.eventFLAPS}&&True</ifParams>
- <then>
- <action>
<cmdType>TTS.Speak</cmdType>
- <params>
<param>Выполняется предыдущая команда закрылки.</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
- <action>
<cmdType>VC.StopMacro</cmdType>
<params />
<cmdRepeat>1</cmdRepeat>
</action>
</then>
<else />
</if>
- <if ifBlockDisabled="False" ifNot="False">
<ifType>(A)==(B)</ifType>
<ifParams>{var.flaps}&&</ifParams>
- <then>
- <action>
<cmdType>Results.SetVar</cmdType>
- <params>
<param>flaps</param>
<param>0</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
- <action>
<cmdType>VC.StopMacro</cmdType>
<params />
<cmdRepeat>1</cmdRepeat>
</action>
</then>
<else />
</if>
- <if ifBlockDisabled="False" ifNot="False">
<ifType>(A)==(B)</ifType>
<ifParams>{var.flaps}&&{1}</ifParams>
- <then>
- <action>
<cmdType>TTS.Speak</cmdType>
- <params>
<param>Закрылки в выбраной позиции.</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
- <action>
<cmdType>VC.StopMacro</cmdType>
<params />
<cmdRepeat>1</cmdRepeat>
</action>
</then>
<else />
</if>
- <if ifBlockDisabled="False" ifNot="False">
<ifType>(A)<(B)</ifType>
<ifParams>{var.flaps}&&{1}</ifParams>
- <then>
- <action>
<cmdType>PY.ExecString</cmdType>
- <params>
<param>result = abs({1} - {var.flaps})</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
- <action>
<cmdType>TTS.Speak</cmdType>
- <params>
<param>Выпуск закрылок через {LastResult} секунд</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
- <action>
<cmdType>DxInput.KeyDown</cmdType>
- <params>
<param>F</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
- <action>
<cmdType>VC.SetEventTimer</cmdType>
- <params>
<param>{LastResult}s</param>
<param>releaseKey</param>
<param>F</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
- <action>
<cmdType>Results.SetVar</cmdType>
- <params>
<param>eventFLAPS</param>
<param>True</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
- <action>
<cmdType>Results.SetVar</cmdType>
- <params>
<param>flaps</param>
<param>{1}</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
</then>
- <else>
- <action>
<cmdType>PY.ExecString</cmdType>
- <params>
<param>result = abs({var.flaps} - {1})</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
- <action>
<cmdType>TTS.Speak</cmdType>
- <params>
<param>Уборка закрылок через {LastResult} секунд</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
- <action>
<cmdType>DxInput.KeyDown</cmdType>
- <params>
<param>K</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
- <action>
<cmdType>VC.SetEventTimer</cmdType>
- <params>
<param>{LastResult}s</param>
<param>releaseKey</param>
<param>K</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
- <action>
<cmdType>Results.SetVar</cmdType>
- <params>
<param>eventFLAPS</param>
<param>True</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
- <action>
<cmdType>Results.SetVar</cmdType>
- <params>
<param>flaps</param>
<param>{1}</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
</else>
</if>
<phrase>Закрылки</phrase>
<payloadFromXML phraseOnly="False" use2partPhrase="False" phraseConnector="by" Phrase2wildcard="anyone" optional="False">payloads\flaps.xml</payloadFromXML>
<event>vc.loaded</event>
</command>
- <command id="307" name="release key" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
- <action>
<cmdType>DxInput.KeyUp</cmdType>
- <params>
<param>{1}</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
- <action>
<cmdType>DxInput.KeyUp</cmdType>
- <params>
<param>{2}</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
- <action>
<cmdType>Results.SetVar</cmdType>
- <params>
<param>eventFLAPS</param>
<param>False</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
- <action>
<cmdType>TTS.Speak</cmdType>
- <params>
<param>Есть!</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<event>releaseKey</event>
</command>
</commandGroup>
- <commandGroup open="True" name="Радиаторы" enabled="True" prefix="" priority="0" requiredProcess="" description="">
- <command id="193" name="Радиаторы" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
- <if ifBlockDisabled="False" ifNot="False">
<ifType>(A)==(B)</ifType>
<ifParams>{var.eventRADS}&&True</ifParams>
- <then>
- <action>
<cmdType>TTS.Speak</cmdType>
- <params>
<param>Выполняется предыдущая команда радиаторы.</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
- <action>
<cmdType>VC.StopMacro</cmdType>
<params />
<cmdRepeat>1</cmdRepeat>
</action>
</then>
<else />
</if>
- <if ifBlockDisabled="False" ifNot="False">
<ifType>(A)==(B)</ifType>
<ifParams>{var.rads}&&</ifParams>
- <then>
- <action>
<cmdType>Results.SetVar</cmdType>
- <params>
<param>rads</param>
<param>0</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
- <action>
<cmdType>VC.StopMacro</cmdType>
<params />
<cmdRepeat>1</cmdRepeat>
</action>
</then>
<else />
</if>
- <if ifBlockDisabled="False" ifNot="False">
<ifType>(A)==(B)</ifType>
<ifParams>{var.rads}&&{3}</ifParams>
- <then>
- <action>
<cmdType>TTS.Speak</cmdType>
- <params>
<param>Створки выбраной позиции.</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
- <action>
<cmdType>VC.StopMacro</cmdType>
<params />
<cmdRepeat>1</cmdRepeat>
</action>
</then>
<else />
</if>
- <if ifBlockDisabled="False" ifNot="False">
<ifType>(A)<(B)</ifType>
<ifParams>{var.rads}&&{3}</ifParams>
- <then>
- <action>
<cmdType>PY.ExecString</cmdType>
- <params>
<param>result = abs({3} - {var.rads})</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
- <action>
<cmdType>TTS.Speak</cmdType>
- <params>
<param>Открою через {LastResult} секунд</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
- <action>
<cmdType>DxInput.KeyDown</cmdType>
- <params>
<param>z</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
- <action>
<cmdType>VC.SetEventTimer</cmdType>
- <params>
<param>{LastResult}s</param>
<param>releaseKey</param>
<param>z</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
- <action>
<cmdType>Results.SetVar</cmdType>
- <params>
<param>eventRADS</param>
<param>True</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
- <action>
<cmdType>Results.SetVar</cmdType>
- <params>
<param>rads</param>
<param>{3}</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
</then>
- <else>
- <action>
<cmdType>PY.ExecString</cmdType>
- <params>
<param>result = abs({var.rads} - {3})</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
- <action>
<cmdType>TTS.Speak</cmdType>
- <params>
<param>Закрою через {LastResult} секунд</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
- <action>
<cmdType>DxInput.KeyDown</cmdType>
- <params>
<param>x</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
- <action>
<cmdType>VC.SetEventTimer</cmdType>
- <params>
<param>{LastResult}s</param>
<param>releaseKey</param>
<param>x</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
- <action>
<cmdType>Results.SetVar</cmdType>
- <params>
<param>eventRADS</param>
<param>True</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
- <action>
<cmdType>Results.SetVar</cmdType>
- <params>
<param>rads</param>
<param>{3}</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
</else>
</if>
<phrase>Радиаторы</phrase>
<payloadFromXML phraseOnly="False" use2partPhrase="False" phraseConnector="by" Phrase2wildcard="anyone" optional="False">payloads\radiators.xml</payloadFromXML>
<event>vc.loaded</event>
</command>
- <command id="288" name="release key" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
- <action>
<cmdType>DxInput.KeyUp</cmdType>
- <params>
<param>{3}</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
- <action>
<cmdType>DxInput.KeyUp</cmdType>
- <params>
<param>{4}</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
- <action>
<cmdType>Results.SetVar</cmdType>
- <params>
<param>eventRADS</param>
<param>False</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
- <action>
<cmdType>TTS.Speak</cmdType>
- <params>
<param>Есть!</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<event>releaseKey</event>
</command>
</commandGroup>
</VoiceCommands>

<?xml version="1.0" encoding="utf-8"?>
<VoiceCommands version="2.2.1.6" space="preserve" date="1/31/2019 12:00:00 AM">
<groupCollection open="True" name="Flysim">
<commandGroup open="True" name="Закрылки" enabled="True" prefix="" priority="0" requiredProcess="" description="">
<command id="178" name="Закрылки" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
<if ifBlockDisabled="False" ifNot="False">
<ifType>(A)==(B)</ifType>
<ifParams>{var.eventSet}&&True</ifParams>
<then>
<action>
<cmdType>TTS.Speak</cmdType>
<params>
<param>Выполняется предыдущая команда.</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>VC.StopMacro</cmdType>
<params />
<cmdRepeat>1</cmdRepeat>
</action>
</then>
<else />
</if>
<if ifBlockDisabled="False" ifNot="False">
<ifType>(A)==(B)</ifType>
<ifParams>{var.mode}&&</ifParams>
<then>
<action>
<cmdType>Results.SetVar</cmdType>
<params>
<param>mode</param>
<param>0</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>VC.StopMacro</cmdType>
<params />
<cmdRepeat>1</cmdRepeat>
</action>
</then>
<else />
</if>
<if ifBlockDisabled="False" ifNot="False">
<ifType>(A)==(B)</ifType>
<ifParams>{var.mode}&&{1}</ifParams>
<then>
<action>
<cmdType>TTS.Speak</cmdType>
<params>
<param>Закрылки в выбраной позиции.</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>VC.StopMacro</cmdType>
<params />
<cmdRepeat>1</cmdRepeat>
</action>
</then>
<else />
</if>
<if ifBlockDisabled="False" ifNot="False">
<ifType>(A)<(B)</ifType>
<ifParams>{var.mode}&&{1}</ifParams>
<then>
<action>
<cmdType>PY.ExecString</cmdType>
<params>
<param>result = abs({1} - {var.mode})</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>TTS.Speak</cmdType>
<params>
<param>Выпуск закрылок через {LastResult} секунд</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>DxInput.KeyDown</cmdType>
<params>
<param>F</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>VC.SetEventTimer</cmdType>
<params>
<param>{LastResult}s</param>
<param>releaseKey</param>
<param>F</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>Results.SetVar</cmdType>
<params>
<param>eventSet</param>
<param>True</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>Results.SetVar</cmdType>
<params>
<param>mode</param>
<param>{1}</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
</then>
<else>
<action>
<cmdType>PY.ExecString</cmdType>
<params>
<param>result = abs({var.mode} - {1})</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>TTS.Speak</cmdType>
<params>
<param>Уборка закрылок через {LastResult} секунд</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>DxInput.KeyDown</cmdType>
<params>
<param>K</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>VC.SetEventTimer</cmdType>
<params>
<param>{LastResult}s</param>
<param>releaseKey</param>
<param>K</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>Results.SetVar</cmdType>
<params>
<param>eventSet</param>
<param>True</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>Results.SetVar</cmdType>
<params>
<param>mode</param>
<param>{1}</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
</else>
</if>
<phrase>Закрылки</phrase>
<payloadFromXML phraseOnly="False" use2partPhrase="False" phraseConnector="by" Phrase2wildcard="anyone" optional="False">payloads\flaps.xml</payloadFromXML>
<event>vc.loaded</event>
</command>
<command id="274" name="release key" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
<action>
<cmdType>DxInput.KeyUp</cmdType>
<params>
<param>{1}</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>DxInput.KeyUp</cmdType>
<params>
<param>{2}</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>Results.SetVar</cmdType>
<params>
<param>eventSet</param>
<param>False</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>TTS.Speak</cmdType>
<params>
<param>Есть!</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<event>releaseKey</event>
</command>
</commandGroup>
<commandGroup open="True" name="Радиаторы" enabled="True" prefix="" priority="0" requiredProcess="" description="">
<command id="180" name="Радиторы" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
<if ifBlockDisabled="False" ifNot="False">
<ifType>(A)==(B)</ifType>
<ifParams>{var.eventSet}&&True</ifParams>
<then>
<action>
<cmdType>TTS.Speak</cmdType>
<params>
<param>Выполняется предыдущая команда.</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>VC.StopMacro</cmdType>
<params />
<cmdRepeat>1</cmdRepeat>
</action>
</then>
<else />
</if>
<if ifBlockDisabled="False" ifNot="False">
<ifType>(A)==(B)</ifType>
<ifParams>{var.mode}&&</ifParams>
<then>
<action>
<cmdType>Results.SetVar</cmdType>
<params>
<param>mode</param>
<param>0</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>VC.StopMacro</cmdType>
<params />
<cmdRepeat>1</cmdRepeat>
</action>
</then>
<else />
</if>
<if ifBlockDisabled="False" ifNot="False">
<ifType>(A)==(B)</ifType>
<ifParams>{var.mode}&&{1}</ifParams>
<then>
<action>
<cmdType>TTS.Speak</cmdType>
<params>
<param>Створки в выбраной позиции.</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>VC.StopMacro</cmdType>
<params />
<cmdRepeat>1</cmdRepeat>
</action>
</then>
<else />
</if>
<if ifBlockDisabled="False" ifNot="False">
<ifType>(A)<(B)</ifType>
<ifParams>{var.mode}&&{1}</ifParams>
<then>
<action>
<cmdType>PY.ExecString</cmdType>
<params>
<param>result = abs({1} - {var.mode})</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>TTS.Speak</cmdType>
<params>
<param>Открытие створок через {LastResult} секунд</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>DxInput.KeyDown</cmdType>
<params>
<param>Z</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>VC.SetEventTimer</cmdType>
<params>
<param>{LastResult}s</param>
<param>releaseKey</param>
<param>Z</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>Results.SetVar</cmdType>
<params>
<param>eventSet</param>
<param>True</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>Results.SetVar</cmdType>
<params>
<param>mode</param>
<param>{1}</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
</then>
<else>
<action>
<cmdType>PY.ExecString</cmdType>
<params>
<param>result = abs({var.mode} - {1})</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>TTS.Speak</cmdType>
<params>
<param>Закрытие створок через {LastResult} секунд</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>DxInput.KeyDown</cmdType>
<params>
<param>X</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>VC.SetEventTimer</cmdType>
<params>
<param>{LastResult}s</param>
<param>releaseKey</param>
<param>X</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>Results.SetVar</cmdType>
<params>
<param>eventSet</param>
<param>True</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>Results.SetVar</cmdType>
<params>
<param>mode</param>
<param>{1}</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
</else>
</if>
<phrase>Радиаторы</phrase>
<payloadFromXML phraseOnly="False" use2partPhrase="False" phraseConnector="by" Phrase2wildcard="anyone" optional="False">payloads\radiators.xml</payloadFromXML>
<event>vc.loaded</event>
</command>
<command id="276" name="release key" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
<action>
<cmdType>DxInput.KeyUp</cmdType>
<params>
<param>{1}</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>DxInput.KeyUp</cmdType>
<params>
<param>{2}</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>Results.SetVar</cmdType>
<params>
<param>eventSet</param>
<param>False</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>TTS.Speak</cmdType>
<params>
<param>Есть!</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<event>releaseKey</event>
</command>
</commandGroup>
</groupCollection>
</VoiceCommands>
))