Почему этот LotusScript останавливается во время цикла? - PullRequest
0 голосов
/ 18 февраля 2010

Я пытаюсь написать LotusScript для управления двигателем. Кажется, что скрипт для чтения битов работает нормально, но я хочу добавить кнопку остановки. У меня есть все команды для остановки устройства, но проблема в том, что всякий раз, когда LotusScript запускает цикл, я не могу нажимать какие-либо другие кнопки.

Кто-нибудь знает способ обойти это ???

Сценарии, которые я использую, приведены ниже.

Спасибо, любезно.

Энди Барлоу

Sub readpositionsub Dim send_string As String
Dim readString As String Dim tempString As String readString = ""

REM Sets the "movement" cell to 6 (the movement int)
[b1].contents = "6"
Do While [b1].contents <> "7"

    readString = ""
    statusBitString = ""

    REM READ STATUS ===!!!===
    REM Open the handle to the motor
    handle =    init_RS232(19200)
    REM #1$ reads the status from the controller.
    send_string = "#1$"+Chr$(13)
    REM Ask the controller to store the results in bits
    resultStatus=write_RS232 (handle,send_string)

    REM Read Status by looping through all of the bits
    For n=0 To 8
        tempString = "*1234567"  
        sendReadCommand = read_RS232(handle,tempString)
        If Mid(tempString,1,1) = Chr$(13) Then
            Exit For
        Else
            statusBitString = statusBitString  + Mid(tempString,1,1)
        End If

    Next
    [b1].contents = Mid(statusBitString,7, 1)
    close_RS232(handle)
    REM End Read Status



    REM READ POSITION ===!!!===
    REM Open the handle to the motor
    handle =    init_RS232(19200)
    send_string = "#1C"+Chr$(13)
    t=write_RS232 (handle,send_string)  
    REM Reading Position
    For n=0 To 20
        tempString = "*1234567"  
        r = read_RS232(handle,tempString)
        If Mid(tempString,1,1) = Chr$(13) Then
            Exit For
        Else
            readString = readString + Mid(tempString,1,1)

        End If

    Next
    REM End Read Position
    [a1].contents=Mid(readString, 4)
    close_RS232(handle)

Loop

End Sub

И кнопка остановки, которая должна работать, должна быть ... Объект btnStop

Дополнительный щелчок (источник в виде кнопки) REM инициализация handle = init_RS232 (19200)

REM Create the string for starting the motor
send_string = "#1S"+Chr$(13)

REM Send the string for starting the motor
resultStartMotor=write_RS232 (handle,send_string)

REM Close the spin handle
close_RS232(handle)

End Sub

Ответы [ 2 ]

1 голос
/ 05 марта 2010

Если вы хотите отменить цикл, вам нужно поиграть с объектом таймера. По сути, вы запускаете время, которое выполняет одну итерацию вашего цикла. В начале вы ищете измененное значение поля или переменную ini, чтобы отменить таймер, если он установлен. Теперь вы можете использовать свою кнопку для установки этой переменной. Цикл будет работать намного медленнее, чем без таймера (после всего установленного интервала ожидания)

1 голос
/ 03 марта 2010

Вы не запускаете свой Lotusscript в многопоточной среде, так как вы ожидаете, что код на кнопке остановит уже запущенный код?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...