PDA

Просмотр полной версии : SMS-сообщения на модеме



zaur
21.03.2012, 13:09
Есть программа для работы с модемом ПМ01. Уже реализована отправка сообщений по списку в определенных ситуациях, а также прием сообщений. прием собщений крутится пока не придет сообщение на модем, то есть не появится строка +CMTI: "SM". Дальше получаю номер ячейки, счтываню сообщение. Все работает нормально, пока есть связь с модемом. Однако, если исчезает связь ПЛК и модема, а в это время приходят сообщения на модем, то когда востанавливается связь ПЛК и модема, то сигнала об SMS нет, то есть не получаю строку +CMTI: "SM". Каким образом узнать что есть SMS на модеме?
/*есть мысль просто прочитываить все ячейки и если они не пустые (а значит там есть непрочитанное СМС, так как прочитанные все удаляются AT+CMGD=), то считывать оттуда*/
Все спасает команда AT+CMGL. Считывает все непрочитанные сообщения на модеме.
Решение вроде верное. Если есть еще другие варианты, прошу сказать.

zaur
30.03.2012, 11:49
Прошу совета. Во вложении программа для работы с модемом ПМ01 и ПЛК110. Все работает пока, но сейчас встал вопрос как организовать дозвон до модема. То есть если мы сейчас в режиме ожидания, то дозвон до модема происходит и данные передаются. Если идет передача данных, то все остальные дождутся своей очереди и выполняться. Проблема возникает если на модем звонят во время например посылки СМС сообщений. Посылка прекращается и начинается передача данных. Хочется, чтобы вначале закончилась рассылка, а затем уже был ответ и передача данных.
В настройках конфигуратора ПЛК для модема есть такая строка как block incoming calls. yes - ответ на звонки, no - сам набирает с периодом. Но мне надо, чтобы он ждал звонка и отвечал, но отвечал лишь при условии, что сейчас он ничего не делает (не передает смс сообщения). То есть по сути я должен сам непосредственно им управлять (посылать команды ATA +++ ATH). Но по этому параметру bic он работает либо на ожидание, либо на самостоятельный звонок. Как можно решить проблему? Или можно только вручную все сделать, то есть самому еще дописать программу с использованием как раз ATA +++ ATH?

lara197a
30.03.2012, 12:05
ПОСТАВЬТЕ ВТОРОЙ МОДЕМ.
По одному опрашивайте, по другому посылайте тревожные сообщения.
Линия всегда будет свободна.

zaur
31.03.2012, 19:48
ПОСТАВЬТЕ ВТОРОЙ МОДЕМ.
По одному опрашивайте, по другому посылайте тревожные сообщения.
Линия всегда будет свободна.
Нет технической возможности так сделать. Поэтому приходиться программно решать вопросы.

zaur
03.04.2012, 12:12
Еще один вопрос. Модуль работает в текстовом режиме (пока). Все нормально в основное время, но иногда с порта при приеме смс вместо текста начинает приходить кодировка (последовательность цифр). Естественно приходящие таким образом сообщения игнорируются. Спасает лишь reset модема (да и то не всегда с первой попытки), после чего опять начинает идти текст. Хотелось бы узнать причину данного явления?

Евгений Сергеевич
03.04.2012, 18:29
Это происходит из-за того что СМС приходя не в текстовом формате а в цифровом PDU, так все СМС с русским текстом придут именно в этом формате, например реклама от оператора.

zaur
01.06.2012, 05:25
Программа для ПЛК110. Вроде работает (правда неоптимизирована). Отправляет, принимает, scada. Использована UNM.
Теперь хочется что-то подобное для ПЛК73/63. Я так понимаю, что вместо UNM использую стандартную syslibcom. Сам открыл, настроил. Отправил, принял в/из порт. comread, comwrite. Для scada жду ринг и беру трубку. Потом ложу ее. Вот здесь и загвоздка. Как понять когда ложить? Для 110 все было автоматом, а здесь как? Пока тупо жду 1минуту и ложу трубку, но ведь это не совсем верно.

zaur
01.06.2012, 05:35
Вот первый черновой вариант для 73/63. не проверен, не рабочий. Ход мысли верный или нет?

zaur
01.06.2012, 07:55
63/73. Вот такой вариант пока.
Хотелось бы немного прояснить ситуацию. То что на COM0 кодесис ругается я уже привык. Небольшой вопрос по SysComSetSettings. Выходная переменная булева. И если дать номер порта com0, то оттуда приходит invalid handle. Дальше есть вот такая строка:

IF res THEN
port_opened:=TRUE;
END_IF

По идее должно быть так. Ведь при успехе возвращается true (по документации), но true не вернулось. Можно сделать так:

IF NOT res THEN
port_opened:=TRUE;
END_IF

Тогда вроде порт открыт, но не совсем по документации. Вроде считаем, что он открылся независимо от реального возвращаемого значения. Как то нелогично получилось. Где-то здесь что-то я упускаю.
P.S. SFC нормально не мониторятся в CDS в данной программе у меня. CDS просто умирает на SFC в данной программе при работе с ПЛК.

Василий Кашуба
13.07.2012, 10:20
zaur, а какие библиотеки использовались для написания программы к ПЛК110?

zaur
13.07.2012, 13:29
Для 110 использовал библиотеку UNM. Использовал также функции и функц. блоки написанные или кем-то из пользователей или даже овеном самим - это например как раз decodebuf, exstractbuf, септеты, октеты. Где-то на форуме есть готовая программа, эти функции и фб взяты оттуда. Вообще эти все фб и ф-ции взятые нужны лишь для PDU. Если работать в текстовом режиме, то можно и без них обойтись спокойно.

Василий Кашуба
13.07.2012, 16:18
Просто при компиляции Кодесис ругается на decodebuf, а к какой библиотеке этот тип данных относится не помню :(

zaur
03.08.2012, 06:08
Тема с модемом и ПЛК63/73 была заброшена надолго, но вот опять сел за нее. Вот кусок программы для отправки в PDU режиме. До отправки все идет хорошо, но отправки нет. В pdu вроде конвертируется верно (брал эталонное сообщение, потом смотрел что пишу, совпадение было один в один), команда cmgs тоже вроде верная (брал эталонное сообщение, его длину знал заранее, проверял что пишу, совпадает), но отправки нет, ошибка. Все-таки где-то pdu конвертер не правильно себя ведет или проблема в другом. Кто может посмотрите и подскажите. Заранее спасибо.
P.S. Модем отвечает просто error, без каких-либо дальнейших идентификаторов ошибки.
Причина проблемы: строка формируется верно, но реально в порт почему-то посылается не вся строка, вот здесь и возникает ошибка формата. то есть часть строки отрезается при отправке по syscomwrite.

zaur
03.08.2012, 07:52
Проблемы разрешены. Вот он блок для отправки с 63/73. Тестовый вариант, вроде более менее стабильный.

zaur
20.11.2012, 08:55
Проблема была в "перестраховке", непонятно зачем слишком часто освобождал устройство, хотя надо это делать лишь один раз. Вроде теперь работает стабильно.

AEV12345
15.09.2014, 07:57
Доброе утро. А есть ли пример такой программы в свободном доступе? Больше всего интересует "Уже реализована отправка сообщений по списку в определенных ситуациях"

mixasik1984
29.09.2014, 08:51
здравствуйте подскажите как вы организовали "отправка сообщений по списку в определенных ситуациях"
у меня плк 100 +пм передача по сигналу первого входа нескольким абонентом происходит на ура , пробую по сигналу второго входа в место трех обонентов приходит 3 sms на один номер , использую библиотеку SmsOwenLib. и блоки Блок «OpenPort» захвата/освобождения интерфейса , Блок «FB_SMS_CFG» конфигурирования модема, Блок «FB_SMS_SR» отправки/ получения СМС, Блок «FB_SMS_SL» вспомогательный для отправки сообщения группе абонентов.
интересует вопрос по срабатыванию разных входов и отправки сообщений с разной текстовкой