Our full technical support staff does not monitor this forum. If you need assistance from a member of our staff, please submit your question from the Ask a Question page.


Log in or register to post/reply in the forum.

Iridium SBD help


eb1689 May 25, 2010 03:27 PM

I'm trying to initiate short burst data transfer from either a CR10X or CR1000 to an Iridium A3LAXM modem. There seems to be plenty of advice in the manuals for initiating telecommunications with dial-up connections, but I can't find anything at all on setting up SBD.
I have tried using a simple solution with a serial out command (Ins 96) or serial output (Ins 15) but predictably this doesn't work.
I presume Ins 97 is the correct command, but how do I address the modem without initiating callback?

Leaving for the field in 2 days, any help at all would be appreciated!
Thanks.


aps May 25, 2010 04:52 PM

I think you will not get very far with a CR10X in making this work as the protocol is not straightforward. If you want to try tackle this then this technical note for sending SMS text messages would be a good base, but you are on your own otherwise:

http://www.campbellsci.co.uk/index.cfm?id=1018

If you would like to send me your email details I may have another program I can email you as a starter for the CR1000. My email is:

andrew dot sandford at campbellsci dot co dot uk


Arctic Elder - CRREL May 28, 2010 08:23 PM

I have not tried this on a CR10X but have played around a little with the CR1000.

The big thing with communication with the 9522 iridium modem was that you need to set the modem up for 3 wire communication. TO do this I had to attached to the computer in hyperterminal
Send it
AT&DK0 - set to ignore DTR from device
AT&K0 - set to NO flow control
AT&W0 - save current profile as default
AT&Y0 - save profile 0 as default

Then the first thing in my program that I had to do was always set the baud rate to what you are expecting, with the AT+IPR command
Also I found that I needed to send teh ATV1 command to keep it communicating in text.

Then the normal RS232 Serialin and serialout commands worked. I am assuming it would be the same with the Instr. 15 commands and a CR10.

Trying out the commands hooked to hyperterminal was a great help as you could see what the transmitter echoed and what it did not which affects your serial in commands.


eb1689 Jul 21, 2010 09:51 AM

Hi again all,
A quick progress report: thanks to your great advice I almost got everything working in time, using the CR1000. The hyperterminal hint in particular was fantastic.
I think I was missing some hardware to get the logger to talk to the modem (I was hoping that what I had in house would suffice. It didn't), but I got the logger to respond to the hyperterminal commands and the modem to put the right commands out to the hyperterminal, so I'm all set for next season.

Thanks again for your help.


Grant Jul 21, 2010 11:03 PM

I got it working well with the above AT commands and then used the AT+SBDWT and AT+SBDI to prepare and send the message.

Then built a null modem lead for between the CSIO port and modem.

Works like a charm.


Sudat Oct 30, 2012 09:25 AM

Dear Sir,

I am trying to interface Iridium 9602B modem for SBD transfer.
I have to remotely transfer the min,max and average of parameters from remote station to my central station.
I can't find any examples of programming a serial modem (specially Iridium modem) and handle the responses from the modem. Please could you tell what i can do

Thank You
Sudat


Grant Oct 30, 2012 10:54 AM

Here is a program I used to test a message via SBD on a CR800.

'CR8
'Created by Grant Millar
'Environmental Monitoring Solutions Qld
'+61417300119
'grant@emsqld.com
'
'Program to send message via Short Burst Data (SBD) with Beam Communications RST600 Iridium satellite modem
'
'Program written - 21st July 2010
'
'Declare Public Variables
Public PTemp, batt_volt
Public TxString As String * 500

'Define Data Tables
DataTable (Test,1,-1)
DataInterval (0,1,Hr,10)
Minimum (1,batt_volt,FP2,0,False)
Sample (1,PTemp,FP2)
EndTable

'Define Subroutines
Sub IridiumTx
'Open Com2 at 19200 baud
SerialOpen(ComME,115200,3,0,400)
'Send AT command and wait for OK response
SerialOut(ComME,"AT"+CHR(13),"OK",10,10)

SerialClose(ComME)
EndSub

'Main Program
BeginProg
Scan (20,Sec,0,0)
PanelTemp (PTemp,250)
Battery (Batt_volt)
'Define string to be sent to modem buffer
TxString="Battery Voltage="+FormatFloat(Batt_Volt,"%2.2f")+" Volts."+" Panel temperature="+FormatFloat(PTemp,"%2.2f")+" Deg C"
If IfTime (0,1,min) Then
Call (IridiumTx)
EndIf
CallTable Test
NextScan
EndProg


Hope it helps

Cheers

Grant


aps Oct 30, 2012 11:07 AM

I think there is at least one line missing in that program (the one that sends the command to transmit the string)?

* Last updated by: aps on 10/30/2012 @ 5:07 AM *


Grant Oct 30, 2012 11:19 AM

Goodness Andrew, you are correct.

Try this one

'Declare Public Variables
Const TxStringMaxLen = 420

Public PTemp, batt_volt
Public TxString As String * TxStringMaxLen + 1

'Define Data Tables
DataTable (Test,1,1000)
DataInterval (0,60,Sec,10)
Minimum (1,batt_volt,FP2,0,False)
Sample (1,PTemp,FP2)
EndTable

'Define Subroutines
Sub IridiumTx
SerialOpen(ComME,19200,3,0,400)
SerialOut(ComME,"AT"+CHR(13)+CHR(10),"OK",1,10)
SerialOut(ComME,"AT+SBDWT="+TxString+CHR(13),"",1,10)
SerialOut(ComME,"AT+SBDI"+CHR(13),"",1,10)
SerialClose(ComME)
EndSub

'Main Program
BeginProg
Scan (20,Sec,0,0)
PanelTemp (PTemp,250)
Battery (Batt_volt)
TxString="Battery Voltage="+FormatFloat(Batt_Volt,"%2.2f")+" Volts."+" Panel temperature="+FormatFloat(PTemp,"%2.2f")+" Deg C"
If IfTime (0,1,min) Then
Call (IridiumTx)
EndIf
CallTable Test
NextScan
EndProg


Dysprosium Nov 10, 2016 04:59 AM

Awesome!   This program works on the 9602LP also!


ZMS May 1, 2017 10:28 PM

Hi Grant (and anyone... everyone!),

This is already a few years old now.  Your test program worked great with an SBD modem I am using - thanks!

I'm currently trying to add 'retry' functionality using your script as a starter, however am having issues grabbing serial data to initiate retries. 

I've tried a few things, but the one that made the most sense was to use SerialInRecord following the SBDI command:

Public SBDI_Output As String

'.....

SerialOut(ComRS232,"AT+SBDI"+CHR(13),"",1,10)
SerialInRecord(ComRS232,SBDI_Output,&H3A,0,&H4B,Num_Bytes_Ret,01)

**The HEX designate obvious flags within the SBDI echo. 

In this case, SBDI_Output would be a string containing transmission characteristics (i.e. 0,1,2 values) that I could then parse and use to establish retries. 

However - the SerialIn commands dont produce any data. 

Curious if anyone can give advice either on implementing a protocol for SBD retries, or any ideas on why SerialIn commands are not working here.

I'm testing this on a CR300. 

Thanks and good day!

Best,

Zach


JDavis May 1, 2017 10:38 PM

This is part of a program I used before. I used the wait string parameter of the SerialOut to advance the receive buffer up to the point of the result code from the modem. This is missing the AT commands, which you already have figured out.

 

Sub SendSBD(Result(4) As String * 32,ComPort,Source(4) As String * 360)
  Dim SBD_TxResult As Long
  Dim i As Long
  Dim k As Long
  For i = 1 To 4
    If Source(i) <> "" Then
      For k = 1 To num_retries 'enter number of retries here
        SerialFlush (ComPort)
        SerialOut(ComPort,Source(i),"OK",1,200)
        SerialFlush(ComPort)
        SerialOut(ComPort,IridiumTx,"+SBDI: ",1,5000)
        SerialIn (Result(i),ComPort,100,0,100)
        SplitStr (SBD_TxResult,Result(i),",",1,0)
        If SBD_TxResult <> 1 Then
          Delay(1,5,sec)
        Else
          ExitFor
        EndIf
      Next k

      Source(i) = ""
    EndIf
  Next i

EndSub

 


ZMS May 1, 2017 11:43 PM

Thank you -

Working through it a bit, a few questions:

> Source refers to respective AT commands - as many as I'd like to push along?  Thus, I"d pre-define source text arrays prior to the sub routine?  And submit the array integer to the sub routine....?

> Do you apply SerialOpen/Serial Close in the main program before/after calling the sub routine?

> What are your 4 result arrays?  Result(4) also needs pre-definition to receive SBD output. I'm guessing these are message number, successful transission, etc.?

Still trying to understand as it seems to be a neat, but completely different approach!

thanks again!

z


ZMS May 5, 2017 07:49 PM

Got it figured out - thank you!

z

Log in or register to post/reply in the forum.