AdsRead/AdsWrite BX9000

CX0CE4FC

Level-1
Beiträge
2
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich versuche zum Einstieg in die ADS-Kommunikation von einer BX9000 aus ein MB100 einer CX9010 zu lesen oder zu beschreiben. Leider bekomme ich den "AdsError 1817"(timeout), den ich mir auch nach meinen Recherchen nicht erklären kann. Die umgekehrte Konstallation (AdsRead/Write) von der CX9010 auf die BX9000 hat reibungslos funktioniert. Ich verwende TwinCat Version 2.11. Habt ihr eine Idee?

BX9000
-------------------------------------------------------------------------
PROGRAM MAIN
VAR
var1 : BOOL;
fb_write:ADSREAD;
b_start_write:BOOL;
END_VAR

fb_write(
NETID:='5.12.228.252.1.1' ,
PORT:= 801,
IDXGRP:=16#4020 ,
IDXOFFS:=100 ,
LEN:=SIZEOF(var1) ,
DESTADDR:=ADR(var1) ,
READ:=b_start_write ,
TMOUT:=t#5s ,
BUSY=> ,
ERR=> ,
ERRID=> );

CX9000
-------------------------------------------------------------------------
PROGRAM MAIN
VAR
wert1 AT%MB100 : BOOL;
END_VAR

Grüße
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich tippe ebenfalls auf die route.
Ein BC besitzt keinen Routeneintrag. Ohne eingetragene Route deshalb:
-> CX nach BC funktioniert immer
-> BC nach CX geht nicht.
 
Die AMS Net ID vom CX muss IP Adresse + 1.1 sein oder du musst beim BX/BC mit dem Baustein AdsAddRoutingInfo dem BX klar machen das die AMS Net ID nicht der IP Adresse.1.1 entspricht. Den Baustein findest du in der TcSystemBX.lbx Lib.
Beispiel:
AdsAddRoutingInfo:AdsAddRoutingInfo;
IP: STRING := '172.17.40.45'; (* IP from the CX device *)

AdsAddRoutingInfo(
NETID:='5.19.76.23.1.1' , (* AMS NET ID from the CX *)
CHANNEL:='TCP' ,
PPARA:=ADR(IP) ,
START:=TRUE ,
BUSY=> ,
ERR=> ,
ERRID=> );
IF NOT AdsAddRoutingInfo.BUSY THEN
IF NOT AdsAddRoutingInfo.ERR THEN
;
END_IF
AdsAddRoutingInfo(START:=FALSE);
END_IF

So müsste es dann gehen! Gruß
 
Hallo,

ertmal vielan Dank für eure Antworten. Ich habe daraufhin versucht die Route im Systemmanager hinzuzufügen (Abb1). Zusätzlich habe ich den Baustein "ADSAddRoutingInfo" ausprobiert.

Alle Versuche endeten wieder im "Error1817". Spätestens durch "ADSAddRoutingInfo" muss er doch aber die richtige Route haben. Wenn ich bei der CX die Route vergessen habe kam außerdem auch "missing route"(dec7) als Fehler.


Hier mien aktueller Code:

AdsAddRoutingInfo(
NETID:='5.12.228.252.1.1' ,
CHANNEL:='TCP' ,
PPARA:=ADR(IP) ,
START:=b_start_change_rout ,
BUSY=> ,
ERR=> ,
ERRID=> );
IF NOT AdsAddRoutingInfo.BUSY THEN
IF NOT AdsAddRoutingInfo.ERR THEN
;
END_IF
b_start_change_rout:=FALSE;
END_IF

fb_read(
NETID:='5.12.228.252.1.1' ,
PORT:= 801,
IDXGRP:=16#4020 ,
IDXOFFS:=100 ,
LEN:=SIZEOF(var1) ,
DESTADDR:=ADR(var1) ,
READ:=b_start_read ,
TMOUT:=t#5s ,
BUSY=> ,
ERR=> ,
ERRID=> );


GrüßeAbb1.jpg
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Im CX muss die Route eingetragen sein zum BX, sonst blockt er das. Im BX musst du die AMSNet ID und IP Adresse dem BX bekannt machen damit er das ADS Telegramm mit der richtigen IP Adresse rausschickt. Das machst du mit dem Baustein AdsAddRoutingInfo.
Am einfachsten ist es du stellst auf dem CX eine AMS Net ID ein die der IP Adresse entspricht und um ".1.1" erweitert wurde. Dann musst du nur die Route im CX eintragen und der Rest geht von alleine da der BC/BX beim ADS READ oder Write davon ausgeht das AMS Net ID gleich der IP Adresse ist +'.1.1'.
Wenn ADS Read oder Write vom CX zum BC/BX funktioniert dann ist die Route auf dem CX schon mal richtig eingestellt. Dann sollte mit den Hinweis aus der vorherigen Antwort auch die andere Richtung gehen...
 
Zurück
Oben