Monday, August 28, 2006

Measuring Transfer Delay of Circuit Switched Data calls in Cellular Networks

Here is the requirement from Document No. O-2475, ERTMS/GSM-R Quality of Service Test Specification
3.4 Transfer delay of user data frame
3.4.1 Definition:
This is the value of the elapsed time between the request for transfer of a data frame and the indication of successfully transferred end-to-end data frame.
3.4.2 Pre-conditions for measurement:
Measurement interfaces are IGSM(T) and IFIX(T), measurement point is IGSM(T)
Only successfully received user data frames (ie data frames received with a correct CRC check sum) are evaluated.
The length of data frame shall be 30 bytes.
The fixed side responding application is a test application responsible for echoing all incoming data frames back to the sender.
The response time of the test application shall be very small and negligible.
3.4.3 For measurement:
Round trip delay is an allowed measurement procedure.
The test is performed by sending and receiving bytes and in the test application represented by ASCII characters.
At IGSM(T), value of the half of elapsed time between start of transmission of a user data frame and end of reception of the same frame echoed back from B-subscriber terminal application is evaluated as transfer delay. The term 'user' refers to the user of the GSM-R bearer service.
3.4.4 Recommended tools:
Test application for control of terminal and automation (scripting).
Test terminal for tracking possible failure in automated test, and/or
Abis protocol analyser for tracking possible failure.
GPS for position information.


This was accomplished using Rexx scripts on two PCs connected to mobiles via the serial port. The Rexx script set up the connection between the two mobiles. On the initiator side, the script prints out a time stamp before it started transmitting data. On the receiving side, once the expected data has been received, a time stamp is again printed. According to the definition in the test defined above, the tranmission delay time is half the elapsed time between the two printed times.

Rexx Script for Originator:
/* INITIALIZATION + GET NUMBER */
OK=0
BUSY=0
FAIL=0
TOUT=0
ERROR=0
TIMEOUT=0
Speed="9600" /* Data Speed */
CALL ZocCls /* Clear Screen */
SAY "Initialization starts, please wait..."
CALL ZocSend "at+cr=1^M"
CALL ZOCDELAY 1
CALL ZocSend "at+crc=1^M"
CALL ZOCDELAY 1
CALL ZocSend "at+cmee=1^M"
CALL ZOCDELAY 1
CALL ZocSend "atx1^M"
CALL ZOCDELAY 1
CALL ZocSend "ats0=1^M"
CALL ZOCDELAY 1
CALL ZocSend "ats2=67^M"
CALL ZOCDELAY 1
SAY "Initialization done..."

/* Loop of data calls */
ZocSend "AT+CBST=71,0,0^M"

CALL ZOCDELAY 1 /* WAIT 1 SECOND */
CALL ZocTimeout 45
/* Dial the NUMBER */
/* CALL ZocSend "ATD"NUMBER"^M" */
CALL ZocSend "ATD8188074^M"

/* Check for the result */

DO LINE=1 TO 3
timeout=ZocGetLine()
IF timeout=640 THEN DO
TOUT=TOUT+1
SAY
SAY "XXXXX Timeout during Try " TRY "."
LEAVE LINE
END
IF LEFT(ZOCLASTLINE(),7)="CONNECT" THEN DO
OK=OK+1
CALL ZOCDELAY 4
timenow=time('L')
say 'Time' timenow
CALL ZocSend "00000000000000000000000000000" TRY
SAY ">>>>> Testtransfer " TRY " is sent."
CALL ZOCDELAY 1
ZocWait "<<<<< Testtransfer" /* to wait for answer from datacall_receive Script */
CALL ZOCDELAY 2
LEAVE LINE
END /* IF */
IF LEFT(ZOCLASTLINE(),4)="BUSY" THEN DO
CALL ZocBeep 1
BUSY=BUSY+1
LEAVE LINE
END /* IF */
IF LEFT(ZOCLASTLINE(),10)="NO CARRIER" THEN DO
CALL ZocBeep 1
FAIL=FAIL+1
LEAVE LINE
END /* IF */
IF LEFT(ZOCLASTLINE(),5)="ERROR" THEN DO
CALL ZocBeep 1
ERROR=ERROR+1
LEAVE LINE
END /* IF */
END LINE

CALL ZOCDELAY 5 /* WAIT 5 SECONDS */
CALL ZocSend "+++"
SAY
SAY "+++ IS SENT"

CALL ZOCDELAY 5 /* WAIT 5 SECONDS */
CALL ZocSend "ATH^M"

CALL ZOCDELAY 10 /* WAIT 10 SECONDS */


Rexx script for Terminator
/* REXX test script for receive of data calls */

/* INITIALIZATION + GET NUMBER */
OK=0 /* counter */
BUSY=0 /* counter */
FAIL=0 /* counter */
TIMEOUT=0 /* counter */
CALL ZocTimeout 60 /* timeout value for ZocWait */
Speed="9600" /* Data Speed */
CALL ZocCls /* Clear Screen */
SAY "Initialization starts, please wait..."
CALL ZocSend "at+cr=1^M"
CALL ZOCDELAY 1
CALL ZocSend "at+crc=1^M"
CALL ZOCDELAY 1
CALL ZocSend "at+cmee=1^M"
CALL ZOCDELAY 1
CALL ZocSend "atx1^M"
CALL ZOCDELAY 1
CALL ZocSend "ats0=1^M"
CALL ZOCDELAY 1
CALL ZocSend "ats2=67^M"
CALL ZOCDELAY 1
SAY "Initialization done..."

/* Loop of 100 data calls */
DO TRY=1 TO 10

CALL ZocSend "AT+CBST=71,0,0^M"

CALL ZOCDELAY 1 /* WAIT 1 SECOND */
SAY "---> Waiting for RING"

ZocWait "+CRING"
SAY "---> Waiting for CR"

ZocWait "+CR:"
SAY "---> Waiting for CONNECT"

ZocWait "CONNECT"
SAY "---> Waiting for DATA"

ZocWait "00000000000000000000000000000"
timenow=time('L')
say 'Time' timenow

CALL ZOCDELAY 1 /* WAIT 1 SECOND */
SAY
CALL ZocSend "<<<<< Testtransfer back: " TRY
SAY "<<<<< Testtransfer number " TRY " is sent back."
CALL ZOCDELAY 1 /* WAIT 1 SECOND */
SAY "---> Waiting for NO CARRIER"

ZocWait "NO CARRIER^M"
CALL ZOCDELAY 1 /* WAIT 1 SECOND */
SAY "##################################################################"

END TRY
CALL ZocBeep 2
  • Book reviews