'Inteligenty' dom ze sterownikiem PLC

 Language:
Szukanie zaawansowane  

Aktualności:

Powrót do strony głównej: www.edom-plc.pl

Autor Wątek: Modbus - kilka pytań?  (Przeczytany 2179 razy)

epawel

  • Newbie
  • *
  • Wiadomości: 10
    • Zobacz profil
Modbus - kilka pytań?
« dnia: Listopad 01, 2016, 08:05:36 pm »

Witam.
Od paru dni bawię się komunikacją Modbus między sterownikiem 750-880, a czujnikiem temperatury. Problem mam czysto programowy. Na podstawie przykładu ze strony stworzyłem testowy progam.PROGRAM modbusRTU
VAR
(* deklaracja zmiennych zgodnie z pdf wago*)
start: BOOL;
MODBUS_EXTENDED_MASTER1: MODBUS_EXTENDED_MASTER;
error: enumMB_ERROR;
zapytanie: typModbusExtendedQuery;
odpowiedz: typModbusResponse;

queryFinished: F_TRIG;
queryPending : SEMA;

krok: BYTE;

temp AT %MB10 : WORD;
hum AT %MB11 : WORD;
mode_s : WORD;
temp_set AT %MB12 : WORD;
time_h AT %MB13: WORD;
time_m AT %MB14: WORD;
time_ AT %MB15: WORD;

END_VAR

MODBUS_EXTENDED_MASTER1(
ENABLE:=TRUE ,
ASCII_Mode:= ,
bCOM_PORT:= 2,
cbCOM_BAUDRATE:= 960,
cpCOM_PARITY:= 0,
csCOM_STOPBITS:= 1,
cbsCOM_BYTESIZE:= 8,
cfCOM_FLOW_CONTROL:= 4,
tTIME_OUT:=t#500ms ,
(*wymagane parametry uruchomieniowe*)

Response:=odpowiedz,
StartFunction:=start ,
ExtQuery:=zapytanie ,

MB_Error=>error ,
bInterfaceError=> );

queryFinished(CLK := start);
queryPending(CLAIM := start, RELEASE := queryFinished.Q);

IF queryFinished.Q THEN
CASE krok OF

0:
temp:=odpowiedz.Data[0];
hum:=odpowiedz.Data[1];
mode_s:=odpowiedz.data[2];
time_h:=odpowiedz.data[5];
time_m:=odpowiedz.data[6];
krok:=krok+1;

1:
temp_set:= odpowiedz.Data[0];
krok:=0;

END_CASE;
END_IF;

IF NOT queryPending.BUSY THEN
zapytanie.SlaveAddress:=50;
CASE krok OF

0:
(*przygotowanie zapytania*)
zapytanie.FunctionCode:=4; (* 4 - read input register*)
zapytanie.Read_Quantity:=8; (* ile rejestrow czytamy*)
zapytanie.Read_StartAddress:=4; (* adres rejestru *)

1:
zapytanie.FunctionCode:=4; (* 4 - read input register*)
zapytanie.Read_Quantity:=8; (* ile rejestrow czytamy*)
zapytanie.Read_StartAddress:=51; (* adres rejestru *)

END_CASE;
start := TRUE;
END_IF;
Wysyłam dwa zapytania (0,1) do regulatora, za każdym razem czytając po 8 rejestrów. Następnie odczytane dane przypisuje do określonych zmiennych. Problem polega na tym, że wykonuję zapytanie 0, przypisuje dane do określonych zmiennych(temp, hum, mode itp), potem wysyłam zapytanie 1, i w tym czasie nadpisują mi się dane w tablicy i zmieniają wartości odczytane w kroku 0. I nie bardzo wiem jak sobie z tym poradzić. Wszelkie podpowiedzi mile widziane. Pozdrawiam.

Zapisane

zim

  • Jr. Member
  • **
  • Wiadomości: 54
    • Zobacz profil
Odp: Modbus - kilka pytań?
« Odpowiedź #1 dnia: Listopad 02, 2016, 06:38:27 pm »

Witaj,

Zerknij sobię w zakładkę Resources->PLC Configuration->Modbus-Master[FIX] masz tam piękny kreator do używania z Modbusem.

Praktycznie zero pisania kodu podstawiasz zmienne pod adresy z z głowy.

Zrobiłem za jego pomocą komunikacje z rekuperatorem thessla green airpack.

W razie pytań chętnie pomogę.

Pzd
Zapisane

admin

  • Administrator
  • Sr. Member
  • *****
  • Wiadomości: 297
    • Zobacz profil
Odp: Modbus - kilka pytań?
« Odpowiedź #2 dnia: Listopad 03, 2016, 11:13:44 am »

epawel - czy zapytania działają, jak wykonujesz je osobno, usuwając jeden z kroków?  Trochę dziwi różnica w wielkości liter:

hum:=odpowiedz.Data[1];
mode_s:=odpowiedz.data[2];

zim - przejrzałem wczoraj menu Resources ->PLC Configuration... i nie znajduję Modbus-Master[FIX] i kreatora.  Jaki masz sterownik i wersję CoDeSys'a?

Pozdrawiam,
Zapisane

epawel

  • Newbie
  • *
  • Wiadomości: 10
    • Zobacz profil
Odp: Modbus - kilka pytań?
« Odpowiedź #3 dnia: Listopad 04, 2016, 08:20:43 pm »

Dziękuje za zainteresowanie tematem, dzięki temu ponownie przeanalizowałem kod. Zmieniłem deklarację zmiennych, mianowicie adresy pod którymi się mają one znajdować, " zwiększyłem' odstępy pomiędzy poszczególnymi adresami. Problem ustał. Odczyt działa poprawnie, lecz nie do końca to rozumiem.
temp AT %MB10 : WORD;
hum AT %MW0 : WORD;
mode_s : WORD;
temp_set AT %MB12 : WORD;
time_h AT %MB20: WORD;
time_m AT %MB14: WORD;
time_ AT %MB15: WORD;

admin - nie miałem jeszcze okazji pogratulować świetnej roboty i pracy włożonej w projekt - gratulacje!
zim - dziękuje za odpowiedź, takiej zakładki u mnie niestety nie ma.
Pozdrawiam.
Paweł.
 
Zapisane

admin

  • Administrator
  • Sr. Member
  • *****
  • Wiadomości: 297
    • Zobacz profil
Odp: Modbus - kilka pytań?
« Odpowiedź #4 dnia: Listopad 05, 2016, 11:51:48 am »

Cześć,

nie zwróciłem uwagi na deklarację zmiennych, a tu rzeczywiście, definiujesz zmienne typu WORD, które zajmują 2 bajty.  Więcej w tym temacie jest na:

http://www.edom-plc.pl/index.php/pl/wiecej-o-plc/funkcje/183-adresowanie-zmiennych-w-pamieci

W skrócie - zmienna typu WORD zapisana pod %MW0 zajmuje tę samą przestrzeń pamięci, co 2 zmienne typu BYTE zapisane pod %MB0 i %MB1;

Pozdrawiam!
Zapisane

zim

  • Jr. Member
  • **
  • Wiadomości: 54
    • Zobacz profil
Odp: Modbus - kilka pytań?
« Odpowiedź #5 dnia: Listopad 06, 2016, 09:12:19 am »

Witajcie,

Wersja to 2.3.9.44

Pozdrawiam,
Zapisane

Greg_OR

  • Newbie
  • *
  • Wiadomości: 6
    • Zobacz profil
Odp: Modbus - kilka pytań?
« Odpowiedź #6 dnia: Listopad 21, 2019, 10:36:02 pm »

Witaj,
Zerknij sobię w zakładkę Resources->PLC Configuration->Modbus-Master[FIX] masz tam piękny kreator do używania z Modbusem.
Praktycznie zero pisania kodu podstawiasz zmienne pod adresy z z głowy.
Zrobiłem za jego pomocą komunikacje z rekuperatorem thessla green airpack.
W razie pytań chętnie pomogę.
Pzd
Odgrzewam ze względu na komunikację z AirPackiem, a taki właśnie się 'wprowadził' do mojego domu i chciałbym go jakoś spiąć, bo licząc na to wybrałem tylko podstawowy sterownik do ustawiania rekuperatora.
Więc jeśli możesz zim to opisz komunikację, a przede wszystkim rejestry rekuperatora.
Zapisane

sylwek_burza

  • Newbie
  • *
  • Wiadomości: 17
    • Zobacz profil
Odp: Modbus - kilka pytań?
« Odpowiedź #7 dnia: Listopad 22, 2019, 09:18:31 pm »

Witaj,
Zerknij sobię w zakładkę Resources->PLC Configuration->Modbus-Master[FIX] masz tam piękny kreator do używania z Modbusem.
Praktycznie zero pisania kodu podstawiasz zmienne pod adresy z z głowy.
Zrobiłem za jego pomocą komunikacje z rekuperatorem thessla green airpack.
W razie pytań chętnie pomogę.
Pzd
Odgrzewam ze względu na komunikację z AirPackiem, a taki właśnie się 'wprowadził' do mojego domu i chciałbym go jakoś spiąć, bo licząc na to wybrałem tylko podstawowy sterownik do ustawiania rekuperatora.
Więc jeśli możesz zim to opisz komunikację, a przede wszystkim rejestry rekuperatora.
Jakiego AirPack'a kupiłeś? Home czy 4? Masz moduł CF/CF2? Prześlij na priv adres email to wyślę dokumentację. Możliwości sterowania/pytania są niesamowite. Wystarczy powiedzieć, że komunikacja pomiędzy panelem Air++ a centralą odbywa się po modbusie.
Zapisane

Greg_OR

  • Newbie
  • *
  • Wiadomości: 6
    • Zobacz profil
Odp: Modbus - kilka pytań?
« Odpowiedź #8 dnia: Listopad 24, 2019, 09:04:25 pm »

dzięki wielkie, PM poszło, mam serie 4 (nie wiem czy to jeszcze "home" czy nie) taka biała "krówka" model 500h króćce po obu stronach ma w jednej linii pionowej - wcześniejsze modele miały rozsunięte na boki, mam też moduł CF - dla serii 4 to jest chyba CF2.
Właśnie w nadziei na integracje z całym domem zamówiłem tylko podstawowy interfejs AirL do uruchomienia.
Zapisane