Rozwój i testowanie oprogramowania dla systemów wbudowanych



Podobne dokumenty
Etapy życia oprogramowania

PROGRAMOWANIE SYSTEMÓW CZASU RZECZYWISTEGO

Etapy życia oprogramowania. Modele cyklu życia projektu. Etapy życia oprogramowania. Etapy życia oprogramowania

Podstawy programowania III WYKŁAD 4

12) Wadą modelu kaskadowego jest: Zagadnienia obowiązujące na egzaminie z inżynierii oprogramowania: 13) Wadą modelu opartego na prototypowaniu jest:

Iteracyjno-rozwojowy proces tworzenia oprogramowania Wykład 3 część 1

Spis treści 1. Wstęp 2. Projektowanie systemów informatycznych

Błędy procesu tworzenia oprogramowania (Badania firmy Rational Software Corporation)

Szkoła programisty PLC : sterowniki przemysłowe / Gilewski Tomasz. Gliwice, cop Spis treści

Egzamin / zaliczenie na ocenę*

Wykład 3: Implementacja programów wbudowanych

Wprowadzenie do metodologii modelowania systemów informacyjnych. Strategia (1) Strategia (2) Etapy Ŝycia systemu informacyjnego

Komputerowe Systemy Przemysłowe: Modelowanie - UML. Arkadiusz Banasik arkadiusz.banasik@polsl.pl

Współbieżność w środowisku Java

Temat: System zarządzania zadaniami i ich komunikacja (Scheduler, MessageBox).

Wykład 1 Inżynieria Oprogramowania

Projektowanie systemów informatycznych. wykład 6

Tworzenie oprogramowania

Wątek - definicja. Wykorzystanie kilku rdzeni procesora jednocześnie Zrównoleglenie obliczeń Jednoczesna obsługa ekranu i procesu obliczeniowego

Usługa: Testowanie wydajności oprogramowania

Technika mikroprocesorowa. Systemy operacyjne czasu rzeczywistego

Środowisko Keil. Spis treści. Krzysztof Świentek. Systemy wbudowane. 1 Trochę teorii. 2 Keil

Projektowanie oprogramowania cd. Projektowanie oprogramowania cd. 1/34

4. Procesy pojęcia podstawowe

IBM Rational Software Architect uproszczona instrukcja użytkowania

Programowanie obiektowe

Inżynieria oprogramowania. Jan Magott

PRZEWODNIK PO PRZEDMIOCIE

Zaawansowane programowanie w języku C++

UML w Visual Studio. Michał Ciećwierz

Nazwa przedmiotu: MODELOWANIE I ANALIZA SYSTEMÓW INFORMATYCZNYCH. Modeling and analysis of computer systems Forma studiów: Stacjonarne

Problem Próby rozwiązania Maszyna stanów Inne zastosowania Podsumowanie. Maszyny stanów. Programowanie gier bez Unity, cz. 3.

Mechanizmy pracy równoległej. Jarosław Kuchta

Zakres wykładu. Podstawy InŜynierii Oprogramowania

Jarosław Kuchta Dokumentacja i Jakość Oprogramowania. Wymagania jakości w Agile Programming

<Nazwa firmy> <Nazwa projektu> Specyfikacja dodatkowa. Wersja <1.0>

Inżynieria Programowania - Projektowanie architektoniczne

UML cz. III. UML cz. III 1/36

Zasady organizacji projektów informatycznych

Programowanie zespołowe

Wzorce projektowe. dr inż. Marcin Pietroo

Cel wykładu. Literatura. Wyższa Szkoła Menedżerska w Legnicy. Modelowanie wymagań Wykład 2

Zagadnienia (1/3) Data-flow diagramy przepływów danych ERD diagramy związków encji Diagramy obiektowe w UML (ang. Unified Modeling Language)

Czym jest jpalio? jpalio jpalio jpalio jpalio jpalio jpalio jpalio jpalio

Programowanie Zespołowe

Spis treúci. 1. Wprowadzenie... 13

4. Procesy pojęcia podstawowe

projektowanie systemu

REQB POZIOM PODSTAWOWY PRZYKŁADOWY EGZAMIN

Metody optymalizacji soft-procesorów NIOS

Scaling Scrum with SAFe. Małgorzata Czerwińska

INŻYNIERIA OPROGRAMOWANIA TESTOWANIE INTEGRACYJNE

Projektowanie systemów informatycznych. Roman Simiński programowanie.siminskionline.pl. Cykl życia systemu informatycznego

Procesowa specyfikacja systemów IT

Rok akademicki: 2012/2013 Kod: IET SW-s Punkty ECTS: 3. Kierunek: Elektronika i Telekomunikacja Specjalność: Systemy wbudowane

Podstawy modelowania programów Kod przedmiotu

ECDL Podstawy programowania Sylabus - wersja 1.0

Zofia Kruczkiewicz - Modelowanie i analiza systemów informatycznych 1

AUREA BPM HP Software. TECNA Sp. z o.o. Strona 1 z 7

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Feature Driven Development

Kurs programowania. Wykład 12. Wojciech Macyna. 7 czerwca 2017

Diagramy czynności Na podstawie UML 2.0 Tutorial

Analiza i programowanie obiektowe 2016/2017. Wykład 6: Projektowanie obiektowe: diagramy interakcji

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

KARTA MODUŁU KSZTAŁCENIA


Wskazówki projektowe. Programowanie Obiektowe Mateusz Cicheński

Tworzenie programów równoległych. Krzysztof Banaś Obliczenia równoległe 1

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz

Testowanie aplikacji mobilnych na platformie Android - architektura, wzorce, praktyki i narzędzia

Całościowe podejście do testowania automatycznego dla programistów. (TDD, BDD, Spec. by Example, wzorce, narzędzia)

Wzorce Strukturalne. Adapter: opis. Tomasz Borzyszkowski

Projekt i implementacja systemu obsługi kart chipowych

Michał Olejnik. 22 grudnia 2009

InPro BMS InPro BMS SIEMENS

Opis metodyki i procesu produkcji oprogramowania

REFERAT PRACY DYPLOMOWEJ

Szkolenia specjalistyczne

Tworzenie programów równoległych. Krzysztof Banaś Obliczenia równoległe 1

OSGi Agata Hejmej

Programowanie niskopoziomowe. dr inż. Paweł Pełczyński

1. Tworzenie nowego projektu.

Metodyki zwinne wytwarzania oprogramowania

JAVA W SUPER EXPRESOWEJ PIGUŁCE

In ż ynieria oprogramowania wykład II Modele i fazy cyklu życia oprogramowania

Specyfikowanie wymagań przypadki użycia

Narzędzia CASE dla.net. Łukasz Popiel

Architektura Systemu. Architektura systemu umożliwia kontrolowanie iteracyjnego i przyrostowego procesu tworzenia systemu.

PRZEWODNIK PO PRZEDMIOCIE

KARTA PRZEDMIOTU. Projektowanie systemów czasu rzeczywistego D1_13

Metodyki zwinne wytwarzania oprogramowania

HP Service Anywhere Uproszczenie zarządzania usługami IT

SYSTEMY OPERACYJNE WYKLAD 6 - wątki

Szablony funkcji i szablony klas

Inżynieria Oprogramowania. Robert Szmurło

Technika mikroprocesorowa. Struktura programu użytkownika w systemie mikroprocesorowym

Wzorce projektowe. dr inż. Marcin Pietroo

Jeśli chcesz łatwo i szybko opanować podstawy C++, sięgnij po tę książkę.

Programowanie zwinne

Transkrypt:

Marcin Bajer, ABB Corporate Research, Starowiślna 13a, 31-038 Kraków, Rozwój i testowanie oprogramowania dla systemów wbudowanych Politechnika Krakowska 20.03.2014 March 20, 2014 Slide 1

Agenda Systemy wbudowane, Proces wytwórczy oprogramowania, Specyfikacja wymagań, Opis architektury, Wzorce projektowe, Implementacja i dokumentacja, Testowanie, March 20, 2014 Slide 2

Systemy wbudowane (embedded systems) Oparty na mikroprocesorze, Silnie powiązany ze sprzętem, Spełniający określoną funkcję, Często: ograniczone zasoby, większa niezawodność, deterministyczny czas reakcji Źródło: Wikipedia March 20, 2014 Slide 3 Źródło: Wikipedia Źródło: Wikipedia

Prognozy na przyszłość Wzrost popularności, Wzrost wydajności, Wzrost skali skomplikowania, Wzrost ilości wymienianych danych, Spadek ceny, March 20, 2014 Slide 4

Proces wytwórczy oprogramowania (Software process) Uporządkowany zbiór aktywności wykonywanych w celu rozwoju oprogramowania a także jego późniejszego utrzymania, Wiele różnych modeli wszystkie mają na celu tworzenie oprogramowania o lepszej jakości w deterministycznych ramach czasowych, March 20, 2014 Slide 5

Cowboy coding Autonomia programisty, Brak sformalizowanego procesu tworzenia oprogramowania, Projekty jednoosobowe lub bardzo małe, Może prowadzić do tragicznego kodu, Może prowadzić do genialnych rozwiązań, March 20, 2014 Slide 6

Model kaskadowy tworzenia oprogramowania (Waterfall model) Używany przez wiele dużych firm produkujących oprogramowanie, Sekwencja nienakładających się na siebie faz projektu, Zaliczany do ciężkich wymaga dokładnego planowania i wyczerpującej dokumentacji, Wymagania specyfikowane na początku i niezmienne (teoretycznie), Sprawdza się w projektach z dobrze zdefiniowanymi wymaganiami, Powstało wiele modyfikacji, Model poniżej zmodyfikowany względem oryginalnego w celu pokazania równoległości podczas faz projektowania i implementacji Wymagania podział HW/SW Projekt oprogramowania Projekt sprzętu Implementacja oprogramowania Testowanie Wydanie produktu Implementacja sprzętu Integracja HW/SW Utrzymanie March 20, 2014 Slide 7

Metodologie zwinne (agile) Reakcja na ciężkie metodologie tworzenia oprogramowania, Model iteracyjno-przyrostowy tworzenia oprogramowania, Mniej dokumentów, mniej biurokracji, Mniejsza przewidywalność, Zrealizowane funkcjonalności, głównym miernikiem stopnia realizacji projektu, Wymagany bliski kontakt z klientem, Wymagana dobra komunikacja wewnątrz zespołu projektowego, Sprawdza się w projektach gdzie wymagania nie są dokładnie znane w momencie definiowania projektu, Wstępne wymagania Szczegółowe wymagania Projekt Testowanie Implementacja Utrzymanie March 20, 2014 Slide 8

Metodyki tworzenia oprogramowania - podsumowanie Warto zdefiniować proces tworzenia oprogramowania, przed rozpoczęciem pracy nad projektem, Nie ma jednej uniwersalnego podejścia, Każdy model posiada plusy i minusy, należy dobrać najodpowiedniejsze podejście - można łączyć praktyki z różnych modeli, W programowaniu urządzeń wbudowanych raczej stosowane są pochodne modelu kaskadowego, March 20, 2014 Slide 9

Karta projektu (project charter) Zawiera: Cele projektu, Główne zagrożenia, Lista interesariuszy, Co zostanie wykonane, Co na pewno jest poza projektem, Pozwala na: Podjęcie decyzji o rozpoczęciu projektu, Zdefiniowanie zakresu projektu, Takie same rozumienie celów, priorytetów i ograniczeń projektu, March 20, 2014 Slide 10

Specyfikacja wymagań Zawiera, wyczerpujący opis działania rozwijanego systemu, Tłumaczy intencje klienta na formalne wymagania, Wymaganie zawiera opis działania, wymagalność a także, jeśli dotyczy, warunkami i ograniczeniami: Po uruchomieniu [warunek], urządzenie musi być [wymagalność] w pełni funkcjonalne [opis działania] w ciągu 10s [ograniczenie] Specyfikacja wymagań często jest tworzona w języku naturalnym należy dbać o jednoznaczność, Specyfikacji wymagań powinna wystarczyć do opracowania testów funkcjonalnych Dostępne dedykowane narzędzia do zarządzania wymaganiami (HP ALM, IBM Rational DOORS ) pozwalają na łączenie wymagań z wersjami urządzenia, testami funkcjonalnymi oraz repozytorium kodu źródłowego, March 20, 2014 Slide 11

Projekt sprzętu i oprogramowania Oprogramowanie dla systemów wbudowanych jest silnie powiązane ze sprzętem, dlatego obydwa powinny być wspólnie rozwijane, Część funkcjonalności może być realizowana sprzętowo a część programistycznie (partitioning decision), Sprzęt i oprogramowanie rozwijane są często równolegle, warto zaplanować kilka razy integrację, Sprzęt i oprogramowanie najlepiej testować osobno testowanie całego systemu jest trudniejsze i czasochłonne, March 20, 2014 Slide 12

Opis architektury systemu Architektura systemu - podstawowa organizacja systemu wraz z jego komponentami, wzajemnymi powiązaniami, środowiskiem pracy i regułami ustanawiającymi sposób jej budowy i rozwoju * Często w formie graficznej (diagramy UML), Prosty do zrozumienia, Bez szczegółów implementacji, Odporny na zmiany szczegółów systemu (np. nie zawiera nazw szczegółowych komponentów), Zawiera: Wyszczególnienie najważniejszych elementów systemu, Przepływ informacji w systemie, Podział funkcjonalności sprzęt/oprogramowanie, * IEEE Recommended Practice for Architectural Description of Software-Intensive Systems, IEEE Std 1471-2000, IEEE Computer Society 2000.09.21 March 20, 2014 Slide 13

Szczegółowy opis implementacji Dostarcza programistom szczegółowe wytyczne, Ważne w dużych projektach, w małych bezpośrednia interakcja między członkami zespołu bywa bardziej efektywna, Łatwo staje się nieaktualna, Samodokumentujący się kod lepszy od szczegółowej dokumentacji, March 20, 2014 Slide 14

Architektura karuzelowa (round robin) Bardzo prosta, Wszystkie moduły systemu mają ten sam priorytet, Odpowiednia do prostych systemów o podobnych ograniczeniach czasowych dla każdego modułu Pesymistyczny czas reakcji równy sumie czasów wykonywania wszystkich modułów, Jeżeli wymagana szybsza reakcja wywołanie moduł może wystąpić wiele razy w pętli, main module1 module2 module3 module4 void main(void) { while (TRUE) { module1(); module2(); module3(); module4(); March 20, 2014 Slide 15

Architektura karuzelowa z przerwaniami (round robin with interrupts) Krytyczne czasowo funkcjonalności obsługiwane w przerwaniu, Dodatkowe przetwarzanie danych z przerwania w pętli głównej, Pesymistyczny czas całkowitej reakcji równy sumie czasów wykonywania wszystkich modułów, Problem dzielonej pamięci, module1 module2 module3 main IRQ1 IRQ2 void main(void) { while (TRUE) { module1(); module2(); module3(); if (irq1_do_calc) irq1addcalc(); if (irq2_do_calc) irq2addcalc(); IRQ1 time consuming IRQ2 time consuming void IRQ1_ISR(void) { irq1_do_calc = true; March 20, 2014 Slide 16

Problem dzielonych danych Procesor 16bit, Wydzierżawianie przerwań włączone, volatile uint32 timer; * Higher priority ADC interrupt void ADC_ISR(void) { volatile uint32 timestamp; timestamp = timer; * Lower priority timer increase interrupt (preemption enabled) void Timer_ISR(void) { timer++; March 20, 2014 Slide 17

Function Queue Scheduling W pętli głównej wywoływane funkcje z kolejki, Pozwala na prioretyzowanie krytycznych czasowo zadań, Szczególnie użyteczne do przetwarzania danych z przerwań, Pesymistyczny czas reakcji równy długości najdłuższej funkcji możliwej do dodania do kolejki, run_first_from_queue( ) main IRQs IRQ1 IRQ2 Task queue IRQ1 time consuming module2 module1 module2 module3 int queue_top = 0; int queue_buttom = 0; int (*task_queue[255]) (void); void main(void) { while (TRUE) { run_first_from_queue(); void run_first_from_queue() { if (queue_top!= queue_buttom) (*task_queue[queue_top--]); March 20, 2014 Slide 18

System Czasu Rzeczywistego Duża elastyczność pod względem przypisywania priorytetów do zadań, Ma zastosowanie w skomplikowanych systemach, Wprowadza dodatkowy narzut (moc obliczeniowa, wykorzystanie pamięci), Wymaga zsynchronizowania zadań i dzielenia danych pomiędzy zadaniami, Dodatkowe zalety: Wymusza modularność kodu (łatwiejsze testowanie i współtworzenie kodu) Wprowadza abstrakcje sprzętu (Hardware Abstraction Layer), Dostarcza abstrakcyjne typy danych (kolejka, lista, semafor, mutex ), March 20, 2014 Slide 19

FreeRTOS cykl życia zadania Suspend Ready Running Event Block Suspend Blocked Suspend Suspended Resume March 20, 2014 Slide 20

Przykładowy wykres przełączeń pomiędzy zadaniami Idle Scheduler Task1 Task2 Interrupt Task1 ready Interrupt Task2 ready Task 2 blocked Task 1 blocked March 20, 2014 Slide 21

Wymiana danych przykładowe rozwiązanie Dla każdego zadanie definiujemy strukturę TaskEvent, tablice elementów tego typu i kolejkę przyjmującą wskaźniki do elementów o tym typie, Dodatkowo wskaźniki do nie używanych elementów z tablicy przechowywane są na stosie, takeevent pobiera wskaźnik ze stosu, returnevent zwraca go a waitforevent wstrzymuje działanie zadania do momentu aż w kolejce pojawi się nowy element EventsArray <<array of TaskEvent>> element(0) element(1)... element(n-1) element(n) TaskQueue <<queue of pointers>> &element(n)......... FreeEvents <<stack of pointers>> &element(0) &element(1)... &element(n-1) TaskEvent <<struct>> type: EventType data: EventExtraData... Task waitforevent(): TaskEvent* takeevent(): TaskEvent* returnevent(taskevent*): void EventsArray[n]: TaskEvent FreeEvents: Stack<TaskEvent*> TaskQueue: Queue<TaskEvent*> EventType <<enum>> Event1 Event2... EventExtraData <<union>> Event1Data <<struct>> data1: uint8 data2: uint16 Event2Data <<uint8>> typedef struct { enum { Event1,Event2, EventType; union { Struct { uint8 data1; uint16 data2; Event1Data; uint8 Event2Data; EventExtraData; TaskEvent; March 20, 2014 Slide 22

Linux dla systemów wbudowanych Bardzo popularny, Łatwo skalowalny, Wyczerpująca dokumentacja, Ograniczenia sprzętowe nie grają już tak wielkiej roli, Duże wsparcie społeczności, Darmowy, Może być systemem czasu rzeczywistego, Dystrybucję na urządzenia wbudowane: March 20, 2014 Slide 23 Buildroot, Openwrt, XBMC, Yocto Project, OpenEmbedded, Linaro,

Wzorce projektowe Mniej opisane niż w przypadku programowania obiektowego, ale istnieją. Najbardziej rozpowszechniony maszyna stanu (state machine): EV_ERR_HANDLED EV_TIMEOUT TX_ERROR EV_TX_REQ TX_PROC EV_TX_END TX_READY IDLE EV_RX_HANDLED EV_RX_REQ EV_TIMEOUT RX_READY RX_PROC EV_ERR_HANDLED EV_ERROR RX_ERROR Event State IDLE TX_PROC RX_PROC TX_ERROR TX_READY RX_READY RX_ERROR EV_TX_REQ TX_PROC EV_TX_END TX_READY EV_RX_REQ RX_PROC EV_RX_HANDLED IDLE EV_TX_HANDLED IDLE EV_TIMEOUT RX_READY EV_ERR_HANDLED IDLE IDLE EV_ERROR TX_ERROR RX_ERROR ALWAYS March 20, 2014 Slide 24

Maszyna stanowa przykładowe implementacje typedef enum {EV_TX_REQ, EV_TX_END, EV_RX_REQ, Events; typedef enum {RTU_IDLE, RTU_TX_PROC, RTU_RX_PROC, States; States currentstate = RTU_IDLE; void rtustatemachine(events event) { switch(currentstate) { case RTU_IDLE: if (event == EV_TX_REQ) currentstate = RTU_TX_PROC; if (event == EV_RX_REQ) currentstate = RTU_RX_PROC; break; typedef enum {EV_TX_REQ, EV_TX_END, EV_RX_REQ, Events; void (*rtustate)(events event) = rtuidle; void rtustatemachine(events event) { rtustate(event); void rtuidle(events event) { if (event == EV_TX_REQ) rtustate = rtutxproc; if (event == EV_RX_REQ) rtustate = rturxproc; March 20, 2014 Slide 25

Hierarchiczna maszyna stanowa Communication state diagram /EV_ERR_HANDLED [RX_ERROR] INIT [TX_ERROR] /EV_TX_REQ [RX_ERROR] HEADER_TX [TX_ERROR] [TX_READY] /EV_RX_REQ HEADER_RX [RX_READY] /EV_TX_REQ CYCLIC_COM_TX [TX_READY] /EV_RX_REQ [TX_READY] /EV_RX_REQ CYCLIC_COM_RX Serial port state diagram RX_ERROR EV_TX_REQ, EV_RX_REQ, EV_ERR_HANDLED IDLE RX_PROC RX_READY TX_READY, RX_READY, TX_ERROR, RX_ERROR TX_READY TX_PROC TX_ERROR March 20, 2014 Slide 26

Implementacja oprogramowania Integrated Development Environment (IDE), Repozytorium kodu, Doxygen & Graphviz, Trac, Modularność kodu, Nazewnictwo, Refaktoryzacjia (refactoring), March 20, 2014 Slide 27

Graphviz digraph round_robin { node[shape="box3d", width=2.3, height=0.6, fontname="arial"]; rankdir = "LR"; {rank = "same"; "module2"; "module1"; "module4";"module3" module1 -> module2 module2 -> module3 module3 -> module4 module4 -> module1 [headlabel="main" labeldistance=3] main module1 module2 module3 module4 March 20, 2014 Slide 28

Graphviz digraph rtos_task { node[shape="box3d",width=2.3,height=0.6,fontname="arial"]; rankdir = "LR" start [shape="point" height=0.1] start -> Ready Suspended -> Ready [label="resume"] Ready -> Suspended [label="suspend"] Blocked -> Suspended [label="suspend"] Blocked -> Ready [label="event"] Ready -> Running Running -> Ready Running -> Suspended [label="suspend"] Running -> Blocked [label="block"] Suspend Ready Running Event Block Suspend Blocked Suspend Suspended Resume March 20, 2014 Slide 29

Mscgen hscale = 2; Idle,Scheduler,Task1,Task2,Interrupt; Idle => Scheduler; --- [label="task1 ready"]; Scheduler => Task1;...; --- [label="interrupt"]; Task1 => Interrupt; ; Interrupt => Task1; Task1 => Scheduler; Scheduler => Task1;...; Task1=>Scheduler; --- [label="task2 ready"]; Scheduler => Task2 [label="preemption"];...; --- [label="task 2 blocked"]; Task2 => Scheduler; Scheduler => Task1;...; --- [label="task 1 blocked"]; Task1 => Scheduler; Scheduler => Idle; Idle Scheduler Task1 Task2 Interrupt Task1 ready Interrupt Task2 ready Task 2 blocked Task 1 blocked March 20, 2014 Slide 30

Statyczna analiza kodu Narzędzia: Eclipse, PC-Lint, Klockwork, Typowe wykrywane błędy: Indeksowanie tablic, Dzielenie przez 0, Możliwy wynik poza granicą zmiennej, Null pointer, Wykluczające się warunki, March 20, 2014 Slide 31

Testy jednostkowe (CppUTest) typedef enum {EV_TX_REQ, EV_TX_END, EV_RX_REQ, Events; typedef enum {RTU_IDLE, RTU_TX_PROC, RTU_RX_PROC, States; States currentstate; void rtustatemachine(events event) { switch(currentstate) { case RTU_IDLE: if (event == EV_TX_REQ) currentstate = RTU_TX_PROC; if (event == EV_RX_REQ) currentstate = RTU_RX_PROC; break; March 20, 2014 Slide 32 TEST_GROUP(RtuStateMachine) { ; void setup() { void teardown() { TEST(RtuStateMachine, IdleToTx) { currentstate = RTU_IDLE; rtustatemachine(ev_tx_req); CHECK_EQUAL(currentState, RTU_TX_PROC);

Testy funkcjonalne Raport Program testujący Specyfikacja testów Testowane urządzenie Sterownik PLC OPC serwer PLC Komunikacja wewnątrz systemu Interakcja użytkownika OPC klient March 20, 2014 Slide 33

Testy komunikacji Master RS-485 Slave... PC sniffer typedef struct { MB_RTU_MODULE_ADDRESSES ModuleAddress; MB_TELEGRAM_FUNCTION_CODE FunctionCode; MB_TELEGRAM_SUB_FUNCTION_CODE SubFunctionCode; UINT8 FreqHighLimit; UINT8 Reserved; MB_TELEGRAM_CRC CRC; MB_CONFIGURATION_WRITE_REQUEST; March 20, 2014 Slide 34

March 20, 2014 Slide 35