Matlab jako klient OPC. Przykład wysyłania i odbierania danych z PLC za pośrednictwem DA Serwera. Komputerowe Systemy sterowania (KSS) Katedra Inżynierii Systemów Sterowania, Politechnika Gdańska, Wydział; Elektrotechniki i Automatyki. Autor: Puchalski Bartosz, mgr inż. marzec, 2017. Szczegółowe informacje dotyczące wykorzystanych instrukcji do znalezienia w pomocy przybornika OPC Toolbox pakietu Matlab --- 'doc opc' Spis rzeczy Inicjalizacja Połączenie z serwerem OPC i odczyt jego zasobów Definicja grupy Dodanie pozycji Odczyt danych Wysłanie danych Ponowny odczyt danych w celu weryfikacji zapisu Rozłączenie z serwerem OPC Inicjalizacja Czyszczenie ekranu konsoli oraz zmiennych z przestrzeni roboczej. clc clear Adres IP komputera, na którym znajduje się serwer OPC. Jeżeli serwer OPC znajduje się na tym samym komputerze, na którym uruchamiany jest skrypt wtedy należy podać 'localhost'. host = '192.168.1.3'; Wyodrębnienie modułu serwera DA o nazwie 'ArchestrA.DASGESRTP.2, który obsługuje sterowniki GEFanuc spośród wszystkich modułów dostępnych na wybranym serwerze OPC Out = opcserverinfo(host) Out.ServerID' serv_no = strncmp(out.serverid,'archestra.dasgesrtp.2',19) serv_no = find(serv_no) serv_name = Out.ServerID{serv_no} Out = Host: '192.168.1.3' ServerID: {1x23 cell} ServerDescription: {1x23 cell} OPCSpecification: {1x23 cell} ObjectConstructor: {1x23 cell}
'Matrikon.OPC.Simulation.1' 'Cimplicity.DN.DirectNet405.1' 'Cimplicity.Mitsubishi.A1.1' 'View.Siemens.Tcpip.1' 'Cimplicity.GE.SRTP.1' 'ArchestrA.DASSIDirect.3' 'LogicPC.OpcServer.1' 'View.OpcServer.1' 'View.ModbusPlus.1' 'Kepware.KEPServerEX.V5' 'Cimplicity.DN.DirectNet305.1' 'Cimplicity.Siemens.PPI.1' 'Cimplicity.GE.SNP.1' 'Cimplicity.Siemens.MPI.1' 'GEFanuc.PDF.OpcServer.1' 'View.Siemens.AS511.1' 'View.CNC.1' 'View.CimplicityStation.1' 'ArchestrA.DASGESRTP.2' 'Cimplicity.AB.DH485.1' 'Cimplicity.Mitsubishi.FxFront.1' 'ArchestrA.FSGateway.2' 'GEIP.ProficyViewIntegratedOPCDriver.V5' serv_no = Columns 1 through 13 0 0 0 0 0 0 0 0 0 0 0 0 0 Columns 14 through 23 0 0 0 0 0 1 0 0 0 0 serv_no = 19 serv_name = ArchestrA.DASGESRTP.2 Zdefiniowanie obiektu OPC służacego do wymiany danych da = opcda(host, serv_name) da = Summary of OPC Data Access Client Object: 192.168.1.3/ArchestrA.DASGESRTP.2 Server Parameters Host : 192.168.1.3 ServerID : ArchestrA.DASGESRTP.2 Status : disconnected Timeout : 10 seconds Group : 0-by-1 dagroup object
Event Log : 0 of 1000 events Połączenie z serwerem OPC i odczyt jego zasobów Połączenie Matlaba z serwerem OPC connect(da) Odczyt zasobów serwera OPC. Poprzez okno dialogowe można wybrać zmienne, które chcemy odczytać. Instrukcja zwróci wybrane zmienne według kolejności wyboru. NodeList = browsenamespace(da) NodeList = 'New_GESRTP_PORT_000.New_GEFANUC_PLC_000.mem1' 'New_GESRTP_PORT_000.New_GEFANUC_PLC_000.real' Definicja grupy Dodanie grupy odczytu danych do wcześniej zdefiniowanego obiektu da grp = addgroup(da) grp = Summary of OPC Data Access Group Object: group1 Group Type : private Item : 0-by-1 daitem object Parent : 192.168.1.3/ArchestrA.DASGESRTP.2 Update Rate : 0.5 Deadband : 0% Object Status Active : on Subscription : on
Logging : off Logging Parameters Records : 120 Duration : at least 60 seconds Logging to : memory Status : Waiting for START. 0 records available for GETDATA/PEEKDATA Dodanie pozycji (item) Dodanie pozycji (item) do grupy obiektu da. Nazwy zmiennych zostały ustalone za pośrednictwem polecenia browsenamespace itm1 = additem(grp,nodelist(1)) itm2 = additem(grp,nodelist(2)) itm1 = Summary of OPC Data Access Item Object: New_GESRTP_PORT_000.New_GEFANUC_PLC_000.mem1 Parent : group1 Access Rights : read/write Object Status Active : on Data Parameters Data Type : logical Value : Quality : Bad: Out of Service Timestamp : itm2 = Summary of OPC Data Access Item Object: New_GESRTP_PORT_000.New_GEFANUC_PLC_000.real Parent : group1 Access Rights : read/write Object Status Active : on Data Parameters Data Type : single Value : Quality : Bad: Out of Service Timestamp : Odczyt danych Odczyt danych z serwera OPC bool = read(itm1,'device') real = read(itm2,'device') bool.value real.value
bool = ItemID: 'New_GESRTP_PORT_000.New_GEFANUC_PLC_000.mem1' Value: 0 Quality: 'Good: Non-specific' TimeStamp: [2017 3 12 20 21 40.8320] real = ItemID: 'New_GESRTP_PORT_000.New_GEFANUC_PLC_000.real' Value: 3.1415 Quality: 'Good: Non-specific' TimeStamp: [2017 3 12 20 21 40.8340] 0 3.1415 Wysłanie danych Wysłanie danych do serwera OPC write(itm1, 1) write(itm2, 2*3.1415) Ponowny odczyt danych w celu weryfikacji zapisu Poprzez pauzę wstrzymujemy Matlaba przed natychmiastowym odczytem uprzednio zapisanych danych. Jeżeli odczyt danych z serwera OPC jest zbyt szybki (występuje w następnej linijce kodu) Matlab może nie zauważyć zmian, gdyż serwer OPC odświeża stan zmiennych z opóźnieniem. pause(0.5); % Odczyt danych z serwera OPC bool = read(itm1,'device') real = read(itm2,'device') bool.value real.value bool = ItemID: 'New_GESRTP_PORT_000.New_GEFANUC_PLC_000.mem1' Value: 1 Quality: 'Good: Non-specific' TimeStamp: [2017 3 12 20 21 41.3500] real = ItemID: 'New_GESRTP_PORT_000.New_GEFANUC_PLC_000.real' Value: 6.2830
Quality: 'Good: Non-specific' TimeStamp: [2017 3 12 20 21 41.3520] 1 6.2830 Rozłączenie z serwerem OPC Odłącznie Matlaba od serwera OPC. disconnect(da) Published with MATLAB R2016a