Администрация форума не несёт ответственности за достоверность информации и оставляет за собой право редактировать или в особых случаях даже удалять посты без предупреждения. Спасибо за понимание.

Программирование ATMEL в BASCOM.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Программирование ATMEL в BASCOM. » Датчики и периферия » Визуализация и мониторинг различных устройств на ПК


Визуализация и мониторинг различных устройств на ПК

Сообщений 1 страница 19 из 19

1

Здравствуйте. Предлагаю развить тему всем желающим кто не очень силён в программирование приложений для ПК, но хочет видеть достойную картинку различных параметров, вести график собственных устройств (манометров, барометров, термометров и т. д.) к тому же удалённо управлять этим хозяйством.
Пожалуй начну с того, что уже получилось у меня. Я не претендую на роль "гуру", но мои наработки надеюсь помогут сдвинуть эту тему с мёртвой точки, а более опытные в этой теме надеюсь меня поправят.
Прежде всего нам понадобится OPC сервер его демо версию можно скачать Здесь она ограничена количеством тегов. 32 тега это 32 каких-либо параметров или команд на выполнение исполнительного устройства. Об установке и описании настройки чуть позже.
Затем понадобится клиентская программа SCADA из всего множества производителей  я остановился  на " Simp Light " , но это дело каждому по вкусу, повторюсь это клиентская прога можно любую другую Scada систему. Эта без платная  демо версия ограничена 16-ю тегами, но легко воспринимается и доступна для быстрого освоения.Scada
Вернёмся OPC после установки понадобится создать новый сервер кнопкой создать. Затем создать узел соответствующей кнопкой в нем дать название и выбрать метод соединения на первом этапе это будет COM порт, в дальнейшем я напишу как я это реализовал через преобразователь Enternet/RS485 по TCP/IP.http://s0.uploads.ru/t/uQVxL.jpg
затем нудно добавить устройство соответствующей кнопкой.http://sh.uploads.ru/t/FxG3b.jpg
далее добавляем тег в нём мы будем писать скрипт обращения с нашим устройствам.http://sa.uploads.ru/t/XolRL.jpg
теги пишутся на скриптовом си подобном языке но это займёт пару десятков строк. В сети и на сайте производителя OPC есть хороший мануал реализация собственных протоколов MU_MasterOPC_Server_API_UG там подробно в примере всё описано.http://sf.uploads.ru/t/0ZhDR.jpg
Пример в Скаде  сделанный за пять минут.http://s0.uploads.ru/t/LCHMd.jpg

http://s4.uploads.ru/t/OYfeN.jpg

В общем в теге мы формируем формат запроса к нашему устройству через СОМ порт я это делал всё по линии RS485 с различными преобразователями USB/RS485, E/485Преобразователи.
Со стороны нашего устройства преобразователь RS485/UART   MAX485 зная формат посылки запроса со стороны OPC, в железке формируем ответ со значением нашего параметра. При удачном общении ПК и железки у OPC сервера появляется отсылаемое значение. Его можно вставлять в собственную мнемосхему в СКАДЕ.

Отредактировано Sega12 (2017-08-01 23:35:31)

0

2

Пример ответа железки:

Код:
'*******************************************
'   формируем ответ на запрос по RS485
If S4et_mb >= 6 Then
   S4et_mb = 0
   Crc_x = Crcmb(bufer_rs485(1) , 4)                        ' считаем контрольную сумму принятого запрса
   Crc_in = Makeint(bufer_rs485(5) , Bufer_rs485(6))        ' собираем в одну переменную два байта принятой контрольной суммы
Else
   If Crc_x = Crc_in Then                                   ' сравниваем принятую и вычесленную контрольную сумму
      If Bufer_rs485(2) = 3 Then                            ' функция чтения значения манометра (MODBUS)
      '--------------------------
         If Bufer_rs485(3) = &H07 And Bufer_rs485(4) = &HD0 Then       ' читаем с 2000-го регистра
            Bufer_rs485(3) = High(davlenie_rs485)
            Bufer_rs485(4) = Low(davlenie_rs485)
            '----------------------------------
            Crc_x = Crcmb(bufer_rs485(1) , 4)
            Bufer_rs485(5) = Low(crc_x)
            Bufer_rs485(6) = High(crc_x)
            Waitms 200
            Disable Urxc
            Tx_mb = 1
            Print Chr(bufer_rs485(1)) ; Chr(bufer_rs485(2)) ; Chr(bufer_rs485(3)) ; Chr(bufer_rs485(4)) ; Chr(bufer_rs485(5)) ; Chr(bufer_rs485(6))
            Tx_mb = 0
            Enable Urxc
            S4et_mb = 0
         End If
      Else
         Fl_rs485_er = 1
       End If
   End If
End If
'*******************************************************************************


Пример скрипта:

Код:
-- Initialization
function OnInit()
leneer=0;
zna4enie=0;
zna4enie_min=0;
zna4enie_max=0;
end
-- Uninitialization
function OnClose()
end
-- Processing Код из этой функции вызывается каждый раз перед опросом тега 
function OnRead()
local registr_out={};
local lenErr;-- переменная для реального отправляемого значения в SCADA
local adres=server.GetCurrentDeviceAddress( );-- Реальный адрес устройства (запрашиваемого устройства) 
noeer,adres_devic,registr=Devic();-- возвращает функция Manom() :1)Номер ошибки; 2)Адрес ответившего устройства; 3)Значение 
--server.Message(registr);
--------------------------------------------
if registr==2000 then
    return
end;
if noeer==-21 then
    leneer=leneer+1;
    if leneer<5 then
        server.Message("Не коректный обмен данными!",leneer,"раз");
        registr=server.ReadCurrentTag();
        server.WriteCurrentTag(registr,OPC_QUALITY_GOOD);
    else
        server.Message("Не коректный обмен данными!",leneer,"раз");
        server.WriteCurrentTag(0,OPC_QUALITY_BAD );
    end;
    return
end
------------------------------------------------
if noeer==-20 then
    leneer=leneer+1;
    if leneer<5 then
        server.Message("Нет связи с устройством!",leneer,"раз");
        registr=server.ReadCurrentTag();
        server.WriteCurrentTag(registr,OPC_QUALITY_GOOD);
    else
        server.Message("Нет связи с устройством!",leneer,"раз");
        server.WriteCurrentTag(0,OPC_QUALITY_BAD );
    end;
    return
end
------------------------------------------------
if noeer==-30 then
    server.Message("Адрес в сети (RS485): ",adres_devic," ","Обрыв цепи датчика!");
    server.WriteCurrentTag(0,OPC_QUALITY_GOOD);
    return;        
end;
-----------------------------------------------------------------------------
if noeer>=0 then
    leneer=0;
    zna4enie=server.ReadCurrentTag();
    if zna4enie~=0 then
        zna4enie=zna4enie*100;
        zna4enie_min=zna4enie-30;
        zna4enie_max=zna4enie+30;
        ----
        if registr<=zna4enie_min then
            zna4enie=zna4enie-1;
        elseif registr>=zna4enie_max then
            zna4enie=zna4enie+1;
        elseif registr<zna4enie_max and registr>zna4enie_min then
            zna4enie=registr;
        end;
        zna4enie=zna4enie*0.01;
        --registr=registr*0.01;
        server.Message("Адрес в сети (RS485):",adres_devic,"   "," Значение:",zna4enie);
        server.WriteCurrentTag(zna4enie,OPC_QUALITY_GOOD);
    else
        registr=registr*0.01;
        server.Message("Адрес в сети (RS485):",adres_devic,"   "," Значение:",registr);
        server.WriteCurrentTag(registr,OPC_QUALITY_GOOD);
    end;
    return;        
end;
end;
----------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------
function Devic()
local Bufer_In={};-- массив полученного ответа
local Bufer_Out={}; --массив отправленного запроса
local Adress=server.GetCurrentDeviceAddress();--получения адреса устройства   Adress
table.insert(Bufer_Out,Adress); --добавляем в таблицу первый элемент - адрес 
table.insert(Bufer_Out,0x03); --добавляем в таблицу второй элемент - идентификатор команды 
table.insert(Bufer_Out,2000); --добавляем третий элемент - номер регистра   num_reg
-----------------------------------------------------------------------------------
local mask_out={"byte","byte","int16:10","int16:10"}; --маска отправляемого запроса 
-----------------------------------------------------------------------------------
local mask_in={"byte","byte","int16:10","int16:10"}; --маска принимаемого запроса
----------------------------------------------------------------------------------- 
local Error,len,otvet;
local n=0;
-----------------------------------------------------------------------------------
repeat      -- Отправляем запрос n-раз и обрабатывам ответ. ----
Error,Bufer_In,len=server.SendAndReceiveDataByMask(2,3,mask_out,Bufer_Out,mask_in,6);
n=n+1;
until Error>=0 or n>=server.GetCurrentDeviceRetry( );
------------------------------------------------------------------------------------
--server.Message(otvet);
if Error>0 then    ----запрос выполнен корректно
    if Bufer_In[3]~=255 then
        return Error,Adress,Bufer_In[3]
    else
        return -30,Adress,0
    end;
end;
------------------------------------------------------------------------------------
if Error<0 then
    --server.Message("Устройство не отвечает!" );
    return -20,Adress,0;
end;
------------------------------------------------------------------------------------
if Error==0 then
    --server.Message("Устройство не отвечает!" );
    return -21,Adress,0;
end;
end;

Отредактировано Sega12 (2017-08-01 22:18:35)

0

3

Sega12 написал(а):

Предлагаю развить тему всем желающим кто не очень силён в программирование приложений для ПК

Смотря на код скрипта не скажешь что его сходу поймут все кто не очень силен в программировании... Тем более ООП скрипт.
На бейсике код будет проще и понятнее. Плюс не понадобится устанавливать SCADA и прочие программы. Одно дело когда пишешь прогу для себя, и совсем другое когда хочешь поделится ею. Не думаю что многие будут "в восторге" от необходимости установки SCADA.

0

4

согласен с Петром на все 100%!

0

5

Считаете тема будет не востребована?

0

6

Sega12 написал(а):

Считаете тема будет не востребована?

Для меня не раскрыт главный вопрос - зачем это все?  :dontknow:

Наблюдать показания комнатных градусников в течении суток?
Смотреть сколько времени работал бойлер или эл.батарея?

Какие могут быть процессы, требующие столь пристального контроля?

0

7

Это может быть инкубатор для выведения цеплят находящийся предположим у вас в гараже на неком удалении ну или ещё какой нибудь технологический процесс требующий постоянного мониторинга. Также возможно и удалённое управление хоть дискретное хоть задание определённых параметров.

Отредактировано Sega12 (2017-08-02 00:09:10)

0

8

Sega12 написал(а):

Считаете тема будет не востребована?

Отчего же ?
Даже ржавые и гнутые гвозди находят применение... ;)

Только с использованием InTouch было бы несколько проще, да и графические возможности пошире...

0

9

инкубаторы у меня работают на ЖКИ 1602 :)
одному заказчику делал с СМС уведомлениями в случае проблем... Всё на экране ЛЮБОГО телефона.

микроскопом - гвозди?

0

10

А я вообще не парюсь, всё гоняю через обычный вэб-сервак + php. :)

0

11

Я думаю, что кому то обязательно понадобится.
Тем более что на форуме информации по SCADA не было.

0

12

Могу порекомендовать Rapid SCADA полностью бесплатная и очень простая в освоении. Работает в любом браузере. Если комп подключен к сети то достаточно на другом компе в браузере вбить адрес сервера и можно смотреть данные.
http://rapidscada.ru/

Отредактировано SyncMVGP (2017-08-03 06:42:57)

0

13

Это просто какая-то завуалированная реклама, причем просто так скачать нельзя, всё блин прикрыта тайной и не бесплатно.

0

14

RDW написал(а):

Это просто какая-то завуалированная реклама, причем просто так скачать нельзя, всё блин прикрыта тайной и не бесплатно.

Я не преследовал цель рекламировать тот или иной продукт. Демо версии достаточно чтобы реализовать не большой домашний проект автоматизированной системы. Проект реализован на контрольных точках давления в водоводах для определения мест утечек, так как мониторинг манометров мало кого интересует его можно адаптировать под любой технологический процесс. Тайны в тех приложениях нет они полностью русские и с подробным хелром, если проблема просто спокойно сесть  разобраться и оценит открывшиеся возможности....
переходники интерфейсов любые, я пробовал даже на китайском свистке USB/RS485 работает. Сейчас пробую сделать радиоудленител на HC-12.
Только в моём случае у меня первичный датчик манометр, а в вашем может быть что угодно. Манометр опубликован на сайте спутнике.

P.S. думаю тему можно удалить!

0

15

Sega12 написал(а):

Демо версии достаточно чтобы реализовать

Если всё так легко, то где просто скачивание EXE (или что там) для опробования? А нет, нужно рег данные с кучей полей заполнять! Ещё ничего не дали, а уже давай им данные представлять.

Sega12 написал(а):

думаю тему можно удалить

Ну зачем сразу обижаться, я констатирую факты. Если так всё супер, то дайте прямую ссылку на рабочий материал и чтобы оно работало (для ознакомления).

0

16

могу перекинуть по почте! не знаю как вложить здесь фаил.

0

17

Файл можно залить на файлообменник и ссылку здесь разместить.

0

18

Данный пост не является рекламой!
POC server MBOPCSERVER_SETUP_DEMORU_32TAGS.exe
SCADA SimpLight_setup_free_4.5.0.0.exe
Мануал для реализации собственных протоколов MU_MasterOPC_Server_API_UG.pdf

Отредактировано Sega12 (2017-08-03 19:42:04)

0

19

Одним файлом.

0


Вы здесь » Программирование ATMEL в BASCOM. » Датчики и периферия » Визуализация и мониторинг различных устройств на ПК