Modbus TCP Server Data Size vergrößern?

Begonnen von Mensetta, 06. Juni 2013, 17:00:10

Vorheriges Thema - Nächstes Thema

0 Mitglieder und 2 Gäste betrachten dieses Thema.

Mensetta

Hallo,
hätte da mal eine Frage zum oben genannten Modul.
Eine Data Size [0..255] OF WORD reicht mir beim Modbus Server nicht aus.

Hab ich die Möglichkeit diese Limitierung aufzuheben und beispielsweise ein DATA Size von 0 bis 20000 zu nutzen?
Wenn ja, an welchen Stellen muss ich dafür Hand anlegen?

Besten Dank im Voraus!!

peewit

#1
hallo

ich bin das ganze mal ganz schnell durchgegangen, und auf den ersten blick "dürfte" es relativ leicht gehen

1. das einfachste ist wenn du denn baustein MB_SERVER kopierst und die angepasste version als MB_SERVER_x verwendest

FUNCTION_BLOCK MB_SERVER_x
VAR_IN_OUT
   IP_C : IP_C;
   S_BUF : NETWORK_BUFFER_SHORT;
   R_BUF : NETWORK_BUFFER_SHORT;
   VMAP : ARRAY [1..10] OF VMAP_DATA;
   DATA : ARRAY [0..19999] OF WORD;
END_VAR
VAR_INPUT
   DATA_SIZE : INT;
   ENABLE : BOOL;

und beim baustein gehört natürlich auch beim parameter "DATA_SIZE" dann 19999 angegeben
###################################


der mb_server kann mit virtuellen adressbereichen arbeiten und dazu wird der baustein MB_VMAP verwendet
wenn man keine eigene VMAP's verwendet wird automatisch eine default-VMAP erzeugt
dazu ist auch dort eine kleine anpassung zu machen
das ist aber eine anpassung die ich sowieso in den standard übernehmen werde, da es eigentlich so nicht "gut" war

FUNCTION_BLOCK MB_VMAP

IF init = FALSE THEN
   init := TRUE;
   IF VMAP[1].FC = DWORD#0 THEN
      VMAP[1].FC := DWORD#16#FFFF_FFFF;
      VMAP[1].V_ADR := 0;
      VMAP[1].V_SIZE := SIZE;
      VMAP[1].P_ADR := 0;
   END_IF;
END_IF;

das sollte theoretisch alles gewesen sein, probiere es mal aus, vielleicht hast du glück ....
ansonsten müsstest du etwas warten bis ich mehr zeit habe.... um es selber zu testen

gruss peewit

Mensetta

hallo peewit,

danke für die schnelle Antwort, es funktioniert perfekt.

Jetzt allerdings noch ne zweite Frage bei der du vielleicht weiter helfen kannst.
Mein Modbus Server soll mir ein Int über die momentan aktiven client connects geben.

Ich frage mich gerade wo ich diese Variable am besten hoch/herunter zählen kann.

Danke schonmal im Voraus


peewit

mb_server und ip_control erlauben genau einen clienten

wenn du mehr clients parallel drauf zugreifen lassen möchtest dann musst du dementsprechend viele instanzen von mb_server und ip_control verwenden. diese können natürlich mit dem gleichen DATA Array arbeiten

wenn sich ein client mit dem mb_server verbunden hat, dann kannst du das über

IF IP_C.C_STATE = 255 THEN
   ..... verbindung aktiv ....

die möglichen zustände von  C_STATE kannst du in der doku nachlesen


Mensetta

Ah okay, hmm kann zwar damit leben aber ist dieses Verhalten nicht eher untypisch für einen Server?

peewit

man muss berücksichtigen das hier eine sps verwendet wird, und es gibt leider sehr viele verschiedene
, von sehr leistungsarmen bis starken und welche mit viel und wenig speicher