RS-485 Kom­mu­ni­ka­ti­ons­soft­ware

Hier soll nun kurz die Soft­ware beschrie­ben wer­den, über die ein Win­dows PC mit den Bus­teil­neh­mern über RS-485 kom­mu­ni­ziert. Es wur­de das freie und weit ver­brei­te­te Mod­bus-RTU-Pro­to­koll ver­wen­det. Es ist gut doku­men­tiert, wegen Pari­ty und 16-bit CRC hin­rei­chend feh­ler­re­si­stent und es gibt mit QMod­Ma­ster ein frei­es Win­dows-Pro­gramm, das bei der Imple­men­tie­rung und Feh­ler­su­che sehr hilf­reich ist. Sowohl für den Win­dows-PC wie auch für das Ardui­no Bio­top gibt es fer­ti­ge Software.

Vor­be­mer­kun­gen

Mit Ardui­no habe ich selbst nichts zu tun, ein­fach weil es das noch nicht gab, als ich zum ersten­mal mit Atmel Bau­stei­nen gear­bei­tet habe. Gele­gent­lich wer­de ich mir das mal anschau­en. Die Mod­bus-Biblio­thek für Win­dows habe ich mir einen hal­ben Tag lang ange­schaut und sie nicht zum Lau­fen bekom­men. Sie ist sicher gut und kann alles, aber die paar Funk­tio­nen die ich brau­che, habe ich dann doch sel­ber geschrie­ben. Das schien mir schnel­ler zu gehen, zumal die Funk­tio­nen auf der Gegen­sei­te, dem Atmel Bau­stein, schon fer­tig war und sich nicht grund­sätz­lich unter­schei­det. Damit ist nun die kom­plet­te Soft­ware sowohl auf der Host- wie auf der Device-Sei­te selbst­ge­schrie­ben und kann hier ohne Ein­schrän­kun­gen im Quell­text ver­öf­fent­licht werden:

Quell­text der Host-Software

Quell­text der Device-Soft­ware für den ATMEGA644PU

Wer will, kann bei­des ger­ne unein­ge­schränkt wei­ter­be­nut­zen, eine Garan­tie für die feh­ler­freie Funk­ti­on gibt’s natür­lich nicht. Es sind sicher­lich hier und da noch Feh­ler ein­ge­baut. Außer­dem ist nur ein Sub­set des Mod­bus-Pro­to­kolls imple­men­tiert, auch die eine oder ande­re Funk­ti­on, die in der Spec als „man­da­to­ry“ bezeich­net wird, ist nicht vor­han­den (z.T. imple­men­tiert, aber aus­kom­men­tiert da ungetestet).

Als Ent­wick­lungs­um­ge­bung für Atmel ver­wen­de ich „Atmel Stu­dio 7.0“, für Win­dows „VS Express 2013“. Bei­de Ver­sio­nen sind etwas älter, Atmel gehört inzwi­schen zu Micro­chip, und von VS Express gibt es neue­re Ver­sio­nen, die aber nicht mehr mit Win­dows 7 lau­fen, son­dern Win­dows 10 benö­ti­gen. Soll­te ich jemals auf Win 10 umstei­gen, wer­de ich mir eine neue­re Ver­si­on besor­gen. Es gibt im Moment für mich kei­nen Grund zum Umsteigen.

Bei­de Pro­gram­me sind sehr spe­zi­fisch für mei­nen Anwen­dungs­fall geschrie­ben, daher habe ich auch kei­ne aus­führ­ba­re Datei bei­gefügt. Die Quell­tex­te sol­len als Muster die­nen, wie man es machen kann, aber nicht muß. Das Win­dows Pro­gramm mag gleich­zei­tig als Bei­spiel die­nen, wie man die seri­el­le Schnitt­stel­le mit Win­dows-Funk­tio­nen bedient.

Alle Pro­gram­me sind in ANSI‑C geschrie­ben, der ATMEGA nutzt ein paar win­zi­ge Assem­bler-Funk­tio­nen. Für Win­dows wird ledig­lich das Win32-API ver­wen­det und ResE­dit als Res­sour­cen Edi­tor, weil die kosten­lo­se Ver­si­on von VS Express zumin­dest bis 2013 kei­nen Res­sour­cen Edi­tor dabei hatte.

Host-Soft­ware

Ganz phan­ta­sie­los habe ich die Host-Soft­ware Ser­Com genannt. Da zur Zeit nur der Anten­nen­um­schal­ter ange­schlos­sen ist, ist dies der erste Tab, der nach dem Start ange­zeigt wird:

Tab Antennenumschalter
Die Bedie­nung des Antennenumschalters

Hier wird ledig­lich eine der bis zu sechs Anten­nen aus­ge­wählt. Die Namen sind in der Regi­s­try kon­fi­gu­rier­bar und oben nur Bei­spiel ohne rea­le Bedeu­tung. Die momen­tan akti­ve Anten­ne wird mit dem Icon ange­zeigt, nur eine kann zu einem Zeit­punkt aktiv sein. Port Sta­tus ist eigent­lich eine ver­zicht­ba­re Dia­gno­se­mel­dung. Hier wird der phy­si­ka­li­sche Sta­tus des Ports A ange­zeigt, der die Relais ansteu­ert. Die bei­den Tabs „Rotor“ und „Anten­nen­tu­ner“ sind leer und hier nur Platz­hal­ter für zukünf­ti­ge Steue­run­gen, die am sel­ben Bus hän­gen sollen.

Mit dem Con­fig-Tab wird einer der Bus­teil­neh­mer konfiguriert:

SerCom Config
Ser­Com Config

Beim Start ohne Para­me­ter wer­den hier die Kon­fi­gu­ra­ti­ons­da­ten des PCs und des aus­ge­wähl­ten Devices ange­zeigt, also Baud­ra­te, Device ID und ver­wen­de­ter COM-Port. Wird Ser­Comm mit dem Par­am­ter „-c“ gestar­tet, läuft es im Kon­fi­gu­ra­ti­ons­mo­dus und die hier dun­kel geschal­te­ten Fel­der wer­den weiß und kön­nen geän­dert wer­den. In die­sem Tab wird ein Zäh­ler gezeigt, der angibt, wie oft das EEPROM pro­gram­miert wur­de, denn die Anzahl der Pro­gram­mier­zy­klen ist end­lich (aller­dings wer­den min­de­stens 100k-Zyklen garantiert).

Auch eine Uhr ist imple­men­tiert, deren Datum und Uhr­zeit hier gesetzt und aus­ge­le­sen wer­den kön­nen. Mit dem Wert bei „RTC cor­rec­tion“ kann im Con­fig-Modus ein Kor­rek­tur­wert ein­ge­ge­ben wer­den, mit dem eine Fre­quenz­ab­wei­chung des Quar­zes für die Uhr­zeit kom­pen­siert wird. Mit „Restart Device“ wird auf dem Device ein Watch­dog Reset pro­vo­ziert, also ein ech­ter Hard­ware-Reset. „Refresh“ liest die ange­zeig­ten Daten erneut aus dem Device aus.

Der Dia­gno­se-Tab zeigt eini­ge Daten an, die etwas über den Gesund­heits­zu­stand des Devices aussagen:

SerCom Diagnose
Ser­Com Diagnose

Zunächst wird der Typ des Moduls, sei­ne Takt­fre­quenz und die Ver­si­on der imple­men­tier­ten Soft­ware ange­zeigt. Ver­schie­de­ne Zäh­ler zei­gen dann die Anzahl der unter­schied­li­chen Resets, die Anzahl feh­ler­frei emp­fan­ge­ner eige­ner und frem­der Nach­rich­ten und die Anzahl von Kom­mu­ni­ka­ti­ons­feh­lern an. Auch die Ver­sor­gungs­span­nung und die Tem­pe­ra­tur auf der Device-Sei­te wer­den ange­zeigt. Trotz des nur etwa 30mA gro­ßen Ver­sor­gungs­stroms erwärmt sich das Board merk­lich. Nun­ja, bei 12V sind es ja auch immer­hin 360 mW. Der Tem­pe­ra­tur­sen­sor (TMP275) hat übri­gens eine Genau­ig­keit von 0.5 K und 116 K Auf­lö­sung. Daß drei Stel­len hin­ter dem Kom­ma ange­zeigt wer­den, deu­tet eine höhe­re Genau­ig­keit an.

Außer­dem wer­den die Namen und Zeits­tem­pel der Quell­da­tei­en und der Zeit­punkt des Com­pi­ler­laufs ange­zeigt. Auch hier lässt sich mit der Refresh-Taste der ange­zeig­te Inhalt erneu­ern. Durch Anklicken der „Con­ti­nuous“ Check­box wird der Refresh dau­er­haft aus­ge­führt. Das ist für Dau­er­tests hilf­reich. Ein über Nacht aus­ge­führ­ter Dau­er­test brach­te kei­nen ein­zi­gen Feh­ler her­vor. Daß die Feh­lerzäh­ler funk­tio­nie­ren, zeig­te aller­dings ein erster Test mit 100 W HF auf dem Antennenumschalter.

Seit eini­gen Tagen und Näch­ten ist die Soft­ware im Ein­satz und hat sich bewährt. Für das Inter­face zwi­schen dem USB-RS485-Wand­ler und dem Bus habe ich auch zum Ein­kop­peln der 12V Ver­sor­gungs­span­nung eine klei­ne Box gebaut:

RS485-PC-Box
RS485 PC-Inter­face Box.

Sie fügt noch­mal klei­ne Tief­päs­se in die Kom­mu­ni­ka­ti­ons­lei­tung ein und ent­stört die Ver­sor­gungs­span­nung eines exter­nen Stecker­netz­teils. Das Gehäu­se ist übri­gens ein sehr preis­wer­tes Euro­box-Gehäu­se, das ich auch für ande­re Din­ge ger­ne verwende.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.