如何获取或等待 AT 命令的结果代码?

How to get or wait for the result code of an AT Command?

如何在不使用 PowerBuilder 中的 Sleep() 函数的情况下获取或等待 AT 命令的结果代码?我正在使用 PowerBuilder 的 MSComm OLE 控件。我可以做一个 While 循环直到 MSCOmm.Input 属性 returns 正确的缓冲区吗?(例如,OK)但是,我试过了但是 Input returns 一个空字符串。

这是我的 PB 代码:

String numbers[]

numbers[1] = "+639394854493"
numbers[2] = "+639394854491"
numbers[3] = "+639394854492"
numbers[4] = "+639394854493"
numbers[5] = "+639394854494"

int cnt = 1 
for cnt = 1 to 5
    Sleep(0.5)
    ole_1.object.Output = "AT" + Char(13) + Char(10)
    Sleep(0.5)
    ole_1.object.Output = "AT+CMGF=1" + Char(13) + Char(10)
    Sleep(0.5)
    ole_1.object.Output = "AT+CMGS=" + Char(34) + numbers[cnt] + Char(34) + Char(13) + Char(10)
    Sleep(0.5)
    ole_1.object.Output = sle_2.text + " - " + string(cnt) + Char(26)
next

这里是端口设置:

ole_1.object.CommPort = 7
ole_1.object.Settings = "115200,n,8,1"
ole_1.object.RThreshold = 1
ole_1.object.InputLen = 0
ole_1.object.InputMode = 0
ole_1.object.PortOpen = True

有什么建议吗?还是我做错了什么?

实际上,您可以从 Input 属性 中读取一些返回的数据,而不是等待一段时间。 ATxx 命令设置为与调制解调器通信对我来说是一个遥远的记忆,但在大多数情况下,如果命令成功,调制解调器 returns 和 OK。也许你必须调整输入参数

发送完一些数据后,等到OK返回串口线(思路改编自official MSComm example,未经测试):

ole_1.object.InputLen = 0 //Tell the control to read entire buffer when Input is used.
ole_1.object.Output = "AT+CMGF=1" + Char(13) + Char(10)
string ls_inp
Do
  Yield()
  ls_inp += ole_1.object.Input
Loop Until Right(ls_inp, 5) = " OK" + Char(13) + Char(10)

如果 AT 命令失败,您还需要修改该代码,我不知道错误是如何返回到串行线路的。

编辑:使用OP建议的Right() func,以防命令在调制解调器应答中回显