Как в 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%).