Supportdokument Modbus Lathund för att använda Modbus över RS-XXX eller TCP/IP. Synpunkter, felaktigheter, önskemål etc. för dokumentet meddelas Fil: Malthe_LHA T_Modbus.docx
Innehållsförteckning 1. Allmänt... 2 1.1. Programexempel... 2 2. Device Configurator... 3 3. Engibys Modbus... 4 3.1. Modbusmaster i seriellt nät... 4 3.2. Modbusmaster i TCP/IP-nät... 6 3.3. Läsa från slav... 7 3.4. Skriva till slav... 8 3.5. Modbusslav i seriellt nät... 9 3.6. Modbusslav i TCP/IP-nät... 11 4. Saias Modbus... 12 4.1. Allmänt... 12 4.2. Modbusmaster i seriellt nät... 12 4.3. Modbusmaster i TCP/IP-nät... 14 4.4. Läsa från server... 15 4.5. Skriva till server... 16 4.6. Modbusserver i seriellt nät... 17 4.7. Modbusslav i TCP/IP-nät... 18 5. Modbusfunktioner... 19 6. 8-, 16, 32- och 64-bitars tal... 20 7. Felsökning... 21 8. Versionshistorik... 22 Malthe Winje Automation AB www.malthe-winje.se Sida 1/22
1. Allmänt Det finns två olika Modbus-bibliotek för PG5. Det ena är från Saia och det andra från Engiby. Båda biblioteken presenteras i detta dokument. 1.1. Programexempel I det här dokumentet refererar vi till programexemplet ModbusDemo. Malthe Winje Automation AB www.malthe-winje.se Sida 2/22
2. Device Configurator Vill man kommunicera med Modbus via TCP/IP behöver man sätta TCP/IP Enabled till Yes och ange ett IP-nummer. Det är de enda inställningar man behöver göra. För att få göra det måste S-Bus Support vara satt till Yes. I Device Configurator kan man se vilka fysiska portar på PLC:n som har vilket nummer och därmed vad man ska ställa in för nummer för kanalen i sina FBoxar. I vissa fall syftar FBox-inställningen Channel till en fysisk port på PLC:n, ibland inte. När vad gäller kan du läsa om längre fram i detta dokument. Om du markerar en port i Device Configuratorn kan du längst upp i fönstret Properties se vilket nummer den har. På så sätt kan du markera den port du vill använda för din Modbus-kommunikation och se vad den har för nummer. I vårt exempel är terminalblocket markerat och vi ser att den porten har nummer 2. Malthe Winje Automation AB www.malthe-winje.se Sida 3/22
3. Engibys Modbus 3.1. Modbusmaster i seriellt nät Ett program för att vara master i ett modbusnät som kommunicerar seriellt behöver innehålla de FBoxar som visas i bilden nedan. Man behöver ha en master-fbox, Master Link RS xxx, och en stations-fbox, Slave Station. Stationsboxarna refererar till masterboxen. Man behöver en masterbox per kanal och för varje kanal behöver man en stationsbox per station man vill kommunicera med. I detta fall refererar en kanal till en fysisk port på PLC:n. Om man till exempel kommunicerar med RS-485 på terminalblocket på en PCD3.5540 blir kanalen, porten, nummer 2. Stationsboxarna ska referera till masterboxen. De inställningar som behöver göras i FBoxarna är följande. I masterboxen: Malthe Winje Automation AB www.malthe-winje.se Sida 4/22
Man behöver ställa in vilken kanal, port, man vill kommunicera på. Kommunicerar man via RS-XXX kan endast en PLC vara master och det är bara mastern som kan skicka och ta mot värden. Inställningarna som görs i masterboxen måste vara samma för alla slavar. De tider man anger är för att justera timeout-tider och de kan behöva justeras vid krävande nät. Men det är inget man behöver bry sig om i vanliga fall. Valet Address offset bestämmer om man adresserar från 0 eller från 1. Valet Saia betyder att man adresserar från 0 och Modicon från 1. Det inställningar som behöver göras i stationsboxen är: Stationsblocken är desamma vare sig man ska kommunicera seriellt eller över TCP/IP. Man behöver även ställa in stationsnumret, i detta fall säger inställningarna att vi ska kommunicera med en slav som har stationsnumret 23. Man kan bör aldrig använda stationsnumret (Modbus-ID) 0. Om kommunikationen mot en slav skulle upphöra försöker mastern ansluta igen efter den tid som angivits efter Short reconnect time. Får den ingen kontakt försöker den igen efter Long reconnect time. Om mastern fortfarande inte får någon kommunikation med slaven fortsätter den att försöka efter den långa tiden gång på gång. Malthe Winje Automation AB www.malthe-winje.se Sida 5/22
3.2. Modbusmaster i TCP/IP-nät Om en PLC ska vara master i ett modbusnät där man ska kommunicera via TCP/IP behöver man lägga in en masterbox för detta istället för RS-XXX: Stationsboxen ska referera till masterboxen. Inställningarna i masterboxen är snarlika de i föregående exempel, tänk på att ställa in kanalen. Kanalen i detta fall är endast en virtuell kanal och har ingen koppling till någon fysisk port på PLC:n. Man kan därför ställa in vilken kanal man vill, mellan 1 och 10. Varje master och varje slav i samma PLC behöver dock ha en unik kanal. Malthe Winje Automation AB www.malthe-winje.se Sida 6/22
3.3. Läsa från slav Vill man läsa ett värde från en slav behöver man en recieve-box. Är det ett register man vill läsa från slaven kan man använda RCV Integer Direct. Den ska referera till stationsboxen. Bilden visar en master som kommunicerar mot en slav i vilken man läser en parameter och lägger värdet i registret register1. Hade man velat läsa 2 parametrar i följd skulle man skrivit 2 i rutan efter Nb. Vilken parameter man läser ställer man in i FBoxen, i detta fall parametern med adressen 100. Hade man angett att man ville läsa 2 parametrar hade värdena lästs från adress 100 och 101 i detta fall. Malthe Winje Automation AB www.malthe-winje.se Sida 7/22
3.4. Skriva till slav För att skriva till en flagga i en slav kan man använda sig av FBoxen Send Bits Direct. I bilden skickas värdena på flagga1 och på flaggan som har adressen efter flagga1 (i mastern) till slaven. Enligt inställningarna nedan i slaven hamnar värdena på adresserna 200 och 201. Om symbollistan i mastern ser ut som nedan kommer värdet på flagga1, adress 50, hamna på adressen 200 i slaven. Värdet på flagga2, adress 51, kommer hamna på adressen 201 i slaven. Malthe Winje Automation AB www.malthe-winje.se Sida 8/22
3.5. Modbusslav i seriellt nät För att vara slav i ett modbusnät som kommunicerar seriellt behöver man en slavbox, Slave Link RS xxx, och en applikationsbox, Slave Application. Vad gäller inställningarna i slavboxen behöver man ställa in baud, stoppbitar, paritet så det stämmer med mastern. Om man är en slav och inte fungerar som en gateway mot andra slavar behöver man bara ställa in sin egen stationsadress. I detta fall har slaven adress 23 och är inte gateway. Den kommunicerar genom RS 485 på port 2. I kapitel 2 kan du se hur du vet vilken kanal som ska ställas in. Malthe Winje Automation AB www.malthe-winje.se Sida 9/22
I applikationsboxen behöver man tala om vem man är genom att ställa in sitt stationsnummer. Vill man att mastern ska kunna läsa allt i slaven låter man Reject not mapped requests stå kvar som None. Malthe Winje Automation AB www.malthe-winje.se Sida 10/22
3.6. Modbusslav i TCP/IP-nät Om kommunikationen går via TCP/IP använder man istället boxen Slave Link IP och samma applikationsbox som för seriell kommunikation. Inställningarna är de samma som för det seriella nätet. Kom ihåg att använda en unik kanal! Malthe Winje Automation AB www.malthe-winje.se Sida 11/22
4. Saias Modbus 4.1. Allmänt I Saias Modbusbibliotek kallar man inte enheterna för master och slavar utan istället för client och server. De FBoxar man lägger i sin master är de man hittar under Saia PCD Modbus/Client och de man lägger i sina slavar är de som finns i Saia PCD Modbus/Server. 4.2. Modbusmaster i seriellt nät Ett program för att vara client, master, i ett Modbusnät som kommunicerar seriellt behöver innehålla de FBoxar som visas i bilden nedan. Man behöver ha en client-fbox, Init Client RS, och en FBox för att tala om vilken server, slav, man ska kommunicera med. Den FBoxen heter Def Unit Client. unitboxen refererar till clientboxen. Man behöver en initieringsbox per kanal och för varje kanal behöver man en unitbox per station man vill kommunicera med. I detta fall refererar en kanal inte till någon fysisk port på PLC:n. Kanalen är bara ett nummer mellan 1 och 10. Man behöver ställa in en unik kanal för varje server. Det finns även ett val för port. Det är här man ställer in den fysiska porten på PLC:n. Om man till exempel kommunicerar med RS 485 på terminalblocket på en PCD3.5540 blir porten nummer 2. Malthe Winje Automation AB www.malthe-winje.se Sida 12/22
De inställningar som behöver göras i FBoxarna är följande. I clientboxen: Man behöver ställa in vilken kanal man vill använda, nummer mellan 1 och 10. Man ställer även in vilken port man vill kommunicera på. Kommunicerar man via RS XXX kan endast en PLC vara client och det är bara clienten som kan skicka och ta mot värden. Inställningarna som görs i clientboxen måste vara samma för alla slavar. Det inställningar som behöver göras i unitboxen är: Unitboxen är densamma vare sig man ska kommunicera seriellt eller över TCP/IP. Man behöver ställa in sitt Unit identifier -nummer, sitt ID. I detta fall säger inställningarna att vi ska kommunicera med en slav som har ID:t 25. Man kan använda nummer mellan 1-247. De tider man anger är för att justera timeout-tider och de kan behöva justeras vid krävande nät. Men det är inget man behöver bry sig om i vanliga fall. Malthe Winje Automation AB www.malthe-winje.se Sida 13/22
4.3. Modbusmaster i TCP/IP-nät Om en PLC ska vara master i ett modbusnät där man ska kommunicera via TCP/IP behöver man lägga in en masterbox för detta istället för RS XXX: Unitboxen ska referera till clientboxen. Inställningarna i clientboxen är snarlika de i föregående exempel, tänk på att ställa in en unik kanal. Kanalen i detta fall är endast en virtuell kanal och har ingen koppling till någon fysisk port på PLC:n. Man kan därför ställa in vilken kanal man vill, mellan 1 och 10. Varje client och varje server i samma PLC behöver dock ha en unik kanal. I unitboxen ställer man in serverns IP-nummer och ID. Malthe Winje Automation AB www.malthe-winje.se Sida 14/22
4.4. Läsa från server Vill man läsa ett värde från en server behöver man en read-fbox. Är det ett register man vill läsa från slaven kan man använda Read Integer. Den ska referera till unitboxen. Bilden visar en client som kommunicerar med en server i vilken man läser en parameter och lägger värdet i registret register1. Vilken parameter man läser ställer man in i FBoxen, i detta fall parametern med adressen 100. Hade man angett att man ville läsa 2 parametrar hade värdena lästs från adress 100 och 101 i detta fall. Man ställer även in vilken funktion man vill använda sig av. Här har vi ställt in att vi använder funktion nummer 3 vilket är att läsa register. Inställningen visar även att vi vill läsa 16-bitar och att registret kan vara positivt eller negativt (signed). Malthe Winje Automation AB www.malthe-winje.se Sida 15/22
4.5. Skriva till server För att skriva till en flagga i en slav kan man använda sig av FBoxen Write Binary. I bilden skickas värdena på flagga1 och på flaggan som har adressen efter flagga1 (i clienten) till servern. Enligt inställningarna nedan hamnar värdena på adresserna 200 och 201 i slaven. Även här ställer vi in funktionen vi vill använda. I detta fall vill vi skriva till flera parametrar och har därför valt Multiple Coils. Om symbollistan i clienten ser ut som nedan kommer värdet på flagga1, adress 2107, hamna på adressen 200 i servern. Värdet på flagga1+1, adress 2108, kommer hamna på adressen 201 i servern. Malthe Winje Automation AB www.malthe-winje.se Sida 16/22
4.6. Modbusserver i seriellt nät För att vara server i ett modbusnät som kommunicerar seriellt behöver man en server-fbox, Init Server RS, och unit-fbox, Define Unit Server. Vad gäller inställningarna i serverboxen behöver man ställa in vilken port man kommunicerar på. Detta är en fysisk port på PLC:n. I detta fall kommunicerar man genom RS 485 på port 2. I kapitel 2 kan du se hur du vet vilken kanal som ska ställas in. Man ställer även in kommunikationstyp, baudrate, stoppbitar och paritet. I unitboxen behöver man tala om vem man är genom att ställa in sitt ID. Här kan man även behöva korrigera sin offset. I detta fall har vi en Saia-PLC som är client och en annan Saia-PLC som är server. Då behöver vi sätta Offset till Yes för att vi ska fråga och få svar på rätt adresser. Annars kan man få följande resultat: clienten frågar efter värdet på adress 100 i servern men får värdet på adress 99. Använder man sig av andra enheter kan man behöva testa sig fram för att se om man ska räkna med offset eller inte. Malthe Winje Automation AB www.malthe-winje.se Sida 17/22
4.7. Modbusslav i TCP/IP-nät Kommunicerar man via TCP/IP använder man istället FBoxen Init Server TCP och samma unitbox som för seriell kommunikation. Inställningarna i serverboxen behöver sällan ändras. I unitboxen behöver man ställa in sitt ID. Kom ihåg att du kan behöva ställa in offset! Malthe Winje Automation AB www.malthe-winje.se Sida 18/22
5. Modbusfunktioner I FBoxarna för att hämta eller skriva värden till en slav ställer man in vilken funktion man vill använda sig av. Oftast hanterar man 16-bitars tal men inte alltid. I tabellerna nedan presenteras de olika sorter tal och även de olika funktioner som används: Discrete Input Single bit Read-Only En signal från ett I/0-system Coils Single bit Read-Write Den här signalen kan ändras av ett användarprogram Input Registers 16-bit word Read-Only En signal från ett I/0-system Holding Register 16-bit word Read-Write Den här signalen kan ändras av ett användarprogram Alla funktionerna stöds inte av alla fabrikat. Det är därför viktigt att veta vad man kommunicerar med och hur den modulen fungerar. Malthe Winje Automation AB www.malthe-winje.se Sida 19/22
6. 8-, 16, 32- och 64-bitars tal Beroende på vad man ska kommunicera med så kan man behöva använda 8, 16, 32 eller 64 bitar i talen. För 8 och 16 bitar är det inget speciellt man behöver tänka på. När det kommer till 64 bitar så kan man inte använda Saian för den sortens kommunikation. Det beror på att det är den 63:e biten som avgör om värdet är positivt eller negativt. Man kan inte slå ihop två 32-bitars register till ett 64-bitars register i saian. För 32 bitar så behöver man göra några inställningar. Om det är Engibys modbusbibliotek som man använder så får man i mastern ändra No 32 bits till Little/Big Endian (om det ska vara Little eller Big får man testa sig fram till). I Recieve-FBoxen ställer man in 32 -> 32 under Format conversion. Alla register i Saian är 32 bitar så man behöver inte fråga på varannan adress eller liknande. I vissa manualer kan man läsa att frågor för 32 bitar ska ställas på adresser över 1000. Det har inget med adresserna för registrena att göra. Utan det funkar på följande sätt: - skickar mastern en fråga på adress 100 så frågar den efter 16 bitar - skickar mastern en fråga på adress 10100 så frågar den efter 32 bitar Men det handlar bara om hur mastern ska ställa sin fråga till Saian när den är slav och man behöver inte göra någon förändring i Saian. Malthe Winje Automation AB www.malthe-winje.se Sida 20/22
7. Felsökning Om kommunikationen inte fungerar kan man börja med att titta på följande punkter För RS-485: Är rätt polaritet inkopplad på D respektive /D? Är allt terminerat som det ska? Har man råkat bygga ett stjärnnät av modulerna? Är det rätt sorts Ethernetkabel? Råkat använda rak kabel mellan enheterna? Är porten inställd på två ställen, både i fupla och i Device Configurator (Hardware Settings i PG5 1.4)? Device Configurator (Hardware Settings i PG5 1.4) vinner alltid över fuplan. Används rätt Modbusfunktion? Olika fabrikat hanterar modbusfunktioner olika. I Saian ställer man in vilken funktion man ska prata med. Sen anger man bara adressen. I vissa fabrikat bakas funktion och adress ihop. Därför kan man ibland läsa i manualer att man ska fråga på adress 40003 till exempel. I de flesta fall betyder det att man i Saian ska fråga på adress 3 med angiven funktion. Testa detta om ni inte får korrekta svar. En offsetförskjutning kan ibland ställa till det. Testa därför att fråga på adresserna runt om den adress man tror att man ska fråga på. Börja med en adress i taget. Malthe Winje Automation AB www.malthe-winje.se Sida 21/22
8. Versionshistorik Version Kommentar Sign. 2012-09-25 Dokumentet skapades. CH 2012-12-03 Uppdaterat med programexempel och Saias Modbus. CH 2016-09-28 Uppdaterat för PG5 2.2 och lagt till kapitel om bitar. CJ Malthe Winje Automation AB www.malthe-winje.se Sida 22/22