Tag Archives: GSM/GPRS модем

Работа ОВЕН ПЛК с модемом одновременно и в режиме передачи данных и с СМС сообщениями

В данном примере будет показано, как опрашивать удаленный объект при помощи канала CSD и одновременно при необходимости отправлять СМС сообщения.

В данном примере ПЛК будет инициировать связь с удаленным объектом (ПК-оператора),  куда будет передавать текущее значение «var1»- контролируемый параметр, и откуда будет считывать значение переменной «var1_Alarm»- аварийный уровень. При этом если текущее значение переменной превысит аварийный уровень (далее авария) отправить СМС сообщение и обнулить ее.

Настройка связи с удаленным объектом настраивается в конфигурации ПЛК.

Алгоритм работы следующий: В фоновом режиме  происходит периодический обмен между ПЛК и ПК. В случае аварии выставляется флаг о необходимости отправить СМС «Start», блоку «FB_SMS_SR» подается команда на отправку, номер абонента и текст сообщения. Далее если в текущий момент модем не занят (переменная «LineStatus» равна нулю), то захватываем порт, при необходимости производим настройку модема, после чего происходит непосредственно отправка сообщения. После отправки флаг снимается (при помощи выхода «SmsSend» блока «FB_SMS_SR»)и происходит освобождение порта.

Программа в CoDeSys 2.3

Список переменных:

PROGRAM PLC_PRG

VAR

                Com                      :OpenPort;

                cfg                         :FB_SMS_CFG;

                sms                        :FB_SMS_SR;

DevNum             :WORD;

                Start                      : BOOL  :=FALSE;

                cfg_ok                  :BOOL;

                 var1                                      AT%QW12.1.1.0               :WORD;

                 var1_Alarm                       AT%IW12.1.0.0 :WORD :=8000;

                LineStatus          AT%QB12.0.0    : BYTE;

                SmsNum             :STRING               := ‘79012345678’;

END_VAR

 

Конфигурация ПЛК задачи

Мой блог находят по следующим фразам

Запрос баланса из программы ОВЕН ПЛК

В данном примере будет показано, как осуществлять запрос баланса.

Программа запроса баланса из ОВЕН ПЛК

Список переменных:

PROGRAM PLC_PRG

VAR

                Com                      :OpenPort;

                cfg                         :FB_SMS_CFG;

                sms                        :FB_SMS_SR;

                DevNum             :WORD;

                cfg_ok                  :BOOL;

                 var1                      :WORD;

                 var1_Alarm       :WORD :=5000;

                CheckListNum: STRING                :=»;

                ComSend            :BOOL;

                smsText              :STRING               := »;

                BalaseOk             :BOOL;

END_VAR

Данный пример отличается от предыдущего (http://plc24.ru/zadanie-ustavki-pri-pomoshhi-sms-iz-programmy-oven-plk/)только настраиваемыми параметрами. В качестве номера используется короткий номер запроса баланса, у каждого оператора он свой, здесь используется номер МТС. У некоторых операторов несколько номеров: для запроса на русском языке и запроса на латинице – рекомендуется использовать номер запроса на латинице. Так как запрос баланса по своей сути является USSD запросом, то внутри блока имеет несколько другую обработку, поэтому в данном случае блок игнорирует значения на входах «CheckNum» и «CheckNumList» (считает что «CheckNum» имеет значение False). Поле текста отправляемого сообщения нужно оставлять пустым.

Мой блог находят по следующим фразам

Задание уставки при помощи СМС из программы ОВЕН ПЛК

В данном примере будет показано, как одновременно отправлять и получать СМС сообщения.

Программа ПЛК. Задание уставки с помощью СМС

 Список переменных:

PROGRAM PLC_PRG

VAR

                Com                      :OpenPort;

                cfg                         :FB_SMS_CFG;

                sms                       :FB_SMS_SR;

                DevNum             :WORD;

                cfg_ok                  :BOOL;

                 var1                      :WORD;

                 var1_Alarm       :WORD :=5000;

                CheckListNum: STRING:=’79012345678;79876543210′;

                ComSend            :BOOL;

                smsText              :STRING               := ‘Set alarm 8000’;

                smsNum             :STRING               := ‘79012345678’;

END_VAR

Как и в предыдущих примерах (http://plc24.ru/priem-sms-soobshhenij-v-programme-oven-plk/) необходимо добавить в конфигурацию ПЛК модуль Universal Network Module, произвести его настройку. Также необходимо в программе открыть порт и произвести настройку модема. (Можно взять за основу http://plc24.ru/otkrytie-porta-i-nastrojka-modema-dlya-oven-plk/)

Необходимо понимать, что модем одновременно может выполнять только одно действие: или читать входящие сообщения или отправлять, при этом на выполнение любого действия необходимо время. Поэтому работа с модемом осуществляется в асинхронном режиме. В среднем необходимо не более 20 сек. на отправку одного СМС сообщения. Как следствие необходимо использовать флаг, который бы показывал готовность блока к отправке нового сообщения. В данном примере в качестве такого флага можно использовать переменную «ComSend», которая так же является командой на отправку, Новое сообщение можно отправлять, только когда она равна False, если же она равна True, то при попытке отправить еще одно сообщение оно будет потеряно.

Мой блог находят по следующим фразам

Прием СМС сообщений в программе ОВЕН ПЛК

В данном примере будет показано, как организовать удаленное управление при помощи СМС сообщений.

Программа ПЛК

Список переменных:

PROGRAM PLC_PRG

VAR

                Com                      :OpenPort;

                cfg                         :FB_SMS_CFG;

                sms                        :FB_SMS_SR;

                DevNum             :WORD;

                cfg_ok: BOOL;

                 var1                      :WORD;

                 var1_Alarm       :WORD :=5000;

                CheckListNum: STRING                :=’79012345678;7987654321′;

END_VAR

Как и в предыдущих примерах необходимо добавить в конфигурацию ПЛК модуль Universal Network Module, произвести его настройку. Также необходимо в программе открыть порт и произвести настройку модема. (Можно взять за основу пример http://plc24.ru/otkrytie-porta-i-nastrojka-modema-dlya-oven-plk/)

Зависимость поведения ФБ от значений на входах «CheckNum» и «CheckNumList» представлена в следующей таблице:

Вход «CheckNum» Вход «CheckNumList» Результат
1 Flase любое Принимает все входящие СМС
2 True Пустая строка (‘’) Не принимает входящие СМС
3 True Номер или список номеров (‘79012345678;7987654321’) Принимает СМС только с указанных номеров

Блоки 9-16 нужны для расшифровки текста сообщения: блоки 9,10,13 выделяют командное слово, блоки 11,12 выделяют значение переменной из текста.

Как только сообщение будет принято на выход «NewInRing» будет подан единичный импульс (одновременно с этим будут обновлены значения на выходах «NewInSmsText», «NewInSmsTime» и «NewInSmsNum»), что совместно с блоками 14,15 позволяет осуществить однократную запись нового значения в переменную «var1_Alarm». Это может быть полезно, если значение этой переменной задается несколькими способами, например, еще и с панели оператора.

Выход «NewInSmsNum» позволяет организовать разделение абонентов по уровням доступа.

Мой блог находят по следующим фразам

Отправка СМС сообщений нескольким получателям из программы ОВЕН ПЛК.

Пример аналогичен предыдущему (http://plc24.ru/otpravka-sms-soobshhenij-iz-programmy-oven-plk/) с той разницей, что сообщение с одним и тем же текстом надо отправить нескольким получателям сразу. Для этого можно использовать ФБ «FB_SMS_SL», входящий в состав  библиотеки SmsOwenLib.

Программа ПЛК

 

Список переменных

PROGRAM PLC_PRG

VAR

Com                      :OpenPort;

cfg                         :FB_SMS_CFG;

sms                        :FB_SMS_SR;

 

cfg_ok                  :BOOL;

DevNum             :WORD :=0;

 

var1                      :WORD;

var1_Alarm       :WORD :=5000;

 

sl                            :FB_SMS_SL; (*дополнительный блок для отправки группе получателей*)

listNum                :ARRAY [0..2] OF STRING(10):=3(‘79012345678’); (*массив номеров получателей, обязательно с начинаться должен с нуля*)

END_VAR

 

Мой блог находят по следующим фразам

Отправка СМС сообщений из программы ОВЕН ПЛК

Добавим к предыдущему примеру (http://plc24.ru/otkrytie-porta-i-nastrojka-modema-dlya-oven-plk/) переменную (var1), которая будет постоянно расти и по достижению ею определенного уровня (var1_Alarm) необходимо отправить сообщение. Текстом сообщения будет служить значение этой переменной, номер получателя заранее жестко задан.

Программа ПЛК

Алгоритм работы программы.

Список переменных

PROGRAM PLC_PRG

VAR

Com                      : OpenPort;

cfg                         :FB_SMS_CFG;

sms                       :FB_SMS_SR;

 

cfg_ok                  :BOOL;

DevNum             :WORD :=0;

 

var1                      :WORD; (*переменная, которая будет расти*)

var1_Alarm       :WORD :=5000; (*ее аварийный уровень*)

END_VAR

 

После открытия порта и конфигурирования модема начинает работать блок отправки и получения СМС. Так как режим CSD передачи данных в данном примере не используется на вход «CsdClose» подается сигнал False (все входящие вызовы будут сброшены). Входящие СМС сообщения так же не используются, поэтому на входа «CheckNumList» и «CheckNum» можно ничего не подавать.

На вход «SendSmsNum» подается десятизначный номер получателя в формате строки (String). На вход «SendSmsText» подается преобразованной к типу String значение переменной  «var1». По приходу на вход «SendSms» значения True, значения на двух предыдущих входах будут зафиксированы внутри ФБ. Как только сообщение будет отправлено на выход «SmsSend» будет подан единичный импульс (значение True будет установлено на один цикл).

Мой блог находят по следующим фразам

Открытие порта и настройка модема для ОВЕН ПЛК

Вначале необходимо добавить в конфигурацию ПЛК модуль Universal Network Module, указать к какому интерфейсу будет подключен модем.  Затем произвести настройку порта (указать скорость, число стоп-битов и т.д.), рис.1. Режим можно указывать любой, как ASCII так и RTU.

Рис.1. Настройка модуля Universal Network Module.

Программа:

Рис.2. Алгоритм работы программы.

Список переменных проекта:

PROGRAM PLC_PRG

VAR

Com                      : OpenPort;

cfg                         :FB_SMS_CFG;

cfg_ok                  :BOOL;

DevNum             :WORD :=0;

END_VAR

В данном примере порт будет открыт всегда, при необходимости освободить его достаточно подать на вход «Enable» ФБ «com» значение False.

ФБ «cfg» по окончанию конфигурации модема установит на выходе «Done» значение True в не зависимости от того, были ли ошибки или нет, поэтому необходимо проверять значение на выходе «ErrCode». В данном примере в случае возникновения ошибки блок будет перезапущен и конфигурация модема будет произведена повторно.

Так же данной блок устанавливает кроме доступных пользователю для задания и другие параметры, необходимые для корректной работы модема и библиотеки (форматы ответа модема на команды, режимы отправки и получения СМС сообщений и т.д.).

Если модем уже настроен и его параметры не будут меняться, то можно не использовать данный ФБ в программе или вызывать его только один раз при подключении нового модема.

 

Мой блог находят по следующим фразам

Удаленный опрос тепловычислителя ВКТ-7 программой «ВКТ7Easy2 v3.44» при помощи модема ОВЕН ПМ01

Настройка модемов.

Для настройки модема, как со стороны ВКТ так и со стороны ПК нужно:

1) Подключить модем к компьютеру через прямой кабель (например, КС5) или используя преобразователь интерфейса (например, ОВЕН АС3-М, АС4).

2) Соединиться с ним с помощью программы «HyperTerminal»

Для WindowsXP: ПУСК-Программы-Стандартные-Связь.

3) Создать новое подключение, выбрать COM-порт, к которому непосредственно подключен модем.

4) Настроить порт. Для заводских настроек модема, настройки порта следующие:

  • Скорость – 9600
  • Биты данных – 8
  • Контроль четности – нет
  • Число стоп-битов – 1
  • Управление потоком – нет

Настройки порта

5) В открывшемся окне «HyperTerminal» введите последовательно, получая подтверждения, следующие AT-команды (в заводских настройках модема используется автоопределение скорости, поэтому вводить команды необходимо с помощью заглавных букв): 

Распайка провода ПМ01 – ВКТ-7 и подключение.

Интерфейс RS-232.

Для организации связи необходимо чтобы на стороне ВКТ стоял модемы с интерфейсом RS-232 (COM — порт), поэтому рекомендуем использовать модемы модификации: ПМ01-х.АВ. Со стороны ПК могут стоять модемы как с интерфейсом RS-232 так и RS-485.

Для подключения модема к ПК можно использовать кабель КС5 (достаточно трехпроводной схемы), к прибору – кабель с указанной выше распайкой. Интерфейсная плата в ВКТ имеет внешнее питание, поэтому необходимо использовать внешний блок питания на 9 В. или 12 В (например, ОВЕН БП15Б-Д2-12). Схема питания:

Общая распайка кабеля:

Распайка кабеля

 

3. Организация обмена.

Для опроса необходимо использовать программу «ВКТ7Easy2 v3.44» (от производителя тепловычислителя).

Сначала необходимо настроить порт ПК. Для этого в меню «Настройки» надо выбрать пункт «Настройки канала связи», в открывшемся окне указать номер COM порта, к которому подключен модем, скорость 9600. В качестве строки инициализации необходимо указать «АТ».

Настройка канала связи

 

Далее необходимо добавить узел учета тепла с модемным соединением и указать номером модема.

Настройки узла учета тепла

 

Далее необходимо настроить содержимое узла учета, а именно указать тип интерфейса (RS-232) и сетевой адрес прибора (в данном случае «1»). Для этого необходимо выбрать созданный узел и нажать на кнопку «ОК».

Настройки интерфейса

 

После этого программа начнет устанавливать связь с удаленным модемом. С помощью монитора можно проследить за ходом обмена (меню «Вид», пункт «Монитор»).

Лог обмена данными

 

Примечание.

Если в процессе обмена довольно часто происходят перезапросы, рекомендуется в окне «Настройки»/«Настройки канала связи» задать следующие параметры: аппаратный тайм-аут на чтение – 1000мс, тайм-аут на модемное соединение – 300с.

 

Настройка ПЛК для работы через GSM-модем по протоколу Modbus TCP в режиме Slave

Чтобы настроить работу ПЛК1хх по протоколу Modbus TCP в режиме Slave, необходимо:

1. Подключить модем ПМ01 к ПЛК по одному из последовательных портов, в соответствии с руководством по эксплуатации, установив необходимые перемычки на модеме (В случае RS-232 обязательно перемычка 6-9 на разъеме модема Х1). Схемы кабелей и рекомендации можно найти в разделе «часто задаваемые вопросы» для GSM/GPRS модема ПМ01: http://www.owen.ru/catalog/74944685

2. В среде программирования Codesys2.3,перейти в область PLC_Configuration(Конфигурация_ПЛК) и добавить там модуль Modbus(Slave)(рис.1).

3. Задать адрес в сети Modbus для ПЛК, параметр «Address» модуля «Modbus(slave)» вкладка «Module parameters» (рис.1).

Рис.1 Настройка адреса ПЛК в режиме Slave

4. К появившемуся подмодулю «Modbus[FIX]» добавить подмодуль «Modem» (выделить подмодуль «Modbus[FIX]», нажать правую клавишу мыши и через контекстное меню выделить «Append Subelement» и далее «Modem…») и настроить его на вкладке «Module parameters»1 как показано на рис.2. Подробнее о параметрах модуля Modem см. в документе «PLC_Configuration.pdf» на диске ПЛК в разделе Документация

Рис.2 Добавление и настройка подмодуля «Modem»

5. Выбрать интерфейс, через который GSM-модем подключен к ПЛК, заменив интерфейс, установленный по умолчанию, с помощью правой кнопки мыши.

6. Установить параметры выбранного интерфейса в соответствии с настройками модема, на вкладке «Module parameters»(рис.3).

Рис.3 Настройка интерфейса обмена ПЛК и модема (приведен для стандартных настроек GSM-модема ПМ01)

7. Добавить к подмодулю «Modem» подмодуль «PPP_Driver» (выделить подмодуль «Modem[VAR]», нажать правую клавишу мыши и через контекстное меню выбрать «Append PPP_Driver»), рис.4. Настроить его на вкладке «Module parameters» задав параметры «Login» и «Password», необходимые для дозвона до провайдера-поставщика Интернет услуг (предоставляются поставщиком GSM-услуг). Подробнее о параметрах подмодуля «PPP_Driver» см. в документе «OWEN_PLC_Configuration.pdf».

8. К подмодулю «Modbus(Slave)» добавить подмодуль «TCP[VAR]» (выделить подмодуль «Modbus[FIX]», нажать правую клавишу мыши и через контекстное меню выбрать «Append Subelement», а затем «TCP…»), рис.4, на вкладке «Module parameters» модуля «TCP[VAR]» параметр «RemotePort» должен быть равен 502.

9. Добавить к модулю «Modbus(slave)» необходимые переменные, например «2 byte» (выбрать модуль «ModBus (slave)», нажать правую клавишу мыши, через контекстное меню выбрать «Append Subelement», а потом «2 byte…»),рис.4.

Рис.4 Конфигурация ПЛК100 для обмена по GPRS, с подключенным модемом к порту Debug

После этого можно привязывать пользовательскую программу к объявленной в конфигурации переменной.

10.Установить связь с ПЛК командой Online|│Login, при этом программу в ПЛК можно не изменять.

11.В подключенном состоянии, перейти в область PLC_Browser (ПЛК-Браузер) и задать настройки TCP/IP подключения для контроллера, соответствующие настройкам используемой в GSM-модеме SIM-карты:

a. SetIP XXX.XXX.XXX.XXX

b. SetGATE XXX.XXX.XXX.XXX

c.SetMASK XXX.XXX.XXX.XXX

Рис.5 Сетевые настройки ПЛК, работа через ПЛК-Браузер

12.Создать файл инициализации модема с именем «extconf.cfg» с адресом «точки доступа» (даётся провайдером сотовой связи). Для этого можно воспользоваться стандартным текстовым редактором Windows – «Блокнот».

Пример файла инициализации для SIM-карты Beeline со статическим IP-адресом:

AT+CGATT=1

AT+CGDCONT=1,»IP»,»static.beeline.ru»

AT

Рекомендуем файл инициализации заканчивать командой «AT».

13. Перед загрузкой файла, проверить отсутствует ли старый файл инициализации в ПЛК, а так же файлы CoDeSys.cfg и modem.cfg (Последние задают настройки удаленного подключения Codesys к ПЛК и имеют приоритет над настройками в ПЛК_Конфигурации, что может мешать работе совпадающих последовательных портов).

Рис.6 Проверка отсутствия файлов модема

14.Загрузить созданный файл инициализации модема «extconf.cfg», Online|│Write file to PLC.

15.После Задания настроек TCP и загрузке файла инициализации, необходимо перезагрузить ПЛК нажав кнопку «Cброс».

16.Спустя 15 секунд, после перезагрузки, повторно установить связь с ПЛК командой Online|│Login и загрузить созданную программу в ПЛК

17.В области конфигурации, подключением к GPRS можно управлять и контролировать с помощью специальных байт (рис.7). Время подключения к серверу, интервалы между дозвонами и кол-во дозвонов до GSM-сервера задаётся на вкладке «Module parameters» подмодуля modem.

Рис.7 Байты управления модемом, статус: «подключен по GPRS»

18.Удаленно проверить подключение ПЛК к сети Интернет с помощью «ping» в командной строке Windows, подключенного к Интернет ПК.

Например, «ping 83.220.242.28 –t» результат на рис.8.

Рис.8 Проверка подключения ПЛК к сети интернет через GPRS

Мой блог находят по следующим фразам

Пример использования библиотеки UNM контроллеров ОВЕН ПЛК1хх

Пример на языке ST реализует работу с модемом: посылку команды инициализации, набор номера и установку связи. Для работы примера в PLC Configuration должен быть подключен модуль UNM и настроен интерфейс обмена с модемом.

 

VAR

Error:BYTE;

P:POINTER TO RBDATA;

itsOK:STRING:=’OK$N$R’;

itsCONNCT:=’CONNECT$N$R’;

iter:INT;

END_IF

 

If(LockDevice(0)!=1) then

Error:=1;

Return;

End_if

 

If SetByte(0,‘ATZ$N$R’,5) !=1 then

Error:=1;

Return;

End_IF

 

(* Здесь задержка которая зависит от модема времени инициализации модема.

После этого мы должны получить ‘OK’ *)

For iter:=1 to len(itsOK) do

P:=GetByte(0);

If p=0 then

Error:=1;

return

else

if RBDATA_TO_STRING(p)<> MID (itsOK,1,iter); then

error:=1;

return;

end_if

End_if

END_FOR

(*Набор заданного номера*)

If SetByte(0,‘ATDT89161234567$N$R’,5) !=1 then

Error:=1;

Return;

End_IF

 

For iter:=1 to len(itsConnect) do

P:=GetByte(0);

If p=0 then

Error:=1;

return

else

if RBDATA_TO_STRING(p)<> MID (itsCONNECT,1,iter); then

error:=1;

return;

end_if

End_if

END_FOR

(*набор заданного номера – закончен – соединение прошло – остановим модуль UNM *)

ReleaseDevice(0);

 

Тут важно отметить, что используемая библиотека является хоть и самым коротким по длине кода, но не единственно возможным решением  поставленной задачи.