Reakcyjna i predykcyjna regulacja PID

Algorytm PID to jedna z najpopularniejszych metod regulacji, szeroko stosowana w regulatorach przemysłowych, układach domowej automatyki, napędach i serwomechanizmach. Oferuje on dobre parametry sterowania i pozwala na dobre dopasowanie charakterystyki regulacji do specyficznej charakterystyki obiektu. Sterowanie za pomocą PID kiedyś było domeną złożonych sterowników przemysłowych, obecnie pojawia się także w wielu prostszych regulatorach czy kontrolerach. W artykule opisujemy zasadę działania i problemy związane z implementacją.

Posłuchaj
00:00

Sterowanie obiektem lub inną złożoną maszyną wymaga zdefiniowania planu lub modelu celu, który ma zostać zrealizowany. Zadaniem układu sterowania jest porównywanie zdefiniowanego modelu z rzeczywistością oraz przekazywanie poleceń do serwonapędów lub innych urządzeń wykonawczych, aby rzeczywistość podążała za planem. Oczekiwana temperatura obiektu lub pozycja siłownika jest określana mianem wartości zadanej, a obecna wartość tych sygnałów – mianem wartości mierzonej.

Zamknięty układ sterowania mierzy różnicę między wartością zadaną i mierzoną, po czym próbuje ją zmniejszyć zgodnie z określonym algorytmem. W rzeczywistości chodzi o to, aby układ sterowania zapewnił maksymalnie szybką odpowiedź na zmieniające się sygnały wejściowe bez powodowania oscylacji.

Klasyczna teoria sterowania skupia się na obserwacji odpowiedzi układu na skokową zmianę sygnału wejściowego. Jednak bardzo trudne jest zbudowanie układu regulacji, który szybko i bez przeregulowania zareaguje na tego typu wejście. Naczelna zasada przy sterowaniu programowym polega na tym, aby nie realizować takiego sterowania, w którym wartość zadana nie może być dokładnie śledzona.

Z analizy matematycznej wiadomo, że położenie jest całką prędkości (a więc w pewnym sensie jej uśrednieniem), a prędkość – całką z przyspieszenia, podczas gdy celem analizy jest określenie przyszłych zależności między tymi zmiennymi. Jednak w aplikacjach sterowania w czasie rzeczywistym taka predykcja nie jest z reguły wymagana. Zamiast tego czas jest dzielony na niewielkie przedziały, w których rejestruje się przyspieszenie wykorzystywane do uzyskania prędkości, na podstawie której oblicza się pozycję. I jeśli wyznaczone zmienne znajdują się w zakresie realizowanym przez oprzyrządowanie, możliwe jest zaprojektowanie układu sterowania dokładnie śledzącego wartość zadaną.

Częstym problemem w przypadku klasycznej teorii sterowania jest to, że wymagane parametry są nieznane lub ulegają zmianom podczas pracy. Na przykład bezwładność robota zależy od wielu składowych, takich jak obrotowa bezwładność wirnika i opon, bezwładność przekładni i wałów oraz wynikająca z masy i ładunku. Ponadto pomiędzy elementami robota mogą znajdować się łożyska i przekładnie, które charakteryzują się sprężystością czy tarciem.

Dokładne zamodelowanie dynamiki bardzo złożonych układów jest z reguły niepraktyczne ze względu na wiele zmiennych i niewiadomych. Dlatego inżynierowie szukają prostszych technik.

Algorytm PID

Sterowanie PID jest typowo reakcyjne, gdyż wytwarzany sygnał sterujący zależy tylko od wartości uchybu. Regulatory tego typu zostały po raz pierwszy zastosowane w przemyśle w zamkniętych układach regulacji temperatury i były projektowane z wykorzystaniem komponentów analogowych.

Programowe regulatory PID są dzięki swojej prostocie implementowane do aplikacji serwonapędowych, w systemach ogrzewania i podobnych. Na rysunku 1 przedstawiono uproszczony schemat blokowy regulatora PID.

Rys. 1. Klasyczny analogowy regulator PID

Ponieważ w układach regulacji silników niektóre składowe regulatora PID nie działają optymalnie, przedstawione w artykule wykresy dotyczą regulacji temperatury.

Regulator PID składa się z trzech oddzielnych bloków, których wyjścia są sumowane do postaci jednego sygnału sterującego. Bieżący odczyt sygnału regulowanego jest odejmowany od wartości zadanej (w tym przypadku ustawionej za pomocą potencjometru) celem wytworzenia sygnału uchybu, który jest następnie przetwarzany przez trzy procesory sygnałowe.

PID, czyli klasyka regulacji

Część proporcjonalna (P)

Pierwszym procesorem sygnałowym jest prosty wzmacniacz. Część proporcjonalna mogłaby być stosowana samodzielnie, ale tylko w najprostszych przypadkach, ponieważ w momencie gdy wartość mierzona osiąga wartość zadaną, sygnał uchybu będzie równy zero.

Należy pamiętać, że pomiar sygnału regulowanego jest opóźniony w stosunku do czasu wygenerowania sygnału sterującego przez regulator. Jeśli wzmocnienie części proporcjonalnej będzie zbyt duże, to podczas próby minimalizacji uchybu układ wejdzie w oscylacje. Zatem prosty wzmacniacz nie pozwala na dokładne śledzenie wartości zadanej i tym samym całkowitą likwidację uchybu w stanie ustalonym (rys. 2).

Rys. 2. Jakość regulacji P

Część całkująca (I)

Umieszczenie członu całkującego w układzie spowoduje powolny, lecz stały wzrost lub spadek sygnału wyjściowego w przypadku niezerowego uchybu. Gdy uchyb zostanie zlikwidowany, część całkująca przestanie ulegać zmianom. Należy jednak pamiętać, że osiągnięcie zerowego błędu statycznego wymaga czasu.

Ponieważ część całkująca wprowadza do pętli dodatkowe opóźnienie, w przypadku jej zbyt dużego wzmocnienia powstaną oscylacje o częstotliwości mniejszej od tych spowodowanych przez część proporcjonalną. Dlatego akcję proporcjonalną stosuje się do uzyskania szybkiej odpowiedzi, podczas gdy część całkująca zapewnia dużą dokładność w długim okresie.

Słabym punktem części całkującej jest zjawisko określane mianem wind-up. Duża zmiana wartości zadanej przyczynia się do gromadzenia w rejestrze całkującym zbyt dużej wartości sygnału, zbędnej w stanie ustalonym. Z tego powodu, gdy sygnał mierzony osiągnie wartość zadaną, w układzie zacznie pojawiać się przeregulowanie, ponieważ algorytm nie będzie w stanie szybko opróżnić rejestru, w którym zgromadzone zostały próbki wartości wynikające z poprzednich operacji całkowania.

W ogólnym przypadku część całkująca jest lepiej przystosowana do regulacji temperatury niż w aplikacjach napędowych, szczególnie w robotach mobilnych, gdzie wartości zadane serwonapędów ulegają ciągłym zmianom.

W aplikacjach napędowych zadawane prędkości zmieniają się tak gwałtownie, że część całkująca nie jest w stanie zlikwidować uchybu. Z tego powodu nie poleca się stosowania składowej całkującej w układach sterowania, w których sygnał sterujący będzie równy zero w chwili osiągnięcia wartości zadanej przez sygnał mierzony, co ma miejsce przy sterowaniu ruchem robota na płaskiej powierzchni.

W aplikacjach, gdzie użycie części całkującej jest celowe, a wartość zadana w długich okresach pozostaje stała, przydatne jest z reguły całkowanie na żądanie. W takiej sytuacji prosty układ logiczny obserwuje wartość zadaną i jeśli jest ona stała, czyli jej pochodna jest dostatecznie mała, część całkująca zostaje aktywowana. Jeśli wartość zadana będzie w trakcie zmiany, to rejestr części całkującej zostanie niezmieniony lub opróżniony.

Z reguły jednak wprowadzenie nagłych zmian podczas obliczeń algorytmu PID, takich jak np. opróżnienie rejestru całkowania, nie jest rozwiązaniem optymalnym, ponieważ skutkuje destabilizacją układu.

Na rysunku 3 przedstawiono przebiegi sygnałów z układu sterowania PID wykorzystującego tylko części P oraz I o odpowiednio dobranych nastawach. Skala prawa odnosi się do składowej proporcjonalnej do uchybu, całkującej uchyb oraz wartości sygnału sterującego, podczas gdy lewa dotyczy temperatury zadanej oraz temperatury mierzonej.

Rys. 3. serwonaRegulacja PID z wykorzystaniem jedynie części proporcjonalnej i całkującej

Należy zauważyć, że temperatura zadana jest funkcją wykładniczą, której wartość osiąga 250°. I mimo że temperatura mierzona w stanie przejściowym wyraźnie przekracza wartość zadaną, to prawie dokładnie osiąga ją w stanie ustalonym. Przekroczenie wartości zadanej powoduje, że wyjście części proporcjonalnej staje się ujemne, co spowalnia zbliżanie się do wartości końcowej. Część całkująca generuje duży sygnał podczas wznoszenia się wartości zadanej, a jej wpływ jest neutralizowany przez część proporcjonalną.

Jakość takiego układu będzie jednak optymalna tylko w przypadku, dla którego zostały dobrane nastawy regulatora. Gdyby wartość zadana zamiast do 250°, dążyła do 350°, powstałoby znaczące przeregulowanie spowodowane zbyt dużym sygnałem wygenerowanym przez część całkującą. Ponieważ napędy serwomechanizmów muszą operować w szerokim zakresie położeń i prędkości, w takich aplikacjach pożądane byłoby zastosowanie metod sterowania odpornego.

Część różniczkująca (D)

Ponieważ części P oraz I mają tendencję do powodowania oscylacji, naturalne jest poszukiwanie elementu, który to zjawisko zrównoważy. Tym zajmuje się składowa różniczkująca D, która generuje sygnał proporcjonalny do pochodnej uchybu lub innymi słowy – do szybkości zmiany uchybu.

Część ta jest odejmowana od pozostałych, aby wytłumić zmiany błędu. Zatem wartość wymaganego sygnału sterującego regulatora PID może być opisana równaniem:

gdzie E to uchyb chwilowy, a Kp, Ki, Kd – współczynniki wzmocnienia składowej proporcjonalnej, całkującej i różniczkującej.

Implementacja PID

Implementacja algorytmu PID następuje przez wielokrotne wykonywanie podprogramu obliczeniowego z częstotliwością zależną od czasu trwania odpowiedzi układu. Im większa częstotliwość, tym szybciej napęd może odpowiedzieć, co jednak wymaga większych zasobów obliczeniowych. W ogólnym przypadku szybkość działania algorytmu PID do sterowania ruchem serwomechanizmu lub robota mobilnego, poruszającego się wolniej niż 5 km/h, powinna wynosić między 10 a 100 Hz.

Wartość składowej proporcjonalnej jest wynikiem prostego, natychmiastowego odejmowania. Z kolei całkowanie polega na mnożeniu uchybu chwilowego przez wzmocnienie części całkującej oraz dodaniu wyniku do rejestru akumulatora. W przypadku ujemnego uchybu efekt całkowania będzie realizowany przez odejmowanie obliczonej wartości od rejestru akumulatora.

Pochodną oblicza się poprzez odjęcie od obecnego uchybu wartości uchybu z chwili poprzedniej. W niektórych przypadkach jednak wynik może być niedokładny, zatem bardziej pożądane jest uśrednianie obecnego wyniku z kilkoma poprzednimi.

Niestety, składowa różniczkująca również może przyczynić się do niestabilności, jeśli jej efektywne wzmocnienie będzie większe od jedności i wzmocnione zostaną szumy występujące w układzie. Znaczenie składowej różniczkującej w układach regulacji temperatury jest niewielkie, podobnie jak w aplikacjach serwonapędowych, w których zastosowanie czysto reakcyjnej regulacji typu PID jest dość ograniczone.

Predykcyjna regulacja PID

Regulacja reakcyjna bazuje całkowicie na wartości uchybu, w rzeczywistości jednak oczekiwane byłoby szybkie ustalenie wymaganego sygnału sterującego oraz wykorzystanie uchybu tylko do ewentualnej korekcji relatywnie mniejszej niedokładności predykcji.

Taki właśnie cel przyświeca regulacji predykcyjnej, która na podstawie obserwacji wartości zadanej próbuje przewidzieć sygnał sterujący wymagany do jej śledzenia. Ponadto, ponieważ regulator predykcyjny nie znajduje się w pętli sterującej, zapewnia zarówno większą szybkość, jak i lepszą stabilność niż regulacja reakcyjna.

Zależność sygnału sterującego od wartości zadanej

Można zauważyć dwie prawidłowości wiążące wartość zadaną z wymaganym sygnałem sterującym. Pierwsza jest taka, że dla każdej temperatury w stanie ustalonym wymaga się pewnej wartości sygnału sterującego (dostarczanej mocy), która przezwycięży utratę ciepła do otoczenia i utrzyma osiągniętą temperaturę. W przypadku aplikacji napędowych będzie to moc wymagana do przezwyciężenia oporów ruchu i utrzymania stałej prędkości.

W takiej sytuacji istotnych jest wiele czynników, takich jak np. temperatura otoczenia, jednak jeśli temperatury operacyjne wynoszą setki stopni, a temperatura otoczenia waha się np. w zakresie 20°, to można przyjąć, że stosunek wymaganego sygnału sterującego do wartości zadanej jest stały.

Druga prawidłowość dotyczy nachylenia wartości zadanej, czyli jej pochodnej. Dla serwonapędu położenia pochodna wartości zadanej określa zadaną prędkość, a druga pochodna – zadane przyspieszenie. Jeśli wartość zadana jest dodatnia, to należy dodać węgla do pieca lub przyspieszyć robota. Składowa różniczkująca jest zatem proporcjonalna do pochodnej wartości zadanej, a współczynnik proporcjonalności jest określany mianem wzmocnienia prędkościowego lub różniczkowego. Natomiast współczynnikiem proporcjonalności części podwójnie różniczkującej jest wzmocnienie przyspieszeniowe. Znajomość wartości tych wzmocnień pozwoliłaby serwonapędowi na dokładne śledzenie wartości zadanej z minimalnym możliwym opóźnieniem.

Wielką zaletą części różniczkującej wartość zadaną w stosunku do części różniczkującej uchyb jest to, że nie wzmacnia zaburzeń występujących w układzie.

Łączenie regulacji reakcyjnej i predykcyjnej

Niestety regulacja predykcyjna nie umożliwia dokonywania korekt uwzględniających zmiany temperatury otoczenia lub obciążenia serwomechanizmu. Jest również mało prawdopodobne, że odpowiednio dobrane wartości współczynników będą właściwe dla każdego przypadku. Nie należy zatem oczekiwać wyjątkowej jakości w układzie regulacji predykcyjnej. Z tego powodu optymalne może być połączenie klasycznej regulacji PID z regulacją predykcyjną, jak np. w układzie przedstawionym na rysunku 4.

Rys. 4. Hybrydowy układ regulacji reakcyjno-predykcyjnej

W tej konfiguracji chwilowa wartość zadana jest mnożona przez współczynnik wzmocnienia, czego wynikiem jest składowa proporcjonalna do wartości zadanej, która odpowiada za większość potrzebnego sygnału sterującego w stanie ustalonym.

Drugim nowym elementem regulatora jest różniczkowanie chwilowej wartości zadanej. Dodanie do siebie obu tych składowych pozwala na znacznie dokładniejsze ustalenie sygnału sterującego, czyli mocy wymaganej do przejścia z jednej wartości zadanej na drugą.

Ponadto zachowane zostały składowe sterowane przez uchyb – proporcjonalna i całkująca – celem zrównoważenia ewentualnych niedokładności predykcji. Wynikiem jest prosta architektura o wyjątkowych możliwościach dla szerokiego zakresu aplikacji. W tabeli przedstawiono składowe hybrydowego układu regulacji reakcyjno-predykcyjnej wraz z wyszczególnieniem aplikacji, w których mogą być przydatne.

Poprawa jakości regulacji PID

Ponieważ standardowy algorytm regulacji PID jest daleki od ideału, powstało wiele modyfikacji tego typu sterowania. W większości przypadków polegają one na zamianie omawianych współczynników wzmocnienia na wartości wyznaczone na podstawie tabel lub prostych funkcji. Jednym z najczęstszych problemów jest niesymetria odpowiedzi układu względem sygnału sterującego. Na przykład grzejnik może być w stanie szybko zwiększyć temperaturę, wykorzystując np. 30% mocy, jednak jeśli taka sama moc zostanie odjęta, temperatura może nie spaść w tak szybkim tempie, jak rosła. Powodem tej asymetrii jest fakt, że chłodzenie nie wynika z "odjęcia mocy", lecz jest spowodowane przez zjawisko wymiany ciepła.

Sygnał sterujący ciężkim mechanizmem jest również bardzo asymetryczny. Podczas gdy przyspieszenie serwomechanizmu z reguły wymaga dodania znacznej mocy, odjęcie jedynie jej niewielkiej ilości wystarczy do uzyskania opóźnienia o takiej samej wartości. Zastosowanie w takim przypadku symetrycznego regulatora PID nie pozwoli na osiągnięcie zadawalającego ruchu do przodu bez powodowania przewrócenia się robota w momencie zmiany znaku wektora przyspieszenia. Sytuacja byłaby jeszcze bardziej skomplikowana, gdyby robot przekroczył szczyt wzgórza i zaczął zjeżdżać po drugiej stronie. Dlatego w przypadku niesymetrycznych obciążeń z reguły użyteczne jest stosowanie dwóch współczynników wzmocnienia, jednego dla wejść dodatnich, a drugiego dla ujemnych.

Inną przydatną modyfikacją reakcyjnych składników regulatora PID jest ograniczenie uchybu tylko do zakresu, w którym ich reakcja będzie proporcjonalna. Jeśli uchyb znajdzie się wewnątrz tego zakresu, to będzie mnożony przez współczynnik wzmocnienia. W przeciwnym razie zastosowane zostanie odpowiednie ograniczenie uchybu. Jest to szczególnie przydatne do zapobieżenia zjawisku wind-up w składowej całkującej.

Dobór nastaw w układzie regulacji temperatury

Na rysunku 5 przedstawione są przykładowe przebiegi sygnałów w układzie regulacji temperatury. Należy zauważyć, że wartość zadana jest dobrze śledzona dzięki dokładnej prognozie wartości wymaganego sygnału sterującego. Gdy temperatura zadana rośnie liniowo, jej składowa różniczkująca jest stała, a w miarę dążenia do wartości oczekiwanej wpływ wartości zadanej na wartość sygnału sterującego maleje. Z kolei składowa proporcjonalna do wartości zadanej reprezentuje moc wymaganą do utrzymania obecnej temperatury.

Rys. 5. Sygnały w układzie regulacji reakcyjno-predykcyjnej

Składowa proporcjonalna do uchybu nie jest pokazana, jednak podobnie jak na rysunku 3 (patrz poprzedni artykuł) zmienia znak na przeciwny w chwili zrównania się temperatury mierzonej z jej wartością zadaną. Podwójny efekt składowej różniczkującej wartość zadaną oraz składowej proporcjonalnej do uchybu pomaga zapobiec przeregulowaniu.

Dobór nastaw regulatorów jest procesem iteracyjnym, który zwykle wymaga uruchomienia układu z jednym lub dwoma współczynnikami ustawionymi na zero. Po znalezieniu właściwych wartości wzmocnienia części proporcjonalnej i całkującej pozwala się, aby układ osiągnął stan ustalony w typowym punkcie pracy.

W stanie ustalonym składowa całkująca zastępuje składową proporcjonalną, a podzielenie jej przez wartość zadaną da szukany poziom współczynnika wzmocnienia wartości zadanej. Ponieważ składowa proporcjonalna do wartości zadanej równoważy moc dostarczaną wcześniej przez składową całkowania błędu, odpowiada to sytuacji, gdy rejestr całkujący jest opróżniony, a nowa składowa proporcjonalna generuje całość wymaganego sygnału sterującego.

Jeśli współczynnik wzmocnienia wartości zadanej był niezerowy, to w stanie ustalonym suma jej składowej proporcjonalnej i składowej całkowania błędu po podzieleniu przez wartość zadaną da poprawioną wartość szukanego współczynnika. Współczynnik wzmocnienia pochodnej wartości zadanej może być następnie wyznaczony poprzez wyzerowanie wszystkich innych współczynników oprócz współczynnika wzmocnienia wartości zadanej. Zmienia się wtedy wartość zadaną i ustawia taki współczynnik wzmocnienia pochodnej, aby nachylenie sygnału zadanego i mierzonego pokrywało się.

Dobór nastaw w układzie regulacji pozycji robota

W przypadku aplikacji serwonapędowych opisany proces określania współczynników może nie być odpowiedni. Regulatory silnika mogą być sterowane prędkością, jednak w robotach zadawana jest z reguły wartość pozycji, od ukształtowania której zależy zadana prędkość. W większości przypadków dokładność śledzenia prędkości nie jest tak istotna jak gładkość przebiegu prędkości zadanej.

Regulator do sterowania pozycją składa się głównie z następujących składowych proporcjonalnych: do zadanej prędkości, do zadanego przyspieszenia, do uchybu oraz mniej ważnej składowej różniczkującej uchyb.

Ponieważ utrzymanie robota w miejscu na płaskiej powierzchni nie wymaga żadnej mocy, w takim przypadku nie ma potrzeby stosowania składowej proporcjonalnej do wartości zadanej. Na równi pochyłej składowa proporcjonalna do uchybu powinna zapobiec ruchowi po zatrzymaniu robota, a to wymaga stałego dostarczania mocy po osiągnięciu wartości zadanej.

Dokładne śledzenie wartości zadanej

Im gładszy przebieg wartości zadanej, tym jest bardziej prawdopodobne, że napęd będzie w stanie dokładnie ją śledzić. Z tego powodu nie zadaje się z reguły sygnałów w postaci funkcji, które nie są gładkie, gdyż wymagałoby to nieskończonego przyspieszenia w punktach nieróżniczkowalnych.

W bardziej skomplikowanych przypadkach nawigacyjnych znaczenie ma więcej kwestii niż tylko sterowanie w jednej osi. Konieczne jest wtedy m.in. rozwiązanie odwrotnego zadania kinematyki, które polega na przekształceniu zadanego przebiegu położenia robota w przestrzeni kartezjańskiej do przebiegów wartości zadanych każdego z jego silników.

Podsumowanie

Regulacja PID wymaga znajomości fizyki i dynamiki sterowanych obiektów, a skuteczność ich realizacji zależy w połowie od wiedzy i instynktu. Jeśli zastosuje się podejście ściśle matematyczne, to określenie wartości wielu parametrów może być trudne, a otrzymany algorytm będzie bardzo wymagający obliczeniowo. Ponadto istotne jest użycie takiego oprogramowania, które umożliwi zmianę wartości praktycznie każdego składnika w trakcie pracy. Można wtedy obserwować odpowiedź układu na zmianę różnych parametrów. Należy również pamiętać, że nawet najbardziej skomplikowane układy składają się z wielu prostych bloków, więc jeśli te proste bloki zostaną dobrze poznane, to mogą posłużyć do tworzenia układów o bardzo złożonych zachowaniach.

Zobacz więcej w kategorii: Technika
PLC, HMI, Oprogramowanie
Jak projektować interfejsy człowiek-maszyna?
Zasilanie, aparatura nn
Więcej kawy, mniej mleka, czyli korekcja współczynnika mocy
PLC, HMI, Oprogramowanie
Nowe sterowniki PLC u-control M3000 i M4000 z otwartym systemem operacyjnym u-OS dla automatyki przemysłowej
Bezpieczeństwo
Co oznacza ponad 80 lat w świecie przenośnych detektorów gazu? Mnóstwo doświadczenia!
Przemysł 4.0
Inteligentne zbiorniki w przemyśle spożywczym – mniej strat, większa efektywność
Przemysł 4.0
Cyfrowy bliźniak: odzwierciedlenie rzeczywistości
Zobacz więcej z tagiem: PLC, HMI, Oprogramowanie
Technika
Jak projektować interfejsy człowiek-maszyna?
Technika
Nowe sterowniki PLC u-control M3000 i M4000 z otwartym systemem operacyjnym u-OS dla automatyki przemysłowej
Prezentacje firmowe
Sztuczna inteligencja w służbie bezpieczeństwa - nowe rozwiązania firmy Advantech

Poradnik doboru rozwiązań drukujących - drukarki mobilne, stacjonarne i przemysłowe

Jak dobrać drukarkę do zastosowań w logistyce, przemyśle czy handlu? Na co zwrócić uwagę, jeżeli chodzi o cechy i funkcje urządzenia? Jak zapewnić wysoką niezawodność pracy oraz trwałość systemu drukującego? A co z oprogramowaniem? W artykule odpowiadamy na powyższe pytania, przedstawiając przykłady nowoczesnych urządzeń drukujących, które z powodzeniem sprawdzają się w wymienionych zastosowaniach.
Zapytania ofertowe
Unikalny branżowy system komunikacji B2B Znajdź produkty i usługi, których potrzebujesz Katalog ponad 7000 firm i 60 tys. produktów