RS485 debugging

Hej,

Jeg er ved at forbinde en PLC og en embedded computer via RS485 og MODBUS RTU protokollen. Desv=E6rre har jeg ikke haft den helt store succes med at f=E5 tingene til at snakke sammen. Jeg startede med at forbinde de to enheder (A, B og jord) med et sk=E6rmet kabel. PLC=92en er sat til slave og den anden enhed er sat til master. Jeg sendte s=E5 en foresp=F8rgsel fra master=92en, men fik ikke svar og nogle gange et uforst=E5eligt svar.

Efter dette har jeg fors=F8gt at debugge RS485-forbindelsen med mit oscilloskop:

formatting link

Umiddelbart ser output p=E5 skopet fornuftigt ud, men jeg har bem=E6rket en ting. Hvis jeg sender en enkelt byte af sted, s=E5 ser signalet m=E5ske ikke helt rigtigt ud. Et eksempel fra wikipedia viser, at hvis man sender 0xd3 afsted, skal output se s=E5dan ud:

formatting link

Hos mig ser det s=E5dan ud:

formatting link
formatting link
Alts=E5 n=E6sten magen til bortset lige fra starten af signalet. Er der noget galt med dette output?

Jeg har desv=E6rre ikke en USB->RS485 konverter til min PC, men det kan v=E6re, at jeg m=E5 anskaffe mig en for at blive klogere p=E5 problemerne. Hvor finder man s=E5dan en til sm=E5 penge, der virker godt? Jeg har set en hos ELFA:

formatting link
=3D20674 men den ender i et DB9 han stik, det ville v=E6re rarest med skrueterminaler, men det kan jeg selvf. selv lave.

Mvh. Kim

Reply to
Kim
Loading thread data ...

Den 12.06.2011 22:18, skreiv Kim:

Du har et "stort problem" ;-)

Den korteste ModBus meldingen er 8 bytes, og 7 bytes som svar. Du har behov for (les trenger) et minneskop som husker minst 16 bytes.

Du har "lov til" å henge en spion på RS485 linjen. En krets, DS3695 er billig og bra. Der er ørten varianter av samme kretsen.

Det er lite heldig å måle direkte på 485-bussen. Mål etter at ds3695 haromgjort signalet til vanlig TTL.

Lær deg hvorledes hver byte skall se ut på scoopet, og mål hver byte, stepp for stepp gjennom hele kjeden. En vanlig feil er å bytte om "A" og "B" signalene.

HM

Reply to
Harald Mossige

Kim skriver:

Har du RS232 på din PC? Så kender jeg et sted du kan få et RS232/485 interface til "en hund". "

formatting link
"

Klaus

--
 Modelbane Europas hjemmeside: http://www.modelbaneeuropa.dk
Modeltog, internet, gratis spambekæmpelse, elektronik og andet:
                    http://www.moppe.dk
Reply to
Klaus D. Mikkelsen

Den vil jeg gerne k=F8be, har sendt dig en email. /Kim

Reply to
Kim

r
695

e,

g

Tak for dit svar Harald. Jeg startede med at sende 8 byte modbus beskeder, men det virkede ikke. Derfor pr=F8ver jeg nu det simplest mulige eksempel og sender blot en enkelt byte. Det er kun for at se, om signalet ser rigtigt ud og har ikke noget med modbus-protokollen at g=F8re. Jeg forventede dette (0xd3):

formatting link
men min m=E5lig viser en lille afvigelse i starten:
formatting link
formatting link
Kan du fort=E6lle mig, om afvigelsen i starten er en fejl/et problem?

Det lyder som en god ide med s=E5dan en spion. Jeg tror ikke, jeg har ikke byttet om p=E5 A og B signalerne. Jeg synes umiddelbart de slides, jeg fandt p=E5 internettet er rimeligt hj=E6lpsomme:

formatting link
men jeg kan ikke forklare min "fejl" vha. dem.

Mvh. Kim

Reply to
Kim

Den 13.06.2011 09:23, skreiv Kim:

Jeg vet ikke sikkert hvor jeg skal begynde, men jeg forsøker.

Scopet dit har en kondensator på inngangene. Derfo viser det "0" volt som hvilesignal, både på "A" og "B" signalet. Mitt profisjonelle scop har en bryter som velger AC eller DC inngang. Jeg velger DC. Du bør være klar over denne denne målefeilen.

(Hex) D3 (Binær) 11010011, og der blir

  • start, par, og stop 011010011p1 = 11 bit SDDDDDDDDPS

Dette er teorien. Tegningen:

formatting link
viser 10 bit. Pariteten mangler.

Slik leser jeg scoopet, Øverste bilder: 10110010111 Invertert 01001101000 Det er 11 bit. Jeg finner ingen fornuft i disse bildene: Dersom startbittet er "1", så skall stopbittet være "0", og dersom startbittet er "0", så skal stopbittet være "1".

Beklager, men jeg tror transmitteren din er splitter pine gal.

Dette programmet har hjulpet meg. Gratisversjonen.

(Beklager, jeg har ikke mer tid nu.)

HM

Reply to
Harald Mossige

Nej, scopet er ikke AC koblet, for så ville man se det tydeligt. En

485-linje, der er i "tomgang", vil netop lægge sig på en spænding, der ligger mellem 0V og forsyningsspændingen, præcist som det ses på Kim's billede.

Og du anser dermed ikke Tektronix for at være et profesionelt oscilloscop. Underholdende...

Men selv på et Tek scope kan man vælge AC/DC kobling af kanalerne.

Bo //

Reply to
Bo Bjerre

485- Linjen skall termineres, og V+ skall legges høy og V- skall legges lavt. Dette fordi - - -.

Jeg har ikke sakt et kløvet ord om Tektronix. Venligst, ikkeinsunier. Underholdende...

Vi har masser av fluer i Norge nå. Trenger du noen?

HM

Reply to
Harald Mossige

5 er

ds3695

byte,

" og

=E6re

r blir

d3_byte_lsb_first.png

i disse

Hvad er det for et program, du vil anbefale mig? Mvh. Kim

Reply to
Kim

Tegningen:

formatting link

Jeg har brukt det som "sniffeprogram" på RS485, og som avansert terminalprogram.

HM

Reply to
Harald Mossige

Harald Mossige skriver:

Hvilket program?

Klaus

-- Modelbane Europas hjemmeside:

formatting link
Modeltog, internet, gratis spambekæmpelse, elektronik og andet:
formatting link

Reply to
Klaus D. Mikkelsen

Fordi...

Ifølge standarden er der ikke noget, der tilsiger, at man blander stel og forsyning ind i begreberne. Nogle er 3.3V forsynede og andre er 5V forsynede. Man terminrer linjen i begge ender mellem de to tråde i linjen, med en ohmsk modstand, der svarer til kabelimpedansen. Typisk

120 til 150 Ohm.

En 485 modtager har et indbygget bias på typisk 200mV, der sikrer en kendt tilstand, når linjen IKKE drives.

Nå, ja, du antyder ellers helt godt at det scope Kim anvender som udgangspunkt er AC koblet, fordi det ikke er prof. Men lad det nu hænge. Og har du ikke humor til at se det sjove, så glem det.

Bo //

Reply to
Bo Bjerre

Gætter på NRK-1 ;-)

Bo //

Reply to
Bo Bjerre

Og derfor kan man ha busen "flytende" i forhold til GND, - i alle fall frem til neste tordenvær.

Tenk så mye du kan om dette, - og du er ikke istand til å gi Kim noe hjelp.

Har du vansker med leseferdigheten? Forsøk å lese et par ganger til.

Forsøker du på det vi kaller "inteligent humor"? Joda. Man mø øve seg.

Reply to
Harald Mossige

lt

g, der

Kim's

es

visse modbus devices kr=E6ver at der er et s=E6t pull-up/down p=E5 linien, tror det hedder polarisation i standarden.

m=E5ske nok kendt men ikke n=F8dvendigvis 'rigtigt'

snip

-Lasse

Reply to
langwadt

Nu har jeg modtaget RS232->RS485 konverteren og pr=F8ver at sende den samme byte, 0xd3, fra min PC. Mit oscilloskop er sat p=E5 udgangens GND/ A/B p=E5 RS485 konverteren ligesom beskrevet tidligere og i pdf- dokumentet. Uden nogen termineringsmodstande ser jeg flg.:

formatting link
Det er heller ikke, hvad jeg forventede. Jeg har pr=F8vet at s=E6tte en

120 ohms modstand mellem A og B, men det =E6ndrer selvf. ikke selve signalets form. If=F8lge manualen til ICPCON i7520 konverteren er dataformatet s=E5ledes: 1 start+8data+1stop+ingen paritet =3D 10 bit Endvidere har konverteren en "Self Tuner" som skulle g=F8re f=F8lgende: "therefore it can detect the baud rate and data format automatically and control the direction of the RS485 network precisely".

Kan nogen fort=E6lle mig, hvordan jeg p=E5 korrekt vis tilslutter denne ICPCON i7520 rs232->rs485 konverter og m=E5ler med et oscilloskop over den? Skal der nogle termineringsmodstande til? Hvordan skal outputtet se ud p=E5 et oscilloskop se ud, n=E5r jeg sender byte 0xd3? Jeg forventer umiddelbart stadig at se samme sekvens som:

formatting link

Mvh. Kim

Reply to
Kim

Kim skriver:

Der er der kun 7 bit, ingen start og stopbit. Med mindre at start og stop er samme polaritet som idle state.

Hvad bruger du til at sende med fra PC?

Det ser det ud til at du allerede har fundet ud af.

Ja, hvis dine kabler er over 10 meter lange.....

Klaus

--
 Modelbane Europas hjemmeside: http://www.modelbaneeuropa.dk
Modeltog, internet, gratis spambekæmpelse, elektronik og andet:
                    http://www.moppe.dk
Reply to
Klaus D. Mikkelsen

Hvis "1" er lav (øverste kurve) og man læser 'bagfra', så er byten faktisk til stede. Den første (til venstre) firkant er startbit, så kommer "11001011" som er 0xd3 bagfra. De sidste 2 bit er lav som det efterfølgende stykke (idle). Så tilsyneladende er det kun stopbit der mangler.

--
Ulrik Smed
Aarhus
Reply to
Ulrik Smed

Et lille testprogram der k=F8rer under Linux, ser omtrent s=E5dan ud: #define TestMsgLength 1 ubyte testMsg[TestMsgLength] =3D {0xd3}; fd =3D open("/dev/ttyUSB0", O_RDWR); baudrate =3D B2400; tcgetattr(fd, &Term); cfmakeraw(&Term); cfsetospeed (&Term, baudrate); cfsetispeed (&Term, baudrate); tcsetattr(fd, TCSAFLUSH, &Term); while(1) { write(fd, testMsg, TestMsgLength); usleep(100000); }

Reply to
Kim

Jeg glemte paritet, stop bit osv.

Her er eksempel fra hyperterminal, databit: 8, paritet: ingen, stopbit: 1:

formatting link
Det ser vist rigtigt ud!

Reply to
Kim

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.