首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DM SerialControl通信

DM SerialControl通信
EN

Stack Overflow用户
提问于 2019-02-07 03:26:53
回答 1查看 110关注 0票数 1

在DM中运行此脚本会导致在第一次执行期间出现以下错误。随后的执行在SPOpen(1,9600,1,0,8)上失败,我认为这意味着串行端口在那时是打开的,但第一次执行表明它没有打开。

阻止与串行端口通信的意外错误是什么?

代码语言:javascript
复制
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)
EN

回答 1

Stack Overflow用户

发布于 2019-02-07 06:21:30

我现在不能自己测试串行命令,确切的脚本代码当然取决于串行连接的另一端是什么,即期望什么和返回什么。以及需要预期和关注的超时/延迟。但是,我可以看到您的脚本中有两个直接问题:

  • 'SPOpen()‘命令返回一个ID值。您需要在后续命令中使用此ID,而不是脚本失败的端口(即抛出和错误),关闭端口的命令永远不会执行,它将保持打开状态(并因此被阻止)。为了防止出现这种情况,您可以使用“Try{}Catch{}”构造。

我希望你的脚本看起来更像下面这样:

代码语言:javascript
复制
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循环中等待特定的结果。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54561157

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档