Temat: Modbus RTU Wago 750-841 RS232 serwisowy i panel Pro-face AST-3501T

Witam !
Na początku dodam że jestem początkujący ale bardzo zaangażowany w zdobywanie wiedzy smile (chyba się zaraziłęm).
Do rzeczy : Dużo czytałem o MODBUS i RS232 ale nie mogę zrozumieć jak przesyłane są adresy i ich wartości pomiędzy wago i panelem. Do panela wgrana jest już wizualizacja z adresami (mogę ją edytowąć w programie Gp-Pro Ex). Panel jako master. W Wago używam biblioteki terminalSlave_04.lib. Ustawiłem wszystkie potrzebne parametry do komunikacji w Terminal_modbusslave_RTU. Nie wiem jak to teraz ma działać jak zrobić żeby adresy i ich wartości były przekazywane do odpytującego panela , mam np adres "WejsciePierwsze AT %MX2000.0 : BOOL;" w panelu jest również ten adres na wizualizacji tylko zwiększony o offset 412289 tak jak i wszystkie tam. Domyślam się, że trzeba utworzyć jakąś tabele zmiennych związana ze zmienną aDATA którą ustawiłem jako ARRAY 0..255. Na jaką wartość ustawić iBIT_OFFSET. Bardzo proszę o naprowadzenie mnie jak to powiązać . Może jakiś przykład dla mojej przykładowej zmiennej. Z góry bardzo dziękuje. W chwili obecnej bo załadowaniu programu na wyjściu bERROR jest błąd 2 czyli nie prawidłowy adres z mastera.

2

Odp: Modbus RTU Wago 750-841 RS232 serwisowy i panel Pro-face AST-3501T

Witam
Jeśli chodzi o przesyłanie danych to zdefiniuj sobie tablicę np. "Tablica" typu typSLAVE_DATEN i pod jej kolejne adresy podpinaj co chcesz. W Twoim przypadku wyglądałoby to tak: Tablica[0]:=ZMIENNA_WORD; ZMIENNA_WORD.0:=WejsciePierwsze.  Czyli ustalasz, że wysyłasz słowo ZMIENNA_WORD na panel, w którym pod pierwszy bit przypisujesz twoją zmienną. Musisz pamiętać oczywiście o przypisaniu tej tablicy do aData (aData:=Tablica). Z tego co pamiętam to ustawienia komunikacji po stronie panela, jeśli jest on masterem, są nadrzędne dla sterownika, więc musisz w sterowniku ustawić tylko jego adres slave i numer portu. Nie pamiętam w tej chwili czy konieczne są jeszcze jakieś ustawienia na sterowniku.

3

Odp: Modbus RTU Wago 750-841 RS232 serwisowy i panel Pro-face AST-3501T

Bardzo Ci dziękuje za zainteresowanie moim pytaniem, jednak po mimo wielokrotnie czytanej Twojej podpowiedzi, nie udało mi się z komunikować z panelem. Temat mnie męczy strasznie sad , bo wydaje się bliski rozwiązania . Opisze do czego doszedłem : "Dla ułatwienia w programie do edytowania wizualizacji panelu ustawiłem tylko jedną zmienną (adres 414289,00) i wgrałem do panelu. Podglądając w Codesys-ie uruchomiony program mam tak: W "ReceiveBuffer" -> FunctionCode=3   ,  StartAddresss=14288 , index zmienia się i przyjmuje wartości 0 lub 4. Data(0)=1,Data(1)=3,Data(2)=55,Data(3)=208,Data(4)=0,Data(5)=1,Data(6)=139,Data(7)=135, Data(od8 do 255)=0
W "SendBuffer SendBuffer[0]=1,SendBuffer[1]=131,SendBuffer[2]=2,SendBuffe[3]=192,SendBuffer[4]=241,SendBuffer[od 5 do 512]=0.

Do wejścia aData przypisałem tablice typu typSLAVE_DATEN i na adresy aDATA[0], aDATA[1], itd... przypisywałem różne wartości i jak tylko uruchomię program na wyjściu "bERROR" po chwili mam wartość 2 czyli - "illegal address from master"  również  na panelu wyświetla się  info o nie prawidłowym adresie.

Czytałem np ten http://www.telmatik.pl/download/modbus.pdf  dokument, gdzie bardzo przystępnie opisany jest temat o protokole Modus RTU . Domyślam się że panel - master zadaje pytanie (funkcje) 03 (0x03)-czyli "Odczyt zawartości rejestrów pamiętających  (Read Holding Register )".

Co przypisać do aData aby odczytać zawartość tych rejestrów?? Czy iBIT_OFFSET mam ustawić na 0 ?

Za pomoc w rozwiązaniu tego nurtującego mnie po nocach problemu stawiam zgdzewke piwa - serio!.

4

Odp: Modbus RTU Wago 750-841 RS232 serwisowy i panel Pro-face AST-3501T

Spróbuj z takimi ustawieniami:   
bSLAVE_ADDRESS:= 1,
bCOM_PORT:= 2,
cbCOM_BAUDRATE:= 960,
cpCOM_PARITY:=0 ,
csCOM_STOPBITS:=1 ,
cbsCOM_BYTESIZE:=8 ,
cfCOM_FLOW_CONTROL:=4,
tTIME_OUT:= t#1s,
iBIT_OFFSET:= ,
tWATCHDOG_TIME:= t#5s ,
aDATA:=tab.

iBIT_OFFSET domyślnie ma wartość 0, tab to jakaś tablica typu typSLAVE_DATEN, w której pod kolejne adresy od 0 do 255 przypisujesz swoje zmienne.
Pamiętaj jednak, że jeśli ustawisz inne parametry po stronie panela (musisz poszukać tego gdzieś w edytorze wizualizacji najprawdopodobniej), to będą one i tak nadpisywać Ci te w programie sterownika. Najlepiej jest zdać się na wartości domyślne tych parametrów, które znajdziesz gdzieś w edytorze wizualizacji i ustawić dokładnie takie w sterowniku. Koniecznie musisz ustawić (najprawdopodobniej na stronie serwisowej panela) adres slave z jakim ma się on komunikować (prawdopodobnie dlatego dostajesz błąd w bError). Jak wejść na stronę serwisową opisane będzie na pewno w manualu od panela. Z reguły jest to jakaś kombinacja przycisków. Nie znam tego panela więc w wielu kwestiach są to tylko przypuszczenia.
Jeszcze jedno: dlaczego taki wysoki adres zmiennej ustawiłeś w panelu? Wg mnie adresujesz jak w tablicy RTU - od 0 do 255.

5

Odp: Modbus RTU Wago 750-841 RS232 serwisowy i panel Pro-face AST-3501T

Nie pisałem wcześniej o tym ale ustawienia portu , parzystości itd. oraz adresu slave mam ustawione dobrze gdyż odczytałem je właśnie z panelu/programu do edytowania. Więc są na pewno dobre. Gdy zmieniam numer poru com lub adres slave na inne to właśnie wtedy nie otrzymuje błędu na bError.
Adres zmiennej jest taki gdyż wizualizacje ktoś wcześniej już robił i to działało dokładnie w tej konfiguracji, jednak zostałem zmuszony z pewnych względów napisać na nowo program do wago.  Więc wizualizacja z taką zmienną musi działać tylko chodzi o to jak napisać obsługę slave w wago. sad

6 (edytowany przez Andrzej 2012-06-24 21:24:02)

Odp: Modbus RTU Wago 750-841 RS232 serwisowy i panel Pro-face AST-3501T

A dlaczego jest to pisanie "od tyłu" ???
Ja zawsze mastera mam w PLC nigdy odwrotnie, nie miałem do czynienia z ProFace ale robiłem aplikację na Wago + Modbus ( z obrzydzeniem, nie lubie bo wołowaty i niewydajny) z panelem i żadnych problemów nie było.

7

Odp: Modbus RTU Wago 750-841 RS232 serwisowy i panel Pro-face AST-3501T

Panel jest masterem i zadaje pytania do sleva (sterownika)o wartości zmiennych żeby wyświetlić je na panelu. Tak wydaje mi się prawidłowo ale jak wspomniałem wcześniej jestem początkujący. Szukam w programie do edytowania panelu, ale nie widzę opcji aby go ustawić jak sleva. Potrzebował bym przykładu, jak by wyglądał program gdyby sterownik był masterem. Spróbuje też tą zmienną zmienić na  niższą wartość i zobacze wtedy.

8 (edytowany przez rafal2_3 2012-09-16 19:29:12)

Odp: Modbus RTU Wago 750-841 RS232 serwisowy i panel Pro-face AST-3501T

Ruszyło to w koncu smile

A naprowadzilo mnie to:

dank napisał/a:

Jeszcze jedno: dlaczego taki wysoki adres zmiennej ustawiłeś w panelu? Wg mnie adresujesz jak w tablicy RTU - od 0 do 255.

Zmieniłem adresy na wizualizacji w panelu i działa smile. Jednak wczesniej z tamtymi adresami to rowniez działało , ale może zostać tak.

Poradziłem sobie również z przesłaniem zmiennych typu REAL, bo problem był taki że zmienna REAL jest za długa aby ja przesłać i trzeb ją rozbić na dwa WORD -y i te dwa WORD-y przesłać osobno.

Teraz mam za to problem z odczytem z panela tzn chce sterować  np wyjsciem DO1 z panela.
I chodzi o to że wartosć zmiennej musi być przesłana na panel i jednocześnie chce zmienić jej wartość z panelu. I zachodzi jednocześnie odczyt i zapis zmiennej przez co nie raz się uda ją zmienić a nie raz nie(cześciej nie)

np

zmienna cisnienie_powietrza ---->(wysyłam do) tablica[1]

i jednoczesnie

tablica[1]----->cisnienie_powietrza    zmienic wartosc cisnienia z panela



Zmienna musi być odczytywana(wysylana na panel) gdyż jej wartosć można tez zmienić z innego zrodła -komputer PC podlączony przez port ethernet
czyli jesli zmienna zostanie zmieniona przez PC, równiez ta nowa wartość musi być wyswietlona na panelu.

Sterownik jest jednocześnie podłączony do PC przez ethernet (modbus TCP) i przez RS-232 do panela.

Pytanie jest takie: Jak rozwiązać problem jednoczesnego odczytu i zapisu wartosci danej zmiennej na panelu?