如何获取或等待 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,以防命令在调制解调器应答中回显
如何在不使用 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,以防命令在调制解调器应答中回显