А где можно посмотреть перечень ошибок?
Вид для печати
А где можно посмотреть перечень ошибок?
Всё выяснилось.. Оказывается зависания происходили изза отсутствия симки в лотке... Огромное спасибо Евгению Сергеевичу за помощь.
Подскажите пожалуйста, ФБ "FB_SMS_SL" из библиотеки SmsOwenLib корректно работает с контроллером ПЛК100-24-РM?
Да. на данный момент библиотека не работает только с ПЛК63/73 (из ПЛК с CoDeSys v2.3).
Спасибо, буду пробовать отправлять смс на 2 номера.
К слову, ранее обещал отписаться ... Так вот, в Украине с последней версией библиотеки все прекрасно работает. Спасибо, реально упростило работу!
спасибо за отзыв, руководство поправим)
в теме писали о влиянии длительности цикла ПЛК на ошибку чтения SMS.
в чем механизм возникновения такой ошибки, устраняемой увеличением длительности цикла?
Не путайте, скорость обмена по сети 115200кбит/с это не одно и тоже, что количество операций в секунду у процессора плк100. Выполнился Ваш код осталось время на комуникационные дела, вот за это время микросхема должна принать последовательно определенное количество байт, каждый пришедший разряд, сместить, чтоб освободить место для вновь пришедшего, таким образом превратив последовательный код в параллельный, с ним то уже и может работать основной процессор. И если этого времени не хватает, начинается новый цикл, то из-за низкой приоритетности принятые данные просто теряются и полноценного обмена не происходит
Но следую этой логике, имея минленцикл=1мs, и при этом тупо задерживая цикл эдак на 100..200мс - обмен будет невозможен вообще. Однако же этого нет. Обмен через порт - без проблем. Значит прерывания ?
прибдизительно можно расчитать, сколько тактов процессора требуется, чтоб наполнить буфер данными, преобразовать их в параллельный код, будь это за основным циклом или в прерываниях, совершенно одинаково, в любом случае это как то завязано на минимальный цикл, может в прошивке, но прошивка то одна на всю сотую серию, меняются только таргеты, а у разных плк свое время для UNM получается
Все-таки за циклом или прерывания - существенная разница. В 2 случае - на обмен длина цикла не имеет влияния.
мы все же имеем дело с плк, прерывания прерываниями, но в начале цикла грузится "образ" входных данных и если syslibcom асинхронно работает, то unm берет сразу и если на этот момент приемник порта не готов выдать информацию, например не хватило сдвинуть еще одну единицу,то и наступает сбой всей программы, возможно в более поздних версиях поднят приоритет прерывания для обращения к порту, поэтому там хватает 5мс, а на 100-ом у менея начинало работать только с 9мс
Не надо рассчитывать такты процессора, обмен на низком уровне осуществляется аппаратно, даже контроллеры предыдущего класса - AVR Atmega имеют по нескольку аппаратных UART
На память - в ПЛК стоит подобный процессор ARM9: http://www.atmel.com/devices/SAM9N12.aspx
UART помещает данные в буфер FIFO, а задача процессора - считывать время от времени, например по прерыванию и не допустить переполнения буфера.
однако все же интересна взаимосвязь увеличения длительности цикла и устранением ошибок в работе библиотеки СМС
я Вам об этом с самого начала и толковал, вот это считывание время от времени происходит чаще чем того требуется микросхеме порта, а увеличив мин.время цикла плк в конце концов получает принятую корректную инфу, как уже ранее писал Валенок, в syslibcom этого не замечается, потому что в ней можно дождаться полноценных данных и через цикл
Какая жесть. У меня обмен работает с любым циклом - хоть 1мс.Цитата:
..хватает 5мс, а на 100-ом.. начинало работать только с 9мс
А какая разница - как часто обращаться к буферу ? Нет данных - вернул 0 штук байт. В следующем цикле может что появится. Или имеется ввиду что обязательно нужно весь ответ получить за раз ?
Поддержка Овен отвечает: работа библиотеки проверялась на плк154 с циклом в 5 мс и включенном блоком статистики, который показал что на выполнение всех операций ему нужно 2-2.5 мс, на основании этого мы и рекомендуем ставить время в 5 мс с запасом на всякий случай.
А с белорусскими сотовыми операторами (+375) библиотека работает?
вообще то международный стандарт номеров телефонов состоит из 11 цифр. Если код страны один символ, то код оператора 3-х значный, у Вас скорее всего наоборот. Так что должно работать
Номер телефона задаю в виде 375336587963
Функциональный блок отправки смс возвращает SmsSend=TRUE
Вот обмен между плк и модемом:
AT+CLCC
OK
AT+CMGL=0,1
OK
AT+CLCC
OK
AT+CMGL=0,1
OK
AT+CMGF=0;+CMGS=26
> 0011000C910008AA0C041F04400438043204350442
ERROR
AT+CLCC
OK
AT+CMGL=0,1
OK
AT+CLCC
OK
AT+CMGL=0,1
OK
AT+CLCC
OK
AT+CMGL=0,1
OK
AT+CLCC
OK
AT+CMGL=0,1
OK
у Вас вместо номера текст, еще раз посмотрите ни чего не перепутали?
Да нет делаю все точно по примерам на форуме и по видео.Через гипертерминал модем шлет смс без проблем.На российские номера,тоже вроде уходят :
AT+CMGL=0,1
OK
AT+CLCC
OK
AT+CMGL=0,1
OK
AT+CLCC
OK
AT+CMGL=0,1
OK
AT+CMGF=0;+CMGS=26
> 0011000B915792071478F70008AA0C041F0440043804320435 0442
+CMGS: 8
OK
AT+CLCC
OK
AT+CMGL=0,1
OK
Видимо причина в номере телефона.
да ошибся, у Вас не текст, а вообще пропущен номер отправителя, я смогу только завтра посмотреть возможно ли такое, когда вернуть из командировки, а так надо обращаться к Евгению пока рабочий день не закончился, а в Москве с этим проблема :)
Спасибо за помощь
сейчас бегло посмотрел библиотеку, всетаки где то у Вас ошибка, в менеджере библиотек посмотрите на функцию to_TPOA входной параметр строка из 20 символов, полюбому Ваш номер должен вставлятся в отправку
Вот проект
да, что то у меня Ваш номер не конвертируется с помощью этой функции
Все разобрался, оказывается все номера с четным количеством знаков дают на выходе функции пустую строку, теперь остается ждать понедельника когда Евгений Сергеевич выйдет и поправит баг
Не знаю как работает обсуждаемая библиотека, но я подозреваю, что этот номер для сотового оператора связи в никуда( на деревню дедушке!).
Номер в международном формате должен начинаться с "+".
Попробуйте позвонить с мобильника на этот номер без префикса "+", что вы услышите? "Не правильно набранный номер"!
МинСязи РБ в 2006 г. установило правила набора мобильных номеров http://forum.onliner.by/viewtopic.php?t=506761.
Если библиотека не позволяет наличия "+" в начале номера телефона, то можно попробовать такЦитата:
Порядок набора в международном формате:
"+" - международный код Республики Беларусь (375) - код мобильной сети (29 – МТС и БелСел, 25 – БеСТ) - номер абонента
(например, +375 29 7хх хх хх, +375 29 5хх хх хх, +375 29 2xx xx xx, +375 29 4хх хх хх, +375 25 9хх хх хх)
.Цитата:
8 10 - международный код Республики Беларусь (375) - код мобильной сети (29 – МТС и БелСел, 25 – БеСТ)- номер абонента
(например, 8 10 375 29 7хх хх хх, 8 10 375 29 5хх хх хх, 8 10 375 29 2xx xx xx, 8 10 375 29 4хх хх хх, 8 10 375 25 9хх хх хх)
Если Ваш получатель СМС находится в Беларусии, то можно попробовать так
Резюме. Попробуйте или "8 10 375 33 6587963" или "8 0 33 6587963", если нельзя использовать "+375 33 6587963":cool:Цитата:
8 0 - код мобильной сети (29 – МТС и БелСел, 25 – БеСТ) - номер абонента
(например, 8 0 29 7хх хх хх, 8 0 29 5хх хх хх, 8 0 29 2xx xx xx, 8 0 29 4хх хх хх, 8 0 25 9хх хх хх)
В том то и дело что пробовал по разному задавать номера телефонов.брал симки разных операторов.смс только приходили на российские мобильные номера,на белорусские увы пока не получается.
ps:спасибо за помощь думаю решение вопроса уже близко.
0011000C91 здесь выделены две цифры замещающие номер центра СМС, будет использоваться номер по умолчанию для конкретного оператора. В 146 и 148 сообщениях этой темы показаны посылки сообщений, если их сравнить видно что в первом варианте отсутствует номер получателя, функция которая за него отвечает не обрабатывает номера с четным количеством знаков. Можете погуглить как формируется смска для отправки
Для поста 146
Попробуйте в начале дать модему команду (можно в гипертерменале) AT+CMEE=1 или AT+CMEE=2 и вместо бесполезного ответа ERROR получите расширенный ответ об ошибке, в первом случае код ошибки в виде +CME ERROR : xxx или+CMS ERROR :xxx, а во втором случае описание ошибки, напишет что именно ему не нравится в команде. Правда команду AT+CMEE=2 поддерживают не все модемы. Поддерживаемые режимы можно узнать командой AT+CMEE=?
По коду ошибки можно копать дальше.
Вот некоторые коды для +CMS ERROR :<xxx> (из стандарта GSM 04.11 дополнениеE-2)
Это выдержка, есть и другие коды ошибокЦитата:
Причина 1: "Неназначенный(неразмеченный) номер"
Данная причина показывает, что невозможно достичь адресата, аданного мобильной станцией, поскольку, хотя номер и имеет правильный формат, он не назначен (неразмечен).
Причина8: "Запрет определяется оператором"
Данная причина указывает на то, что мобильная станция пыталась править сообщение с мобильного устройства в тот момент, когда поставщик услуг запретил передачу.
Причина 10: "Вызов запрещен"
Данная причина указывает на то, что услуга запрета исходящих вызовов применяется и для службы сообщений.
Причина 21: "Отказано в передаче сообщения"
Данная причина указывает на то, что устройство, отославшее эту причину, не желает принимать это сообщение, хотя оно бы могло быть принято, поскольку устройство, посылающее причину, не занято и совместимо.
Cause no 27: "Адресат не обслуживается"
Данная причина указывает на то, что адресат, заданный мобильной станцией, недоступен, поскольку его интерфейс работает некорректно. Термин«работает некорректно» указывает на то, что сигнальное сообщение не могло быть доставлено удаленному пользователю; например, у удаленного пользователя имеются физические неполадки или неполадки канала передачи данных и т.д.
Cause no 28: "Неопознанный абонент"
Данная причина указывает на то, что абонент не зарегистрирован в мобильной сети (например, неизвестенIMSI).
Причина29: "Возможность отклонена"
Данная причина указывает на то, что возможность, запрашиваемая мобильной станцией, не поддерживается мобильной сетью.
Причина30: "Неизвестный абонент"
Данная причина указывает на то, что абонент не зарегистрирован в HLR (например, IMSI
или номер директории не размечен под абонента).
Причина38: "Сеть недоступна"
Данная причина указывает на то, что сеть работает некорректно и что данное состояние сети может продлиться довольно долго, например, немедленная повторная попытка
отсылки сообщения вряд ли будет успешной.
Причина41: "Временные неполадки"
Данная причина указывает на то, что сеть работает некорректно и что данное состояние сети не должно продлиться долго, например, мобильная станция может еще раз попытаться отправить сообщение сразу же.
Причина42: "Перегрузка"
Данная причина указывает на то, что в данный момент услуга передачи коротких сообщений не может быть предоставлена из-за высокой нагрузки каналов связи.
Причина47: "Ресурсы недоступны, не заданы"
Данная причина используется для события, оповещающего о недоступности ресурсов, если ни одна другая причина не подходит.
Причина69: "Запрашиваемая возможность не реализована"
Данная причина указывает на то, что сеть не может предоставить запрашиваемую услугу коротких сообщений.
Причина81: "Неверное ссылочное значение передачи короткого сообщения"
Данная причина указывает на то, что устройство, отославшее эту причину, получило сообщение со ссылкой на короткое сообщение, которая в данный момент не используется в интерфейсеMS-сетей.
Причина95: "Неверное сообщение, не задано"
Данная причина используется для события неверного сообщения только когда не подходит ни одна другая причина из класса неверных сообщений.
Причина96: "Неверная обязательная информация"
Данная причина указывает на то, что устройство, отсылающее эту причину, получило сообщение, в котором отсутствует элемент обязательной информации и/или обязательная информация имеет ошибку содержания(два класса неразделимы).
Причина97: "Тип сообщения не существует или не выполняется"
Данная причина указывает на то, что устройство, отсылающее эту причину, получило сообщение, тип которого ого не распознает либо поскольку это сообщение не определено, либо определено, но не выполняется устройством, отсылающим эту причину.
Причина98: "Сообщение несовместимо с состоянием протокола коротких сообщений"
Данная причина указывает на то, что устройство, отсылающее эту причину, получило сообщение так, что процедуры показывают, что это недопустимое сообщение для приема в состоянии работы с короткими сообщениями.
Причина99: "Элемент информации не существует или не выполняется"
Данная причина указывает на то, что устройство, отсылающее эту причину, получило
сообщение, включающее в себя нераспознанные элементы информации, поскольку идентификатор элементов информации не задан или задан, но не выполняется устройством, отсылающим причину.
Тем не менее, не требуется, чтобы в сообщении так присутствовал элемент информации, что устройство отсылает причину, чтобы обработать сообщение..
Причина 111: "Ошибка протокола, не задан"
Данная причина используется для события ошибки протокола только если не подходит никакая другая причина.
Причина 127: "Межсетевой обмен, не задан"
Данная причина указывает на то, что шел обмен данными с сетью, не отсылающей причины, таким образом, невозможно получить точную причину при работе с сообщениями.
Все значения, кроме вышеперечисленных, необходимо обрабатывать как ошибки причины41.
да тут к гадалке не ходи, CMGS содержит 26 байт, а в отправляемой строке нехватает положенных, поэтому и ошибка. Совсем другое дело с российским номером, там все сходится. Для справки считается без номера центра и каждый байт занимает два знакоместа
Номер центра СМС должен указываться для конкретного оператора отдельной командой "AT+CSCA" по умолчанию его нет.
AT+CMGS= "+33146290800"<CR> Privet, kak dela?<ctrl-Z> //Примечание: отправить сообщениеЦитата:
Адрес сервис-центра: +CSCA
Описание
Данная команда используется для указания, в какой сервис-центр посылать сообщение.
У продукта не задано адреса по умолчанию. Если приложение пытается отослать сообщение и если до этого не был указан адрес сервис-центра, то будет выдана ошибка.
Таким образом, приложение должно указывать SC адрес при инициализацииSMS.
Данный адрес затем будет действовать постоянно. При необходимости приложение может изменять его.
Синтаксис
Синтаксис команды: AT+CSCA=sca
+ CMS ERROR: 330 //Примечание: неизвестен сервис-центр
AT+CSCA="0696741234" //Примечание: инициализация сервис-центра
OK
AT+CMGS = "+33146290800"<CR> S dnem rozhdeniya ! <ctrl-Z> //Примечание: отправить сообщение
+CMGS: 1
OK //Примечание: отправлено успешно