How can I get or wait for the result code of an AT Command without using the Sleep() function in PowerBuilder? I am using the MSComm OLE Control for PowerBuilder. Could I do a While Loop unti the MSCOmm.Input property returns the proper buffer?(e.g, OK) However, I tried this but the Input returns an empty string.
Here is my PB Code:
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
And here is the port settings:
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
Any suggestions? Or am I doing something wrong?
Indeed instead of waiting for an amount of time, you could read some returned data from the
Inputproperty. TheATxxcommand set to communicate with modems is a far memory to me, but in most cases the modem returns anOKif the command succeded. Maybe that you have to tweak the input parametersAfter some data was sent, wait until
OKis returned to the serial line (idea adapted from the official MSComm example, untested):You would also need to adapt that code in cases where the
ATcommand fails, I dunno how the error is returned to the serial line.Edit: used the
Right()func as suggested by OP in case where the commands are echoed in the modem answers