1

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

这是我的 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

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

4

1 回答 1

0

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

发送一些数据后,等待OK返回到串口线(思路改编自官方MSComm示例,未测试):

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,我不知道错误是如何返回到串行线路的。

编辑Right()在调制解调器答案中回显命令的情况下,使用 OP 建议的函数

于 2015-10-09T09:13:40.803 回答