# Modbus RS485 Master



## bastian c (21 April 2011)

hallo,
ich hab nen kleines problem und vieleicht kann mir jemand da weiterhelfen.
wir haben zur zeit ein projekt am laufen was auch mittlerweile kurz vor dem abschluss steht, es müssen nur noch tests durchgeführt werden.
der aufbau besteht aus einer wago 750-841 mit ner ganzen latte DI's und DO's und ein paar AI's.
zum abschluss is noch nen wago modbus gateway 750-653 angehängt (die parametrierbare version).
weiterhin gehört zu diesem system ein beijer touchpanel pc welcher mit einer von uns erstellten visu läuft und mit der 841er via modbus tcp kommuniziert.
bis hier hin läuft alles einwandfrei.
nun soll über die 750-653 modbus rs485 slave karte ein externes control system ebenfalls auf die 841er zugreifen können.
von der programierung her sollte vom sps programm alles i.O. sein.
auch das rs485 modul habe ich entsprechend der wago manuals parametriert und habe im betrieb die 3 grünen led's des moduls am leuchten.
nun möchte ich gerne mit einer modbus rs485 master die funktionen überprüfen.

der beijer pc hat einen com port welcher als rs485 auf der hauptplatine gejumpert ist.
nun habe ich mir das programm modscan32 runtergeladen und versucht damit eine verbindung herzustellen.
jedoch meckert der immer modbus slave time out.
daher frage ich mich was mache ich falsch?
verdrahtet haben wir das modul nach diesem bild: http://www.wago.com/wagoweb_china/public/750/ger_manu/modules/m065300d.pdf seite 13 oben rechts, da wir eine bus verbindung bereitstellen sollen.
praktisch sieht das so aus das txd und rxd zusammen auf eine klemme gelegt wurden. genauso rxd- und txd- auf eine klemme. jedoch haben wir keine widerstände angehängt da ich nun schon öfters gelesen habe das diese bei kurzen leitungslängen nicht nötig sind. (wir haben hier effektiv 2m)
nun wurde laut http://www.beijerelectronics.com/we...12575390040EF5F/$FILE/EPC_Nautic_MAEN953B.pdf seite 13 pin 1 des seriellen kabels auf die klemme mit den positiven rxd und txd gelegt und pin 2 auf die negativen.

da es so nicht läuft aber die verdrahtung richtig sein sollte frage ich mich taugt modscan32 überhaupt? 
oder gibt es vieleicht ganz andere einfachere wege?

gruß


----------



## eYe (22 April 2011)

bastian c schrieb:


> pin 1 des seriellen kabels auf die klemme mit den positiven rxd und txd gelegt und pin 2 auf die negativen.



Alle vier Klemmen brauchst du in der Regel nur bei einem RS422 oder RS485 Vierleiter. Von deinem Bejier Panel komtm aber nur eine RS482 2-eiter, also würde ich es mal probieren PIN1/2 nur an die beiden TXD Klemmen anzuschließen.

Die Widerstände sind bei 2m wirklich überflüssig, wichtig ist aber das die restliche Konfiguration auf Master und Slave Seite stimmen.
-Baudrate?
-Parität?
-Adresse?
-Abgefragte Register korrekt?
-Functionscode? (Einige Slaves/Master können nur bestimme...)




> da es so nicht läuft aber die verdrahtung richtig sein sollte frage ich mich taugt modscan32 überhaupt?
> oder gibt es vieleicht ganz andere einfachere wege?



Ich kenne Modscan32 nicht, aber schau dir mal folgendes an. Ist eine 30 Tage Trial: http://www.modbustools.com/modbus_poll.asp


----------



## Markus Rupp (23 April 2011)

diese bus-klemme hatte ich letzte woche erst im einsatz, und meine erfahrung zeigt folgendes:
die von dir besprochene brückerei ist "zwingend" in einem 2-leiter system.
du benötigst die widerstände an der busklemme selbst nur wenn sie eines der topologischen enden bildet.

ansonsten geht man beim zwei leiter system nach handbuch vor (endwiderstand setzen mit XOhm, in abhängigkeit der kabellänge (spannungsabfall) kann es auch sein das du das 5v potenzial nachbehandeln mußt um echos und spannungsbrüche zu vermeiden.

mir stellt sich die frage welchen modbus du fährst (ascii oder rtu)

bei rtu und einem anliegenden timeout vermute ich zuersteinmal das die adresse im falschen format angegeben wurde (hex <-> dec).

bei ascii würde die vermutung in erster linie auf FC hindeuten, wobei auch hier auf die adress-formatierung zu achten ist, allerdings in ascii zumeißt dec

insgesamt ist es imer hilfreich sich mit modbus_poll auseinanderzusetzen, hatten selbst noch nie probleme damit. und in der demo hast du alles was du brauchst

EDIT:::::::::::::
und weil ich es gerade noch gelesen habe, du hast die 0003-000-version (parametrierbar):
hast du mit dem io-check-pro die karte intern parametriert? 

stichworte lauten hier:


----------



## bastian c (23 April 2011)

ja das mit der brückerei habe ich auch so als zwingend verstanden.
das protokoll ist modbus rtu.
ich will halt jetzt diesen 2 leiter betrieb testen jedoch mit ner quasi direkten verbindung.
und da das beijer touchpanel ja auch von einer 2 leiter verbindung ausgeht sollte das ja klappen.
benötige ich denn dann auch zwangsweise beide widerstände bei ner kabellänge von 2m?
ich habe als slave id im controller 1 angegeben und port 2 wie es im handbuch beschrieben steht (das mit der parametrierung habe ich glaube ich jedoch aus dem anwendungshinweis wie man einen modbus slave mit dieser karte aufbaut).

das mit der parametrierung schaue ich mir gleich nochmal an weil ich dachte das man den halbduplex mode (welcher ja zwingend ist für 2 leiter betrieb) auch beim aufruf des bausteins im plc prg einstellen kann.


----------



## bastian c (23 April 2011)

so ich bin nun wieder inner firma und ein wenig am rumprobieren.
mein verständnis und auch der anwendungshinweis http://www.wago.com/wagoweb/documentation/app_note/a1026/a102604d.pdf sowie die beschreibung der lib terminal_slave http://www.wago.com/wagoweb/documentation/app_note/libdoku/ml00801d.pdf schreiben nicht das ich zwingend das wago io check brauche, sondern auch mit den parametern mit der ich die terminal slave funktion aufrufe, einstellen kann welche werte nun benutzt werden sollen.
ich rufe folgendermaßen auf:
Slave1(bSLAVE_ADDRESS:=1,bCOM_PORT:=2,cbCOM_BAUDRATE:=BAUD_9600,cpCOM_PARITY:=PARITY_NO,csCOM_STOPBITS:=STOPBITS_1,cbsCOM_BYTESIZE:=BS_8,cfCOM_FLOW_CONTROL:=halfduplex,aDATA:=ser_data);

http://img546.imageshack.us/i/screen1oo.jpg/
so sieht das ganze dann im laufenden programm aus.
soweit so gut.

wenn ich jetzt modbus poll anwerfe und folgende dinge angebe:
slave 1
function 03 read holding register
address 0
quantity 39
bekomme ich immer nen time out fehler

das normale modbus register mapping wie man es auf einem modbus controller vorfindet greift ja hier nicht da man ja nur die daten das data array abfragen kann?!? daher address 0.

die einstellungen bzgl baudrate und so sind natürlich gleich.

was mache ich falsch?



edit!
garnix ist die antwort
man kann sich nur scheinbar nicht auf jede firma verlassen das sie komponenten so ausliefern wie beschrieben...
der com 4 war nämlich noch als rs232 gejumpert
dank heißkleber war das aber nicht so ersichtlich...
auf rs485 gejumpert und läuft auf anhieb.
vielen dank an alle 

gruß


----------

