Эмулятор AT

 

Эмулятор AT можно использовать для эмуляции AT-команд, также известных как набор команд Hayes, и команд GSM AT (см. ETSI GSM 07.07 и 3GPP TS 27.007). AT-команды обычно используются для взаимодействия с телефонами, модемами и другими устройствами связи. Большинство модемов GSM/3G/LTE/5G поддерживают ввод AT-команд через серийный порт, например: RS232 или USB. Иногда интерфейс AT реализуется через TCP или telnet.

Интерфейс AT

Эмулятор AT может быть полезен для тестирования различного коммуникационного ПО, для которого требуется модем. Если настоящий модем недоступен, вместо него можно использовать данный эмулятор. Использование эмулятора также сокращает риски выхода из строя настоящих модемов в ходе интенсивного тестирования. Эмулятор также можно использовать для тестирования AT-команд.

Эмулятор AT поддерживает два интерфейса: консольный и сетевой (TCP либо telnet). Консольный интерфейс можно использовать напрямую, запустив эмулятор через командную строку. Чтобы использовать сетевой интерфейс TCP или telnet, необходимо предварительно указать порт TCP в командном файле. Любой эмулятор терминала, например telnet в Linux / Unix или PuTTY в Windows, можно использовать для подключения к порту TCP.

Сетевой интерфейс имеет период отключения в 1 минуту. Следовательно, необходимо вводить AT-команду хотя бы каждую минуту, чтобы поддерживать соединение. Консольный интерфейс не имеет периода отключения.

Сетевое соединение может быть прервано с помощью псевдо-команд Hayes +++ или +++AT (т.н. TIES от англ. time independent escape sequence), либо по истечении тайм-аута.

Эмулятор AT использует следующие идентификаторы:

  • IMEI 00100000000123 (Образец для тестирования, согласно GSMA)
  • IMSI 999999012345678 (Зарезервировано для внутреннего использования)
  • ICCID 8999999012345678 (Зарезервировано для внутреннего использования)

 

Просто разархивируйте и запустите

Можете разархивировать Эмулятор AT в любое удобное место на диске:

Содержимое Эмулятора AT

Требуется Java 1.5 или новее. Рекомендуется настроить переменную среды JRE_HOME или JAVA_HOME, указывающую на путь где установлен Java.

В Windows запустите эмулятор через AT.bat. В Linux/Unix следует использовать AT.sh. Ctrl+C останавливает эмулятор.

Если нужно настроить сетевой интерфейс, отредактируйте AT.bat или AT.sh, чтобы изменить следующие параметры:

  • AT_PORT
  • AT_WORKERS
  • AT_MAXCONN

Обязательным является только параметр AT_PORT. Параметры AT_WORKERS и AT_MAXCONN необязательны. Их можно использовать для ограничения количества TCP-соединений.

 

Консоль и TCP/Telnet

Следующий пример настраивает интерфейс AT для вывода подробной информации, запрашивает наименования производителя и модели модема, затем записывает некоторые S-регистры и считывает их обратно:

ATV1
ATQ
ATI4
ATS10=255
ATS11=99
ATS10?
ATS11?

См. описание доступных AT-команд и S-регистров, согласно стандарту Hayes.

В одной строке можно указать несколько AT-команд. Команды должны разделяться точкой с запятой. Префикс «AT» должен присутствовать только в первой команде. Предыдущий пример можно переписать одной строкой следующим образом:

ATV1;Q;I4;S10=255;S11=99;S10?;S11?

Примечание. Некоторые модемы не поддерживают объединение AT-команд одной строкой, либо ограничивают AT-команды, которые можно комбинировать, либо ограничивают количество таких команд или длину строки.

В следующем примере используются AT-команды для GSM/3G для запроса интенсивности сигнала, состояния модема, регистрации в сети и отправки текстового SMS:

AT+CSQ
AT&V
AT+CREG?
AT+CMGF=1
AT+CMGS="+1234567"
>TEKCT^Z

Согласно ETSI GSM 07.07 и 3GPP TS 27.007, необходимо использовать Ctrl+Z, чтобы обозначить конец SMS-сообщения. Однако, если вы используете консольный интерфейс для ввода AT-команд, сочетание клавиш Ctrl+Z может вызвать конфликты. В Unix/Linux Ctrl+Z отправит активный сеанс в фоновый режим. Для решения этой проблемы вы можете ввести «set +m» перед запуском AT.sh, чтобы отключить управление задачами.

Комбинация Ctrl+Z не очищает буфер консоли автоматически. В Windows необходимо нажать Enter после Ctrl+Z. В Linux необходимо нажать Ctrl+D после Ctrl+Z.

 

Виртуальный COM-порт

Доступ к эмулятору AT также возможен через виртуальный COM-порт. В Linux это можно сделать с помощью socat:

socat pty,link=/dev/virtualcom0,raw tcp:127.0.0.1:2001

В данном случае, если эмулятор AT слушает порт 2001, то вводить AT-команды можно через виртуальный COM-порт /dev/virtualcom0.

Также есть бесплатное решение для Windows: com0com.

Виртуальный COM-порт

Предположим, что по умолчанию драйвером com0com установлены виртуальные COM-порты COM18 и COM19:

command> list
       CNCA0 PortName=-
       CNCB0 PortName=-
       CNCA1 PortName=COM#,RealPortName=COM18
       CNCB1 PortName=COM#,RealPortName=COM19

Присвоим AT_PORT значение 2001 в AT.bat и запустим эмулятор через этот файл. Далее запускаем com2tcp, указывающий на COM18, следующим образом:

com2tcp \\.\COM18 127.0.0.1 2001

После этого интерфейс AT будет доступен на COM19. Его можно открыть через PuTTY, Hyper Terminal или любую другую подобную утилиту.

 

Общедоступные исходные коды

GitHubИсходный код эмулятора AT доступен в нашем открытом репозитории GitHub. Можете вносить изменения и перекомпилировать исходный код. Весь код бесплатен для любого использования, включая коммерческое.