Mám elektroměr Siemens PAC2200 ( https://support.industry.siemens.com/cs/attachments/109746835/MAN_L1V30415167B-04_en_en-US.pdf?download=true ), který umožňuje komunikaci přes Modbus TCP. Pokouším se to zprovoznit s jednotkou CP-1004, ale nedaří se mi vyčíst žádné hodnoty. Už jsem tak nějak v koncích...
Neměl by někdo ukázkový příklad, jak vyčítat (příkaz 0x03, nebo 0x04) z konkrétního zařízení (IP adresa + port) konkrétní data asi z 30 registrů - jedno číslo je většinou dva registry? Jde mi o data, viz návod v pdf od 99. strany.
Díky
Odpovědi 4
Neřešil jsem komunikaci přímo s požadovaným elektroměrem, ale v příloze jsou dva příklady. Jeden řeší vyčítání dat z elektroměru přes RS-485 a je v něm ukázáno, jak pracovat s parametry typu float - s reálným číslem uloženým ve dvou po sobě jdoucích modbus registrech. Druhý příklad ukazuje příkaz pro čtení a pro zápis dat do vzduchotechnické jednotky přes Modbus TCP a je v něm vidět nastavení komunikačního kanálu na ethernetu pro modbusovou komunikaci. Kdyby bylo potřeba, tak nastuduju přímo ten váš elektroměr a příklad bych upravil.
Díky za přiložené příkazy.
Vyzkouším, alespoň pro začátek vyčtení nějakého čísla z elektroměru. Pak uvidím dál...
Jinak, přidal jsem několik dalších chyb do https://support.tecomat.cz/dotaz/chyby-v-mosaicu
Konečně jsem si udělal čas pořádně řešit ten elektroměr. Nakonec jsem víceméně použil ukázkový příklad "6.3 Příklad 2 – jednoduchá komunikace Modbus TCP". UnitID je potřeba nastavit na 255. Převod z 2Word na FLOAT naštěstí řeší funkce v knihovně ModbusRTU v4.0.
Co se stane, když v IO konfigurátoru nastavím velikost přijímací/vysílací zóny na jinou hodnotu než 260?
Ten parametr UnitID by se měl v příkazu nastavit podle ID v tom elektroměru. V manuálu elektroměru to nemusí být popsané stejně, ale z významu toho parametru by mělo být jasné, že jde o tohle. Je to ekvivalent adresy na sériové lince, protože Modbus TCP je v podstatě Modbus RTU zašitý v TCP obálce. Hodnota 255 má v Modbusu vyjímečnou pozici, tady to pravděpodobně znamená, že mu je jedno. Nicméně, jestli to chodí, netřeba řešit.
V příkladu byl převod z dvou wordů na real nebo na udint řešen samostatnou funkcí, když příklad vzniknul, tak ty konverzní funkce ještě v knihovně nebyly. Teď je lze samozřejmě s výhodou využít.
Co se týká velikosti zóny, tuším, že odpovídá max. velikosti dat, kterou lze přenést v jedné modbusové zprávě plus nějaká režie na status komunikace. Když bude zóna větší, nic se neděje. Když bude menší, může to být problém, protože funkční bloky očekávají zónu takto velkou. Protože se tam přistupuje přes pointer, tak hrozí, že pokud bude vyčleněná zóna v paměti menší, tak bude komunikace psát do dat na vyšších adresách za zónou.
Vaše odpověď
Pro vložení odpovědi je nezbytné být přihlášený. Pokračujte na přihlášení.