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!!
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
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
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
Ah okay, hmm kann zwar damit leben aber ist dieses Verhalten nicht eher untypisch für einen Server?
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