Forum Smart'ny Dom

Modbus TCP PLC S7-1...
 

Modbus TCP PLC S7-1200  

  RSS
kam01
(@kam01)
Młodzik

Witam!

Pytanie dotyczy polaczenia sterownika PLC S7-1200 po modbasie TCP.

Mianowicie polaczylem iobroker z sterownikiem i wszystko dzialalo prawie normalnie, prawie bo nie moglem uzyc input czy coil do sterowania z przycisku z vis jak  i hab panela tylko Holding register dzialal poprawnie.

Wczoraj modbus przestal dzialac brak comunikacji nic nie zmienialem.!

Moze cos zle mam skonfigurowane od strony sterownika plc nie wiem nic nie przychodzi mi do glowy.

Czy jest ktos Kto robil cos na s7-1200 z iobrokerem?

 

 

Cytuj
Dodane : 22/08/2019 2:34 pm
mguc
 mguc
(@mguc)
Młodzik

Np. ja mam S7-1200.. i działa.

W manualu wyraźnie napisane jest, że systemowe funkcje obsługują tylko odczyt/zapis rejestrów. Bitowych zapytań nie ma :(. Trzeba z tym żyć.

Ja wszystkie bity "pakuję" do bazy z rejestrami i tak są przesyłane/czytane prze iobroker.

W iobrokerze rejestry "rozbijam" na poszczególne bity i przypisuje do poszczególnych zmiennych programu - trzeba napisać skrypt który to robi..

OdpowiedzCytuj
Dodane : 26/08/2019 12:05 am
kam01
(@kam01)
Młodzik

@mguc

Dzieki to duzo wyjania, wspomne ze problem z modbusem roamiazany wina lezala po stronie sterownika i konfiguracji DB.

Teraz wszystko dziala poprawnie.

Co do skryptu i rozbijania zmiennej na bity czy moglby kolega sie podzielic wiedza na ten temat  bo nie bardzo rozumiem gdzie i jaki ten skrypt kolega napisal, dodam ze chodzi glownie o ustawianie poszczegolnych bitow w zmiennej ktore chce wykozystac w habPanel i Vis do wizualizacji i kontrolowania oswietleniem.

OdpowiedzCytuj
Dodane : 26/08/2019 9:44 am
mguc
 mguc
(@mguc)
Młodzik

Tworzysz obiekty bitowe w drzewie. I ich używasz w aplikacji.

Skrypty dodajesz w zakładce.. skrypty.

Pobranie bitu z odczytanego rejestru:

function odczytajBit(slowo, nr_bitu) { //nr_bitu liczymy od 0
var mask = 1 << nr_bitu;

return ((slowo & mask) !==0) ? true : false;
}

 

Odczytujemy rejestr i przepisujemy bity:

{init('modbus.0.holdingRegisters.10.40010');
function init(id){
read_w(getState(id).val);
on(id, function(obj) {
var slowo = getState(obj.id).val;
read_w(slowo);
}
);
}
function read_w(slowo){
if (!(slowo & 0xC000)) /* dwa najstarsze bity to znacznik cmd_id -> zmiana sterowania */
{
setState("PLC.DOM.LED.L01_1.status"/*status*/, odczytajBit(slowo, 0));
setState("PLC.DOM.LED.L01_2.status"/*status*/, odczytajBit(slowo, 1));
setState("PLC.DOM.LED.L01_3.status"/*status*/, odczytajBit(slowo, 2));
setState("PLC.DOM.LED.L01_4.status"/*status*/, odczytajBit(slowo, 3));
setState("PLC.DOM.LED.L01_5.status"/*status*/, odczytajBit(slowo, 4));
setState("PLC.DOM.LED.L01_6.status"/*status*/, odczytajBit(slowo, 5));
setState("PLC.DOM.LED.L01_7.status"/*status*/, odczytajBit(slowo, 6));
setState("PLC.DOM.LED.L01_8.status"/*status*/, odczytajBit(slowo, 7));
}
}
} /* L01 */

A zapisywanie - tutaj jest więcej pisaniny - trzeba przygotowac odpowiednie zdarzenia (tutaj tylko mały fragment):

//wywołanie obsługi
//1 parametr to nazwa obiektu
//2 parametr to: false - obiekt nie jest załączany impulsem
// true - obiekt jest załączany impulsem
device_led(id, id_enable, false);

//zmiany stanu LED realizowane na poziomie PLC
on({id: status, change: "ne"}, function (obj) {
var value = obj.state.val;
 
setState(out, value, true);
setState(cmd, value, true);
});

 

OdpowiedzCytuj
Dodane : 26/08/2019 10:22 pm
Udostępnij:



Udostępnij
  • 1
    Share

Proszę Zaloguj Się lub Zarejestruj