Witam,
Piszę program dla HMI Crouzet CTP 107, który po Ethernecie komunikuje się z PLC em4 firmy Crouzet.
Program po wpisaniu do pamięci HMI wybranych wartości zapisuje je do odpowiednich komórek pamięci HMI (RW) i następnie
po wciśnięciu przycisku funkcyjnego uruchamia macro, które ma przesłać dane na odpowiednie wejścia analogowe PLC (XWIN).
W tej chwili wygląda to tak, że po wpisaniu wartości i przesłaniu ich do PLC, program wystawia na XWIN odpowiednie wartości z HMI (przynajmniej na ułamki s), a następnie na kilku (dokładnie na XWIN 19,22) wyjściach nadpisuje je "0".
Wartości w pamięciach RW się nie zmieniają, sprawdziłem to.
W samym sterowniku PLC jest użyty Multi/Demulti plekser i część danych jest przekazywana do niego z użyciem funkcji XBIN_bit i akurat te wartości przypisywane są prawidłowo
Poniżej zawartość makra:
macro_command main()
//czasy
int a
a=0
DELAY(50)
GetData(a, "Local HMI", RW, 110, 1)
SetDataEx(a, "Crouzet em4 Ethernet Modbus TCP/IP", XWIN, 22, 1)
DELAY(250)
int b
b=0
DELAY(50)
GetData(b, "Local HMI", RW, 120, 1)
SetData(b, "Crouzet em4 Ethernet Modbus TCP/IP", XWIN, 23, 1)
DELAY(250)
int c
c=0
DELAY(50)
GetData(c, "Local HMI", RW, 130, 1)
SetData(c, "Crouzet em4 Ethernet Modbus TCP/IP", XWIN, 24, 1)
DELAY(250)
int d
d=0
DELAY(50)
GetData(d, "Local HMI", RW, 140, 1)
SetData(d, "Crouzet em4 Ethernet Modbus TCP/IP", XWIN, 17, 1)
DELAY(250)
int e
e=0
DELAY(50)
GetData(e, "Local HMI", RW, 150, 1)
SetData(e, "Crouzet em4 Ethernet Modbus TCP/IP", XWIN, 19, 1)
DELAY(250)
int f
f=0
DELAY(50)
GetData(f, "Local HMI", RW, 160, 1)
SetData(f, "Crouzet em4 Ethernet Modbus TCP/IP", XWIN, 18, 1)
DELAY(250)
int g
g=0
DELAY(50)
GetData(g, "Local HMI", RW, 170, 1)
SetData(g, "Crouzet em4 Ethernet Modbus TCP/IP", XWIN, 21, 1)
DELAY(250)
//wyrzutnik hydrauliczny - Multiplekser !!! konieczne kasowanie bitu przed wystawieniem
int h
GetData(h, "Local HMI", RW, 17, 1)
SetData(h, "Crouzet em4 Ethernet Modbus TCP/IP", XWIN, 1, 1)
int eh
eh=0
SetData(eh, "Crouzet em4 Ethernet Modbus TCP/IP", XBIN_bit, 1000, 1)
DELAY(250)
eh=1
DELAY(250)
SetData(eh, "Crouzet em4 Ethernet Modbus TCP/IP", XBIN_bit, 1000, 1)
DELAY(250)
int i
GetData(i, "Local HMI", RW, 18, 1)
SetData(i, "Crouzet em4 Ethernet Modbus TCP/IP", XWIN, 1, 1)
int ei
ei=0
SetData(ei, "Crouzet em4 Ethernet Modbus TCP/IP", XBIN_bit, 1002, 1)
DELAY(250)
ei=1
SetData(ei, "Crouzet em4 Ethernet Modbus TCP/IP", XBIN_bit, 1002, 1)
DELAY(250)
int j
GetData(j, "Local HMI", RW, 19, 1)
SetData(j, "Crouzet em4 Ethernet Modbus TCP/IP", XWIN, 1, 1)
int ej
ej=0
SetData(ej, "Crouzet em4 Ethernet Modbus TCP/IP", XBIN_bit, 1003, 1)
DELAY(250)
ej=1
SetData(ej, "Crouzet em4 Ethernet Modbus TCP/IP", XBIN_bit, 1003, 1)
DELAY(250)
int k
GetData(k, "Local HMI", RW, 20, 1)
SetData(k, "Crouzet em4 Ethernet Modbus TCP/IP", XWIN, 1, 1)
int ek
ek=0
SetData(ek, "Crouzet em4 Ethernet Modbus TCP/IP", XBIN_bit, 1004, 1)
DELAY(250)
ek=1
SetData(ek, "Crouzet em4 Ethernet Modbus TCP/IP", XBIN_bit, 1004, 1)
DELAY(250)
//FORMA1
int l
GetData(l, "Local HMI", RW, 31, 1)
SetData(l, "Crouzet em4 Ethernet Modbus TCP/IP", XWIN, 1, 1)
SetData(l, "Crouzet em4 Ethernet Modbus TCP/IP", XBIN_bit, 1005, 1)
DELAY(250)
int m
GetData(m, "Local HMI", RW, 32, 1)
SetData(m, "Crouzet em4 Ethernet Modbus TCP/IP", XWIN, 1, 1)
SetData(m, "Crouzet em4 Ethernet Modbus TCP/IP", XBIN_bit, 1006, 1)
DELAY(250)
int n
GetData(n, "Local HMI", RW, 33, 1)
SetData(n, "Crouzet em4 Ethernet Modbus TCP/IP", XWIN, 1, 1)
SetData(n, "Crouzet em4 Ethernet Modbus TCP/IP", XBIN_bit, 1007, 1)
DELAY(250)
int o
GetData(o, "Local HMI", RW, 34, 1)
SetData(o, "Crouzet em4 Ethernet Modbus TCP/IP", XWIN, 9, 1)
SetData(o, "Crouzet em4 Ethernet Modbus TCP/IP", XBIN_bit, 1008, 1)
DELAY(250)
int p
GetData(p, "Local HMI", RW, 35, 1)
SetData(p, "Crouzet em4 Ethernet Modbus TCP/IP", XWIN, 9, 1)
SetData(p, "Crouzet em4 Ethernet Modbus TCP/IP", XBIN_bit, 1009, 1)
DELAY(250)
int r
GetData(r, "Local HMI", RW, 36, 1)
SetData(r, "Crouzet em4 Ethernet Modbus TCP/IP", XWIN, 9, 1)
SetData(r, "Crouzet em4 Ethernet Modbus TCP/IP", XBIN_bit, 1010, 1)
DELAY(250)
//ZABEZPIECZENIE FORMY
int s
GetData(s, "Local HMI", RW, 39, 1)
SetData(s, "Crouzet em4 Ethernet Modbus TCP/IP", XWIN, 9, 1)
SetData(s, "Crouzet em4 Ethernet Modbus TCP/IP", XBIN_bit, 1011, 1)
DELAY(250)
int t
GetData(t, "Local HMI", RW, 40, 1)
SetData(t, "Crouzet em4 Ethernet Modbus TCP/IP", XWIN, 9, 1)
SetData(t, "Crouzet em4 Ethernet Modbus TCP/IP", XBIN_bit, 1012, 1)
DELAY(250)
int u
GetData(u, "Local HMI", RW, 41, 1)
SetData(u, "Crouzet em4 Ethernet Modbus TCP/IP", XWIN, 9, 1)
SetData(u, "Crouzet em4 Ethernet Modbus TCP/IP", XBIN_bit, 1013, 1)
DELAY(250)
//STÓŁ
int x
GetData(x, "Local HMI", RW, 44, 1)
SetData(x, "Crouzet em4 Ethernet Modbus TCP/IP", XWIN, 2, 1)
int y
GetData(y, "Local HMI", RW, 45, 1)
SetData(y, "Crouzet em4 Ethernet Modbus TCP/IP", XWIN, 3, 1)
int z
GetData(z, "Local HMI", RW, 46, 1)
SetData(z, "Crouzet em4 Ethernet Modbus TCP/IP", XWIN, 4, 1)
//AGREGAT
int aa
GetData(aa, "Local HMI", RW, 48, 1)
SetData(aa, "Crouzet em4 Ethernet Modbus TCP/IP", XWIN, 7, 1)
int ab
GetData(ab, "Local HMI", RW, 49, 1)
SetData(ab, "Crouzet em4 Ethernet Modbus TCP/IP", XWIN, 8, 1)
int ac
GetData(ac, "Local HMI", RW, 50, 1)
SetData(ac, "Crouzet em4 Ethernet Modbus TCP/IP", XWIN, 10, 1)
//WTRYSK/Ślimak
int ad
GetData(ad, "Local HMI", RW, 52, 1)
SetData(ad, "Crouzet em4 Ethernet Modbus TCP/IP", XWIN, 11, 1)
int ae
GetData(ae, "Local HMI", RW, 53, 1)
SetData(ae, "Crouzet em4 Ethernet Modbus TCP/IP", XWIN, 12, 1)
int af
GetData(af, "Local HMI", RW, 54, 1)
SetData(af, "Crouzet em4 Ethernet Modbus TCP/IP", XWIN, 13, 1)
//ŚLIMAK/DEKOMPRESJA
int ah
GetData(ah, "Local HMI", RW, 57, 1)
SetData(ah, "Crouzet em4 Ethernet Modbus TCP/IP", XWIN, 15, 1)
int ai
GetData(ai, "Local HMI", RW, 58, 1)
SetData(ai, "Crouzet em4 Ethernet Modbus TCP/IP", XWIN, 16, 1)
int aj
GetData(aj, "Local HMI", RW, 59, 1)
SetData(aj, "Crouzet em4 Ethernet Modbus TCP/IP", XWIN, 9, 1)
SetData(aj, "Crouzet em4 Ethernet Modbus TCP/IP", XBIN_bit, 1014, 1)
int ak
GetData(ak, "Local HMI", RW, 60, 1)
SetData(ak, "Crouzet em4 Ethernet Modbus TCP/IP", XWIN, 6, 1)
int al
GetData(al, "Local HMI", RW, 61, 1)
SetData(al, "Crouzet em4 Ethernet Modbus TCP/IP", XWIN, 14, 1)
//CENTRALNE SMAROWANIE
int am
GetData(am, "Local HMI", RW, 63, 1)
SetData(am, "Crouzet em4 Ethernet Modbus TCP/IP", XWIN, 20, 1)
//WYRZUTNIK POWIETRZE
int ao
GetData(ao, "Local HMI", RW, 66, 1)
SetData(ao, "Crouzet em4 Ethernet Modbus TCP/IP", XWIN, 5, 1)
//ponowne nadpisanie wartosci XWIN
SetDataEx(a, "Crouzet em4 Ethernet Modbus TCP/IP", XWIN, 22, 1)
end macro_command
Piszę program dla HMI Crouzet CTP 107, który po Ethernecie komunikuje się z PLC em4 firmy Crouzet.
Program po wpisaniu do pamięci HMI wybranych wartości zapisuje je do odpowiednich komórek pamięci HMI (RW) i następnie
po wciśnięciu przycisku funkcyjnego uruchamia macro, które ma przesłać dane na odpowiednie wejścia analogowe PLC (XWIN).
W tej chwili wygląda to tak, że po wpisaniu wartości i przesłaniu ich do PLC, program wystawia na XWIN odpowiednie wartości z HMI (przynajmniej na ułamki s), a następnie na kilku (dokładnie na XWIN 19,22) wyjściach nadpisuje je "0".
Wartości w pamięciach RW się nie zmieniają, sprawdziłem to.
W samym sterowniku PLC jest użyty Multi/Demulti plekser i część danych jest przekazywana do niego z użyciem funkcji XBIN_bit i akurat te wartości przypisywane są prawidłowo
Poniżej zawartość makra:
macro_command main()
//czasy
int a
a=0
DELAY(50)
GetData(a, "Local HMI", RW, 110, 1)
SetDataEx(a, "Crouzet em4 Ethernet Modbus TCP/IP", XWIN, 22, 1)
DELAY(250)
int b
b=0
DELAY(50)
GetData(b, "Local HMI", RW, 120, 1)
SetData(b, "Crouzet em4 Ethernet Modbus TCP/IP", XWIN, 23, 1)
DELAY(250)
int c
c=0
DELAY(50)
GetData(c, "Local HMI", RW, 130, 1)
SetData(c, "Crouzet em4 Ethernet Modbus TCP/IP", XWIN, 24, 1)
DELAY(250)
int d
d=0
DELAY(50)
GetData(d, "Local HMI", RW, 140, 1)
SetData(d, "Crouzet em4 Ethernet Modbus TCP/IP", XWIN, 17, 1)
DELAY(250)
int e
e=0
DELAY(50)
GetData(e, "Local HMI", RW, 150, 1)
SetData(e, "Crouzet em4 Ethernet Modbus TCP/IP", XWIN, 19, 1)
DELAY(250)
int f
f=0
DELAY(50)
GetData(f, "Local HMI", RW, 160, 1)
SetData(f, "Crouzet em4 Ethernet Modbus TCP/IP", XWIN, 18, 1)
DELAY(250)
int g
g=0
DELAY(50)
GetData(g, "Local HMI", RW, 170, 1)
SetData(g, "Crouzet em4 Ethernet Modbus TCP/IP", XWIN, 21, 1)
DELAY(250)
//wyrzutnik hydrauliczny - Multiplekser !!! konieczne kasowanie bitu przed wystawieniem
int h
GetData(h, "Local HMI", RW, 17, 1)
SetData(h, "Crouzet em4 Ethernet Modbus TCP/IP", XWIN, 1, 1)
int eh
eh=0
SetData(eh, "Crouzet em4 Ethernet Modbus TCP/IP", XBIN_bit, 1000, 1)
DELAY(250)
eh=1
DELAY(250)
SetData(eh, "Crouzet em4 Ethernet Modbus TCP/IP", XBIN_bit, 1000, 1)
DELAY(250)
int i
GetData(i, "Local HMI", RW, 18, 1)
SetData(i, "Crouzet em4 Ethernet Modbus TCP/IP", XWIN, 1, 1)
int ei
ei=0
SetData(ei, "Crouzet em4 Ethernet Modbus TCP/IP", XBIN_bit, 1002, 1)
DELAY(250)
ei=1
SetData(ei, "Crouzet em4 Ethernet Modbus TCP/IP", XBIN_bit, 1002, 1)
DELAY(250)
int j
GetData(j, "Local HMI", RW, 19, 1)
SetData(j, "Crouzet em4 Ethernet Modbus TCP/IP", XWIN, 1, 1)
int ej
ej=0
SetData(ej, "Crouzet em4 Ethernet Modbus TCP/IP", XBIN_bit, 1003, 1)
DELAY(250)
ej=1
SetData(ej, "Crouzet em4 Ethernet Modbus TCP/IP", XBIN_bit, 1003, 1)
DELAY(250)
int k
GetData(k, "Local HMI", RW, 20, 1)
SetData(k, "Crouzet em4 Ethernet Modbus TCP/IP", XWIN, 1, 1)
int ek
ek=0
SetData(ek, "Crouzet em4 Ethernet Modbus TCP/IP", XBIN_bit, 1004, 1)
DELAY(250)
ek=1
SetData(ek, "Crouzet em4 Ethernet Modbus TCP/IP", XBIN_bit, 1004, 1)
DELAY(250)
//FORMA1
int l
GetData(l, "Local HMI", RW, 31, 1)
SetData(l, "Crouzet em4 Ethernet Modbus TCP/IP", XWIN, 1, 1)
SetData(l, "Crouzet em4 Ethernet Modbus TCP/IP", XBIN_bit, 1005, 1)
DELAY(250)
int m
GetData(m, "Local HMI", RW, 32, 1)
SetData(m, "Crouzet em4 Ethernet Modbus TCP/IP", XWIN, 1, 1)
SetData(m, "Crouzet em4 Ethernet Modbus TCP/IP", XBIN_bit, 1006, 1)
DELAY(250)
int n
GetData(n, "Local HMI", RW, 33, 1)
SetData(n, "Crouzet em4 Ethernet Modbus TCP/IP", XWIN, 1, 1)
SetData(n, "Crouzet em4 Ethernet Modbus TCP/IP", XBIN_bit, 1007, 1)
DELAY(250)
int o
GetData(o, "Local HMI", RW, 34, 1)
SetData(o, "Crouzet em4 Ethernet Modbus TCP/IP", XWIN, 9, 1)
SetData(o, "Crouzet em4 Ethernet Modbus TCP/IP", XBIN_bit, 1008, 1)
DELAY(250)
int p
GetData(p, "Local HMI", RW, 35, 1)
SetData(p, "Crouzet em4 Ethernet Modbus TCP/IP", XWIN, 9, 1)
SetData(p, "Crouzet em4 Ethernet Modbus TCP/IP", XBIN_bit, 1009, 1)
DELAY(250)
int r
GetData(r, "Local HMI", RW, 36, 1)
SetData(r, "Crouzet em4 Ethernet Modbus TCP/IP", XWIN, 9, 1)
SetData(r, "Crouzet em4 Ethernet Modbus TCP/IP", XBIN_bit, 1010, 1)
DELAY(250)
//ZABEZPIECZENIE FORMY
int s
GetData(s, "Local HMI", RW, 39, 1)
SetData(s, "Crouzet em4 Ethernet Modbus TCP/IP", XWIN, 9, 1)
SetData(s, "Crouzet em4 Ethernet Modbus TCP/IP", XBIN_bit, 1011, 1)
DELAY(250)
int t
GetData(t, "Local HMI", RW, 40, 1)
SetData(t, "Crouzet em4 Ethernet Modbus TCP/IP", XWIN, 9, 1)
SetData(t, "Crouzet em4 Ethernet Modbus TCP/IP", XBIN_bit, 1012, 1)
DELAY(250)
int u
GetData(u, "Local HMI", RW, 41, 1)
SetData(u, "Crouzet em4 Ethernet Modbus TCP/IP", XWIN, 9, 1)
SetData(u, "Crouzet em4 Ethernet Modbus TCP/IP", XBIN_bit, 1013, 1)
DELAY(250)
//STÓŁ
int x
GetData(x, "Local HMI", RW, 44, 1)
SetData(x, "Crouzet em4 Ethernet Modbus TCP/IP", XWIN, 2, 1)
int y
GetData(y, "Local HMI", RW, 45, 1)
SetData(y, "Crouzet em4 Ethernet Modbus TCP/IP", XWIN, 3, 1)
int z
GetData(z, "Local HMI", RW, 46, 1)
SetData(z, "Crouzet em4 Ethernet Modbus TCP/IP", XWIN, 4, 1)
//AGREGAT
int aa
GetData(aa, "Local HMI", RW, 48, 1)
SetData(aa, "Crouzet em4 Ethernet Modbus TCP/IP", XWIN, 7, 1)
int ab
GetData(ab, "Local HMI", RW, 49, 1)
SetData(ab, "Crouzet em4 Ethernet Modbus TCP/IP", XWIN, 8, 1)
int ac
GetData(ac, "Local HMI", RW, 50, 1)
SetData(ac, "Crouzet em4 Ethernet Modbus TCP/IP", XWIN, 10, 1)
//WTRYSK/Ślimak
int ad
GetData(ad, "Local HMI", RW, 52, 1)
SetData(ad, "Crouzet em4 Ethernet Modbus TCP/IP", XWIN, 11, 1)
int ae
GetData(ae, "Local HMI", RW, 53, 1)
SetData(ae, "Crouzet em4 Ethernet Modbus TCP/IP", XWIN, 12, 1)
int af
GetData(af, "Local HMI", RW, 54, 1)
SetData(af, "Crouzet em4 Ethernet Modbus TCP/IP", XWIN, 13, 1)
//ŚLIMAK/DEKOMPRESJA
int ah
GetData(ah, "Local HMI", RW, 57, 1)
SetData(ah, "Crouzet em4 Ethernet Modbus TCP/IP", XWIN, 15, 1)
int ai
GetData(ai, "Local HMI", RW, 58, 1)
SetData(ai, "Crouzet em4 Ethernet Modbus TCP/IP", XWIN, 16, 1)
int aj
GetData(aj, "Local HMI", RW, 59, 1)
SetData(aj, "Crouzet em4 Ethernet Modbus TCP/IP", XWIN, 9, 1)
SetData(aj, "Crouzet em4 Ethernet Modbus TCP/IP", XBIN_bit, 1014, 1)
int ak
GetData(ak, "Local HMI", RW, 60, 1)
SetData(ak, "Crouzet em4 Ethernet Modbus TCP/IP", XWIN, 6, 1)
int al
GetData(al, "Local HMI", RW, 61, 1)
SetData(al, "Crouzet em4 Ethernet Modbus TCP/IP", XWIN, 14, 1)
//CENTRALNE SMAROWANIE
int am
GetData(am, "Local HMI", RW, 63, 1)
SetData(am, "Crouzet em4 Ethernet Modbus TCP/IP", XWIN, 20, 1)
//WYRZUTNIK POWIETRZE
int ao
GetData(ao, "Local HMI", RW, 66, 1)
SetData(ao, "Crouzet em4 Ethernet Modbus TCP/IP", XWIN, 5, 1)
//ponowne nadpisanie wartosci XWIN
SetDataEx(a, "Crouzet em4 Ethernet Modbus TCP/IP", XWIN, 22, 1)
end macro_command