Documente Academic
Documente Profesional
Documente Cultură
Caracteristici si functionalitate
Asigura un canal de comunicatie bidirectional DDE
(dynamic data exchange), cu orice aplicatie (cu suport DDE)
Tipuri de date: Celule de date (scalari), Vectori de date
(lineari sau matriceali bidimensionali)
Asigura comunicatia cu alte module din cadrul
aplicatiei care o creeaza:
Accepta comenzi de la modulele aplicatie (pentru iesire de date catre
canalul DDE) prin CALL de metode declarate publice. Datele catre
canalul DDE sunt transmise de la modulele aplicatie catre entitatea de
comunicatie prin intermediul unei zone PUBLICE de date.
79
Canale DDE
APLICATIE
cu suport DDE
(Excel, MatLab)
Data Form
Data Arrays, Data Cells
Canale DDE
Componenta de
comunicatie
CALL CALL
EVENIMENTE
Data Class
Module CALL
Segment
public de
date
80
Publice, doar Modulele “interesate” in receptia de date DDE sunt obligate sa
cunoasca instanta Clasei de comunicatie.
Structura
FORMA de Date: este suportul controalelor care contin legatura DDE (DDE
Link). Aceste controale sunt de tip Label (comunicatia se face prin
intermediul proprietatii “Caption” si a evenimentului “Change”).
FORMA executa la initializare urmatoarele actiuni:
lanseaza in executie aplicatia EXCEL cu fisierul de
lucru dorit
seteaza Topica conversatiei DDE: LinkTopic =
"Excel|Sheet1"
seteaza sursa sau destinatia de date de conversatie
(celula sau vectorul de date): LinkItem
seteaza modul de legatura: LinkMode = Automatic
FORMA este creata de catre Clasa si ea are vizibilitate catre Clasa creatoare.
Astfel, FORMA primeste comenzi prin apelare directa (CALL) de la Clasa
creatoare a ei si este capabila de a trimite Date catre aceeasi clasa prin
apelare directa. Firele de executie ale FORMEI de Date si a Clasei creatoare a
ei sunt conectate (nu este utila deconectarea celor doua fire de executie).
CLASA de Date are rolul de a furniza o vizibilitate a caracteristicilor
FORMEI de Date catre modulele consumatoare si producatoare de date de la
si catre canalul DDE. Cu alte cuvinte Clasa va fi creata de unul din modulele
aplicatiei si va fi facuta vizibila catre celelalte module. Aceasta Clasa, fiind
un obiect distinct, va avea alocat propriul sau Thread (fir de exec utie) si pot
sa-i fie apelate metodele declarate publice si receptionate Evenimentele emise
de ea prin faptul ca este “vizibila” (celelalte module cunosc “referinta” ei).
81
Cele doua tipuri de socket-uri sunt:
82
corect, - UDP este un protocol de transport nesigur (nu este garantata
ajungerea unor date corecte la destinatie).
Modul in care se face transmisia datelor – prin care se
poate face distinctia intre protocoale de tip byte-stream (sir de octeti)
si protocoale de tip datagram. TCP este un protocol de tip byte-stream
(transmite toata informatia considerand-o ca pe un sir de octeti). UDP
este un protocol de tip datagrama, transmitand datele ca unitati
independente de informatie. O astfel de unitate independenta de
informatie este numita datagrama. Protocolul de tip datagrama
transmite fiecare datagrama independent de orice alta datagrama. Daca
pentru transmiterea unei informatii este necesar sa se transmita mai
multe datagrame la aceeasi destinatie atunci nu este sigur ca
datagramele vor ajunge in aceeasi ordine in care au fost transmise. Pe
de alta parte, UDP ofera diferentierea datagramelor intre ele (orice
receptie de date, reprezinta receptia unei datagrame, in conditiile in
care pachetul de date reprezentat de datagrama nu depaseste
dimensiunea maxima admisa la receptor), in timp ce in cazul TCP nu
se asigura nici transmiterea inregistrarii intr-un singur mesaj, si nici
concatenarea a doua sau mai multe inregistrari in acelasi byte-stream
(la nivel de aplicatie care utilizeaza un socket cu protocol de tip TCP,
trebuie utilizat un mecanism – protocol de diferentiere a
inregistrarilor).
83
contin valori ale unor variabile de proces reprezentand stari ale unor
parametri, transmise cu un caracter informativ (exemplu: date de
proces care periodic sunt afisate pe un ecran de operator). Un alt
exemplu este cazul mesajelor de sincronizare temporala (timpul
sistem al tuturor echipamentelor in intregul sistem informational al
procesului industrial) periodice care trebuie distribuite (broadcasting)
de catre o unitate de calcul, la toate celelelte echipamente din sistem.
Tipul topologic al suportului de transport de date –
tipul de retea de comunicatie utilizata. In cazul retelelor locale (LAN –
Local Area Network) gradul de siguranta a datelor pentru un protocol
de tip UDP este considerat bun, dar in conditiile WAN (Wide Area
Network) TCP se impune, deoarece un protocol de tip UDP nu poate
asigura un grad acceptabil de siguranta a transportului datelor.
Partenerul de comunicatie (in unele aplicatii de
comunicatie, partenerii de comunicatie nu ofera optiuni pentru ambele
tipuri protocoale).
Socket-uri Windows
84
Adresa (adresa locala / adresa partener) – reprezinta adresele IP (valori pe 32
biti identificand in mod unic interfata IP, sau asa numitul Computer
“Friendly” Name) care identifica in mod unic unitatea de calcul (gazda,
locala si respectiv host, partener) . Aceasta afirmatie necesita o nuantare – in
realitate nu identifica unitatea de calcul, ci “unitatea de calcul pe o retea”.
O unitate de calcul poate avea mai multe placi de retea (mai multe placi de
ethernet, wireless etc.), deci ea se poate conecta la mai multe retele.
“Unitatea de calcul pe o retea” identifica unitatea de calcul in cauza, pe o
anumita retea (acel modul hardware – interfata IP - care face vizibila si
identificabila in mod unic unitatea de calcul pe o retea data). Cum am spus,
socket-ul este un capat de conexiune, aceasta trebuie sa existe pe o retea de
comunicatie (si se identifica pe acea retea cu adresa) si deoarece pe aceeasi
adresa pot exista mai multe socket-uri (aceeasi aplicatie sau mai multe
aplicatii pot deschide conexiuni pe acelasi modul hardware de conectare)
acestea se identifica intre ele prin port.
Global, exista mai multe module hardware de conectare la retea cu aceeasi
adresa (dar pe o retea adresele sunt unice), pe aceeasi retea pot exista mai
multe socket-uri cu acelasi port local dar nu pe aceeasi unitate de calcul
(sistemul de operare va permite alocarea uni port in mod unic).
In acest mod (prin adresa si port) se poate identifica socket -ul local si
respectiv socket-ul partener (remote) in vederea crearii conexiunii.
85
Socket-ul ofera un mijloc de transport de date de tip full-duplex, deci la nivel
de transmitere/receptionare a datelor intre doua socket-uri, nu exista un
dezechilibru intre cei doi parteneri de comunicatie (partenerii sunt egali,
oricare poate initia o transmisie de date si celalalt le va receptiona).
In schimb, la nivelul realizarii conexiunii cei doi parteneri nu au r ol identic.
Stabilirea conexiunii pentru o comunicatie utilizand socket -uri se face prin
pozitionarea unui socket ca server si pozitionarea partenerului de comunicatie
in calitate de client.
Prin definitie modelul Client / Server implica: Server-ul ofera servicii, iar
Clientul apeleaza la serviciile Server-ului. In situatia comunicatiei prin
intermediul socket: socket-ul in pozitia Server ofera un singur serviciu –
receptioneaza cererile de conectare ale socket-ului Client sau socket-urilor
Clienti.
Serverul nu are initiativa in crearea unei conexiuni, acesta se gaseste in starea
de asteptare a cererilor de stabilire de conexiuni de la oricare Client („Listen”
– ascultare pasiva la un port a cererilor de conectare). Este in sarcina socket -
ului Client sa initieze cererea de conectare prin apelul metodei „Connect”.
86
Declararea variabilelor la nivel SRV_clsWinsockItem
87
ErrorHandler: 'in caz de eroare la inchidere socket
'se reancearca peste o secunda
Call sleep(1000)
Wend
End Sub
Declaratii:
88
'se va crea o noua instanta copil - cu comportament de
'"Partener de Client"
'prin apelul metodei AddItem - care returneaza un index
al
'noii instante.
'Acestei instante ii este apelata metoda DoAccept
Call myWinsockItem(AddItem).DoAccept(requestID)
' informeaza aplicatia client de nivel ierarhic superior
' de aparitia cererii de conectare
RaiseEvent EventConnectionRequest(Index, requestID)
End Sub
Clientii sunt singurele instante asupra carora se pot implementa proceduri de refacere
a conexiunilor care s-au intrerupt. Clientii pot sa genereze o deconectare si o alta
cerere de conectare in cazul identificarii unor erori de comunicatie. Serverii sunt
pasivi si asteapta ca alte socket-uri sa se deconecteze respectiv sa ceara sa se
conecteze la ei. Partenerii de Clienti sunt in imposibilitatea de a regenera o
89
comunicatie. In cazul deconectarii Clientului, acesta informeaza clasa parinte, iar
aceasta este responsabila cu distrugerea instantei de Partener de Client.
OPC Server: - Componentele OPC care furnizeaza servicii unei alte componente
prin intermediul unei interfete. Acestea implementeaza interfata cu sistemele de
comunicatie existente si de asemenea schimba informatii cu clientul OPC.
90
OPC Client: - Componentele OPC care acceseaza unul sau mai multe servere
OPC ca sursa de servicii.
In pricipiu Client-ul OPC, care este atasat nivelului de aplicatie, are o
interfata de tip standard cu Server-ul OPC. Server-ul OPC ofera servicii
Clientilor OPC dar este responsabil si cu implementarea interfetei (cu un
puternic caracter non standard) cu modulele (mediului industrial) pentru care
acest OPC Server este dedicat. Aceasta inseamna ca prin intermediul acestei
abordari - nivelul de aplicatie este facut insensibil la modificari in detaliile
de implementare ale modulelor de la nivelele inferioare.
Producatorul de “module de date de proces” (module hardware care sunt
sursa de date de la proces sau/si destinatie de date catre proces) pune la
dispozitie server-ul OPC pentru aceste module.
91
Monitorizarea valorilor uneia sau mai multor variabile
de proces
Semnalarea schimbarilor de valori
Modelul ierarhic al claselor, pentru OPC Data Acces contine trei nivele (trei
nivele de clase):
OPC Server
OPC Group
OPC Item
Clasa OPC Group - Orice instanta a clasei OPC Group are ca parinte o clasa
OPC Server si structureaza variabile de proces utilizate de OPC Server. Se
pot defini mai multe instante ale OPC Group, avand aceeasi clasa parinte. In
acest fel se poate defini o partitionare a multimii de variabile de proces
(utilizate de aplicatia client) in submultimi alocate fiecare unui OPC Group
(spre exemplu – variabilele continute intr-un ecran de aplicatie pot sa fie
alocate aceluiasi OPC Group). OPC Group defineste operatii de citire si
scriere a variabilelor de proces alocate.
Clasa OPC Item – Orice instanta a clasei OPC Item are ca parinte o clasa
OPC Group si reprezinta o variabila de proces. O variabila de proces este un
element (item) in spatiul de “nume” de variabile ale OPC Server, si este
identificata in mod unic printr-un “nume” ItemID.
Fiecare Item are asociate urmatoarele proprietati:
92
Value (ultima valoare achizitionata a variabilei)
Quality (este un indicator de calitate a procesului
achizitiei, aratand gradul de certitudine a valorii citite)
Time Stamp (momentul de timp cand a fost
achizitionata valoarea actuala a variabilei)
<protocolID>:[<connectionname>]<variablename>
Exista doua tipuri de acces ale clasei OPC Item la variabilele de proces:
Acces Sincron si Acces Asincron.
Atat pentru accesul de tip Sincron cat si pentru cel de tip Asincron exista
doua moduri de acces la variabilele de proces: citire (Read) si scriere (Write).
Accesul sincron:
mecanismul de acces sincron: applicatia client apeleaza
functia de citire sau functia de scriere a unor variabile de proces,
printr-un apel de subrutina (metoda) a clasei OPC Item
93
corespunzatoare acelei variabile. Intoarcerea din metoda apelata se
face cand procesul de citire sau scriere a luat sfarsit.
avantaje: asigura cea mai mare viteza posibila a
schimbului de date intre OPC Server si OPC Client (deoarece, in
cadrul procesului de acces, exista un singur transfer de date intre
aceste doua componente).
dezavantaje: aplicatia client este intrerupta
(suspendata) in timpul executiei accesului sincron. Atata timp cat
accesul de tip sicron nu este utilizat in propriul sau “fir de executie”
(thread), executia aplicatiei client este suspendata.
Accesul asincron:
mecanismul de acces asincron: applicatia client
porneste procesul de citire sau functia de scriere a unor variabile de
proces, printr-un apel de subrutina (metoda) a clasei OPC Item
corespunzatoare acelei variabile. Intoarcerea din metoda apelata se
face imediat, indicand daca procesul de transfer a sarcinilor catre OPC
Server a fost terminat cu succes. Dupa aceasta aplicatia client continua
executia. OPC Server asociaza un identificator (TransactionID)
sarcinilor apelate, urmand ca aplicatia client sa identifice raspunsul
primit pentru aceasta tranzactie prin acest identificator. In momentul
in care tranzactia ceruta a luat sfarsit, OPC Server apeleaza cu unul
din parametri TransactionID, functia AsyncReadComplete in cazul in
care operatia a fost de citire (Read) sau functia AsyncWriteComplete
in cazul in care operatia ceruta a fost de scriere (Write). Timpul de
trimitere a unui raspuns de catre OPC Server, este nedefinit, si nu este
dependent de aplicatia OPC Client (este dependent doar de capacitatea
suportului de comunicatie).
avantaje: aplicatia client practic nu este intrerupta de
apelul functiilor de citire si scriere a variabilelor de proces. Pentru un
numar mare de variabile de proces, sau in conditiile unui suport de
comunicatie susceptibil de saturare acest tip de acces este practic
singura optiune.
dezavantaje: viteza schimbului de date intre OPC
Server si OPC Client este mai mica decat in cazul accesului sincron
(deoarece, in cadrul procesului de acces, exista doua transferuri de
date intre aceste doua componente)
94
Fig. 5.4 Mecanismul comunicatiei sincrone
Variabile globale:
ServerObj.Connect (”OPC.SimaticNET”)
95
Adaugarea unui grup (fiecare instanta a clasei OPCServer are o colectie de
obiecte OPCGroups ):
Scrierea sincrona:
Declararea si initializarea de variabile locale:
96
LongServerhandles(1) = ItemObj.ServerHandle
GroupObj.SyncWrite 1, Serverhandles, MyValues, MyErrors
97
End Function
Const WRITEASYNC_ID = 1
Const READASYNC_ID = 2
Const REFRESHASYNC_ID = 3
98
Stabilirea unei conexiuni cu serverul OPC al SIMATIC NET
ServerObj.Connect (”OPC.SimaticNET”)
Conectarea:
GroupObj.IsSubscribed = True
Adaugarea de Item-uri
Set ItemObj1=GroupObj.OPCItems.AddItem(”S7:[DEMO]MB1”,
1)
Set ItemObj2=GroupObj.OPCItems.AddItem(”S7:[DEMO]MW3”,
2)
Citirea asincrona:
99
Dim ServerID As Long
Dim ErrorNr() As Long
Dim ErrorString As String
ClientID = READASYNC_ID
Scrierea asincrona:
100
Dim ErrorNr() As Long
Dim ErrorString As String
Dim Cancel_id As Long
MyValues(1) = Edit_WriteVal
101
ItemValues - contine valorile variabilelor care s-au
modificat.
Qualities - informatii despre integritatea datelor.
102
Event DataChange(TransactionID As Long,
NumItems As Long,
ClientHandles() As Long,
ItemValues() As Variant,
Qualities() As Long,
TimeStamps() As Date)
MsgBox ErrorString, vbCritical,
”Error AsyncWriteComplete()”
End If
End If
Dim i As Long
For i = 1 To NumItems
Edit_OnDataVal(i - 1) = ItemValues(i)
Edit_OnDataQu(i - 1) = GetQualityText(Qualities(i))
Edit_OnDataTS(i - 1) = TimeStamps(i)
Next i
103
End Select
End Function
104
actualizarea obiectelor de tip date de proces
inregistrate
Managementul evenimentelor
Actiuni ale magistralei, mesaje sau erori sunt evenimente pe care HLI le
codeza intr-o inregistrare de date de tip eveniment si le stocheaza intr-o lista
interna FIFO. Evenimentele sunt clasificate dupa cum urmeaza:
105
erori interne (de ex., daca nu este destul spatiu de
memorie)
erori ale DDI
erori ale modulului de control al magistralei
erori ce cauzeaza oprirea magistralei
mesaje de la dispozitive
controlul schimbarii starii INTERBUS
erori de comunicare PCP
erori de aplicatie
Controlul INTERBUS
Servicii de informare
Functii HLI
106
presupunand ca o configuratie operabila de magistrala este conectata la
modulul de control al magistralei. Dupa executia cu succes a functiei de
initializare, modulul de control al magistralei este in starea “Activ”. Ciclurile
de date nu sunt pornite inca, fiind necesar apelul functiei
“HLI_IBS_StartBus”.
107
3. Functii pentru inregistrarea datelor de proces
IBS_HLI_RegisterPDO_BOOL( Controller_ID,IBS_PDO_INPUT
or_IBS_PDO_OUTPUT,
Segment, Position, Byte_Offset, Bit_Position,
Reference_to_Object,
Reference_to_State_Changed_Indication_Variable)
IBS_HLI_RegisterPDO_BITSTRING(Controller_ID, IBS_PDO_INPUT or
IBS_PDO_OUTPUT, Segment, Position, Byte_Offset,
Bit_Position,
Bit_Length, Reference_to_Object,
Reference_to_State_Changed_ Indication_Variable)
La apelarea functiei
IBS_HLI_PD_In( Controller_ID)
HLI citeste imaginea curenta a datelor de intrare proces ale modulului de
control al magistralei INTERBUS si actualizeaza toate obiectele inregistrate,
de tip date de intrare.
Apelarea functiei
IBS_HLI_PD_DeviceIn( Controller_ID, Segment, Position)
permite actualizarea valorilor obiectelor de intrare de tip date de proces de la
un dispozitiv specificat direct din imaginea curenta a procesului.
Apelarea functiei
108
IBS_HLI_PD_Input( Controller_ID, Reference_to_Object)
permite actualizarea unui obiect individual de intrare de tip date de proce s
direct din imaginea curenta a procesului.
La apelarea functiei
IBS_HLI_PD_Out( Controller_ID)
HLI transmite valorile curente ale obiectelor de tip date de proces la imaginea
de iesire a procesului INTERBUS.
Apelarea functiei
IBS_HLI_PD_DeviceOut( Controller_ID, Segment, Position)
permite transferul valorii unui obiect de iesire de tip date de proces direct la
imaginea curenta a procesului.
Apelarea functiei
IBS_HLI_PD_Output( Controller_ID, Reference_to_Object)
permite transferul valorii unui obiect de iesire de tip date de proces la
imaginea curenta a procesului.
5. Controlul INTERBUS
109
erorii si de functia ce a generat-o, aceasta (functia apelata) genereaza unul
sau mai multe evenimente ce pot fi citite pentru informatii suplimentare.
Citirea evenimentelor
La apelarea functiei:
IBS_HLI_DisableEvents( Controller_ID,Group_Code_Combination)
grupurile de evenimente sunt dezactivate. Acestea sunt activate prin apelarea
functiei:
110
Fereastra de evenimente
Apelarea functiei:
IBS_HLI_CreateLogWindow(Controller_ID,Language_Code,Filter_Setting_P
ossible)
determina crearea ferestrei de evenimente pentru Controller_ID.
unde:
Filter_Setting_Possible = 0 => nu este posibila filtrarea evenimnetelor
Filter_Setting_Possible ≠ 0 => filtrarea evenimentelor este posibila
111