Как в CodeSys вызвать "на команду" для GSM модема? Не стандартный send_sms и тп

У меня есть gsm-модем и plc, plc видит модем (я использую *.lib и функциональный блок "openPort"), но я не понимаю, как записать в модеме "at command", например, "ate0",

1 ответ

Во-первых, чтобы лучше понять AT-команды, прочитайте спецификацию V. 250. Это сделает вас экспертом в AT-командах.

Тогда для фактической реализации я не знаю CodeSys, поэтому ниже приведен псевдокод структуры, которую вы должны иметь для обработки AT-команд:

the_modem = openPort();
...
// start sending ATE0
writePort(the_modem, "ATE0\r");
do {
    line = readLinePort(the_modem);
} while (! is_final_result_code(line))
// Sending of ATE0 command finished (successfully or not)
...
closePort(the_modem);

Что бы вы ни делали, никогда, никогда не используйте delay, sleep или аналогичные в качестве замены для ожидания окончательного кода результата. Вы можете посмотреть на код для atinout для примера для is_final_result_code функция (вы также можете сравнить с isFinalResponseError а также isFinalResponseSuccess в U300 RIL ST-Ericsson, хотя обратите внимание, что CONNECT не является окончательным кодом результата, это промежуточный код результата, поэтому имя isFinalResponseSuccess не является правильным на 100%).

Другие вопросы по тегам