Стартовая страница › Форумы › Разработка и интеграция › DrvSmsBu 6.3.0 — Доп.каналы
- В этой теме 18 ответов, 4 участника, последнее обновление 1 месяц назад сделано manjey73.
-
АвторСообщения
-
04.11.2024 в 20:38 #35462sergyltdУчастник
Ну, когда отсылает, он шифрует в PDU. Потому как длинные СМС на русском идут нормально, а комбинировать несколько СМС в одну можно только через PDU. В текстовом режиме на русском можно что-то около 60 символов. Начало не номер, забыл уже, когда-то разбирался с кодировкой PDU, но у модема номер 995 начинается.
04.11.2024 в 21:54 #35463manjey73Участникя не разбирал PDU, этим занимается сам драйвер.
Еще раз. Это не новый драйвер, это все тот же DrvSms, в котором просто добавлены 2 канала, в которые драйвер передает уже расшифрованные данные из PDU.
Один канал это текст сообщения в виде массива каналов с длиной 20, второй канал double в котором номер телефона.
Никаких команд посылать не требуется. Приходит сообщение, драйвер сам отправляет в каналы данные.05.11.2024 в 15:00 #35469MikhailМодераторПроверил по коду драйвера — при отправке СМС проверяется, содержит ли строка символы Unicode, и в зависимости от этого кодируется PDU.
Латинскими буквами можно отправить до 140 символов. Русскими до 70. Если больше, то сообщение должно отправляться несколькими пакетами, что не реализовано. Кто помнит, на старых телефонах длинные СМС приходили, постепенно обновляясь.
05.11.2024 в 16:46 #35472manjey73УчастникСобственно я только прием делал. Отправку и так драйвер делает.
Что менялось добавилось.Shared — TagCode.cs добавлены два канала
// Добавленный код --- public const string InMsg = nameof(InMsg); public const string PhoneN = nameof(PhoneN); // Добавленный код ---
Shared — CnlPrototypeFactory.cs добавлены каналы для создания
// Добавленный код --- group.CnlPrototypes.Add(new CnlPrototype { Name = Locale.IsRussian ? "Входящeе Сообщения" : "Input Messages", DataLen = 20, CnlTypeID = CnlTypeID.Input, TagCode = TagCode.InMsg, FormatCode = FormatCode.String, DataTypeID = (int)TagDataType.Unicode }); group.CnlPrototypes.Add(new CnlPrototype { Name = Locale.IsRussian ? "Номер телефона" : "Phone number", CnlTypeID = CnlTypeID.Input, TagCode = TagCode.PhoneN, FormatCode = FormatCode.N0 }); // Добавленный код ---
Ну и собственно код, добавленный в Logic — пишу весь метод, куда добавлен код.
/// <summary> /// Creates events according to the received messages. /// </summary> private void CreateEvents() { foreach (Message message in messages) { DeviceData.EnqueueEvent(new DeviceEvent(DeviceTags[TagCode.Msg]) { Timestamp = DateTime.UtcNow, CnlVal = 0.0, CnlStat = CnlStatusID.Defined, // has informational severity TextFormat = EventTextFormat.CustomText, Text = message.Phone + "; " + message.Text, Descr = string.Format(Locale.IsRussian ? "Сообщение от {0}" : "Message from {0}", message.Phone) }); // Добавленный код ------------------- string phone = message.Phone.Replace("+", ""); double dPhone; DeviceData.SetUnicode(TagCode.InMsg, message.Text, 1); if (double.TryParse(phone, NumberStyles.Any, CultureInfo.InvariantCulture, out dPhone)) { DeviceData.Set(TagCode.PhoneN, dPhone, 1); } else { DeviceData.Invalidate(TagCode.PhoneN, 1); } // Добавленный код ------------------- } }
Вот и все. Глобального копания драйвера не было 🙂 Если правильно понимаю, то при цикличном запуске драйвера идет проверка поступивших СМС, после чтения СМС происходит ее удаление. Просто тут параллельно с выводом event это же выводится в каналы Сообщение и Номер.
- Этот ответ был изменен 1 месяц назад от manjey73.
-
АвторСообщения
- Вы должны авторизироваться для ответа в этой теме.