Запуск этого скрипта в DM приводит к следующей ошибке во время первого выполнения. Последующие выполнения терпят неудачу на SPOpen(1,9600,1,0,8), что, я думаю, подразумевает, что последовательный порт открыт в этот момент, но первое выполнение говорит, что это не так.
Какая непредвиденная ошибка препятствует обмену данными с последовательным портом?
SPOpen(1,9600,1,0,8)
SPOpen( "COM1" )
SPSendString(1, "*IDN?" )
string message
number test
message = SPReceiveString(1,8,test)
Result("Acquisition "+message+" "+test+"\n")
SPClose(1)
В настоящий момент я не могу сам протестировать последовательные команды, и точный код сценария, конечно, зависит от того, что находится на другом конце последовательного соединения, то есть что ожидается и что отправляется обратно. А также какие тайм-ауты/задержки следует ожидать и учитывать. Однако я вижу две непосредственные проблемы с вашим сценарием:
Я ожидаю, что ваш скрипт будет выглядеть примерно так:
number port = 666
number baud = 9600
number stop = 10
number parity = 0
number data = 8
number portID
try
{
portID = SPOpen( port, baud, stop, parity, data )
Result( "\n Port ("+port+") opened, Handle ID: " + portID )
Result( "\n Sending messge:" + message )
string message = "*IDN?"
SPSendString( portID, message )
Result( "\n messge send." )
// Wait for response
Result( "\n Waiting for response." )
sleep( 0.3 )
number pendingBytes = SPGetPendingBytes(portID)
Result( "\n Pending bytes:" + pendingBytes )
number maxLength = 50
number bytes_back
string reply
while( pendingBytes > 1 )
{
reply += SPReceiveString( portID, maxLength, bytes_back )
pendingBytes = SPGetPendingBytes(portID)
}
Result( "\n Reply:" + Reply )
}
catch
{
// Any thrown error end up here.
// Ensures the port will not remain open
Result( "ERROR OCCURRED.\n" )
break
}
SPClose( portID )
Result( "\n Port ("+port+") closed, using Handle ID: " + portID )
Приведенный выше код является непроверенным и, безусловно, потребует некоторой адаптации, но он должен помочь вам начать работу. Вам могут понадобиться некоторые «задержки» при ожидании результата, и вы можете захотеть дождаться определенных результатов в цикле while.