Projekt: PR_0002_32 - SIEB & MEYER AG
←
→
Transkription von Seiteninhalten
Wenn Ihr Browser die Seite nicht korrekt rendert, bitte, lesen Sie den Inhalt der Seite unten
Projekt: PR_0002_32 Titel: SD3-Drive-Direkt-Kommunikation Version: V1 Lüneburg, den 22. Oktober 2020
Erstelldatum Letzte Änderung Erstellt von Reversion 15.10.2020 22.10.20 HP V1 Projekt: PR_0002_32 Titel : SD3-Drive-Direkt-Kommunikation Kapitel : Allgemein Inhaltsverzeichnis 1. Allgemein................................................................................................................3 2. Einbinden des ‚CNetDirect‘ PlugIns .....................................................................3 2.1. Die Schnittstelle...............................................................................................................4 2.1.1. ‘setDeviceName’ .............................................................................................................5 2.1.2. ‘configure’ ........................................................................................................................5 2.1.3. ‚findSlaves‘ ......................................................................................................................6 2.1.4. ‚readObject‘ .....................................................................................................................7 2.1.5. ‚writeObject‘ .....................................................................................................................7 2.1.6. ‘writeMasterObject’ ..........................................................................................................8 2.1.7. ‘getSlaveSet’ ...................................................................................................................8 2.1.8. ‘getNoOfSlavesSet’ .........................................................................................................8 2.1.9. ‘getDeviceName’ .............................................................................................................8 2.1.10. ‘installCallBackFunction’ .................................................................................................9 3. Datenaustausch .....................................................................................................9 4. Beispiel-PlugIn ..................................................................................................... 14 Dokument: PR_0002_32-Drive-Direct-Communication-V1_ger.docx Seite 2 von 15
Erstelldatum Letzte Änderung Erstellt von Reversion 15.10.2020 22.10.20 HP V1 Projekt: PR_0002_32 Titel : SD3-Drive-Direkt-Kommunikation Kapitel : Allgemein 1. Allgemein Zur direkten Kommunikation zwischen den Drives der Generation SD3 hat SIEB & MEYER ein Firmware-PlugIn entwickelt das das direkte Lesen, das direkte Scheiben und den zyklischen Austausch von Datenobjekten des SD3 ermöglicht. Hierbei fungiert ein SD3-Drive als Master, die anderen als Slaves. Der Master kann auf alle Objekte im Shared-Memory der gekoppelten SD3-Drives lesend und schreibend zugreifen. Die Kommunikation erfolgt über die Ethernet-Schnittstelle. Die Netzwerkschnittstelle muss hierfür konfiguriert werden und jedes Drive eine eindeutige IP-Adresse erhalten. Dieses kann durch feste IP-Adressen oder durch DHCP sichergestellt werden. Das konfigurieren der Netzwerkschnittstelle ist in der DRIVEMASTER-3 Dokumentation beschrieben. SWITCH SD3-Slave-n SD3-Slave-1 SD3-Slave-0 SD3-Master 2. Einbinden des ‚CNetDirect‘ PlugIns Um die Funktionalität nutzen zu können ist das PlugIn einzubinden. Dieses erfolgt im Edit-Menu des DRIVEMASTER-3. Das PlugIn heißt ‚CNetDirect‘. Die Priorität sollte höher als die des OEM- PlugIns gesetzt werden. Laden sie dann die veränderte Konfiguration in den Antrieb und erstellen sie das Objektverzeichnis neu. Es sollten nun folgende Objekte im Objektbrowser sichtbar sein. Dokument: PR_0002_32-Drive-Direct-Communication-V1_ger.docx Seite 3 von 15
Erstelldatum Letzte Änderung Erstellt von Reversion 15.10.2020 22.10.20 HP V1 Projekt: PR_0002_32 Titel : SD3-Drive-Direkt-Kommunikation Kapitel : Einbinden des ‚CNetDirect‘ PlugIns 2.1. Die Schnittstelle Um die Funktionalität des PlugIns nutzen zu können ist dieses mittels der ‚#include‘ Anweisung zu importieren. #include ‚CNetDirect.h‘ Das PlugIn stellt nun folgende Funktionen zur Verfügung: //-- configure network. NT::u32 configure( const QStringList & aDeviceList = QStringList(), const NT::u16 aCycleTime = 0, const QString aMulticastGroupIP = QString(""), NT::u16 aMulticastGroupPort = 0, const NT::u8 aDevice = 0); //-- search for available slave drives, returns 0 if all drives configured NT::u32 findSlaves( NT::u32 aMasterTxObjId, NT::u32 aTxObjSize, NT::u32 aMasterRxObjId, NT::u32 aRxObjSize, NT::u32 aSlaveTxObjId, NT::u32 aSlaveRxObjId); //-- returns set of connected slave drives NT::u8 getSlaveSet(); //-- returns no of connected slave drives NT::u8 getNoOfSlaves(); //-- sets device name NT::u32 setDeviceName( const QString aName); //-- gets device name Dokument: PR_0002_32-Drive-Direct-Communication-V1_ger.docx Seite 4 von 15
Erstelldatum Letzte Änderung Erstellt von Reversion 15.10.2020 22.10.20 HP V1 Projekt: PR_0002_32 Titel : SD3-Drive-Direkt-Kommunikation Kapitel : Einbinden des ‚CNetDirect‘ PlugIns QString getDeviceName(); //-- reads object NT::u32 readObject( const NT::i32 aId, const NT::u32 aObjId, const NT::u32 aIndex, NT::i32 & aSize, void * apData, const NT::u32 aSubId=0, const int aTimeOut=0); //-- writes object NT::u32 writeObject( const NT::i32 aId, const NT::u32 aObjId, const NT::u32 aIndex, NT::i32 & aSize, void * apData, const NT::u32 aSubId=0, const int aTimeOut=0, const NT::u16 aPort=0); //-- write master object NT::u32 writeMasterObject(); //-- installs callback function NT::u32 installCallBackFunction(void (*apFcta)()); 2.1.1. ‘setDeviceName’ Die Funktion ermöglicht die Festlegung eines Gerätenamens. Dieses überschreibt die Voreinstellung aus dem Parameter-File. Wird kein Gerätename festgelegt, bildet die Software diesen aus der IP- Adresse. Beschreibung der Parameter: Name Type Beschreibung aName QString Gerätename. Beispiel: piCNetDirect->setDeviceName(„MyDevice“); 2.1.2. ‘configure’ Die Funktion dient der Konfiguration der Schnittstelle und muss sowohl in der Master- als auch der Slave-/Software aufgerufen werden. Bevor diese Funktion nicht aufgerufen wurde, kann keine Kommunikation stattfinden. Die Funktion kann nur einmal aufgerufen werden. Beschreibung der Parameter: Name Type Beschreibung aDeviceList QStringList Hier muss eine Liste der zu koppelnden Slave Name übergeben werden. Anhand der Liste werden die IP-Adressen der Drives ermittelt. Die Reihenfolge bestimmt hierbei auch die Reihenfolge im Master Datentelegramm. Bei Slave-Drives wird eine leere Liste übergeben. aCycleTime U16 Legt die Zykluszeit für den Datenaustausch zwischen Master und Slaves fest (ms). Bei Vorgabe von 0 erfolgt kein automatischer Dokument: PR_0002_32-Drive-Direct-Communication-V1_ger.docx Seite 5 von 15
Erstelldatum Letzte Änderung Erstellt von Reversion 15.10.2020 22.10.20 HP V1 Projekt: PR_0002_32 Titel : SD3-Drive-Direkt-Kommunikation Kapitel : Einbinden des ‚CNetDirect‘ PlugIns zyklischer Betrieb. Dann muss die Übertragung mit der Funktion ‚ writeMasterObject‘ manuell angestoßen werden. aMulticastGroupIP QString Legt die Multicast IP-Adresse fest. Bei „“ wird die Default Gruppen-IP verwendet. Falls sich mehrere Kommunikationsgruppen im selben Netzwerk befinden ist diese hier festzulegen. aMulticastGroupPort U16 Legt die Portnummer für die Kommunikation fest. Diese muss bei Master und Slave identisch sein. Bei 0 wird die Default-Nummer gewählt aDevice U8 Legt die Schnittstelle fest. 0: default 1: eth0 2: eth1 Beispiel: QStringList MyDevices; MyDevices += „Slave-0“; MyDevices += „Slave-1“; piCNetDirect->configure(MyDevices, 100); //-- 100 ms zyklus 2.1.3. ‚findSlaves‘ Die Funktion sucht die in der Konfigurationsliste definierten Drives im Netzwerk und ermittelt ihre IP- Adressen. Zusätzlich werden noch die Objektbeschreibungen für den zyklischen Datenaustausch definiert. Diese Funktion ist nur im Master aufzurufen. Die ‚Slaves‘ werden vom Master automatisch konfiguriert. Beschreibung der Parameter: Name Type Beschreibung aMasterTxObjId u32 Objektnummer des zu sendenden Master-Objekts. aTxObjSize u32 Größe der zum Slave zu übertragenden Datenstruktur aMasterRxObjId u32 Objektnummer des empfangenen Master-Objekts. aRxObjSize u32 Größe der vom Slave empfangen Datenstruktur aSlaveTxObjId u32 Objektnummer des zu sendenden Slave-Objekts. aSlaveRxObjId u32 Objektnummer des empfangen Slave-Objekts. Beispiel: //-- define object ids typedef enum { eID_MasterTxId = OID::eOID_OE_Base, eID_MasterRxId , eID_SlaveTxId , eID_SlaveRxId , eID_last } teOemObjIds; //-- result NT::u32 result; //-- wait slaves available do { //-- sleep a while Dokument: PR_0002_32-Drive-Direct-Communication-V1_ger.docx Seite 6 von 15
Erstelldatum Letzte Änderung Erstellt von Reversion 15.10.2020 22.10.20 HP V1 Projekt: PR_0002_32 Titel : SD3-Drive-Direkt-Kommunikation Kapitel : Einbinden des ‚CNetDirect‘ PlugIns piCRealTime->RT_sleepms(500); //-- check slaves result = piCNetDirect->findSlaves( eID_MasterTxId, sizeof(tsTxObject), eID_MasterRxId, sizeof(tsRxObject), eID_SlaveTxId, eID_SlaveRxId); } while(result != 0); 2.1.4. ‚readObject‘ Die Funktion ermöglicht das Lesen eines Objekts aus einem Antrieb. Die Funktion ist sowohl im Master als auch im Slave nutzbar. Im Slave muss die IP-Adresse des angesprochenen Antriebs bekannt sein. Im Master wird diese aus der Liste der gekoppelten Antriebe entnommen. Beschreibung der Parameter: Name Type Beschreibung aId i32 Gerätenadresse 0..n: Index in Geräteliste oder 0xyyyy: IP-Adresse. 172.16.5.84 = 0xAC100554 aObjId u32 Nummer des zu lesenden Objekts aIndex u32 Index innerhalb des zu lesenden Objekts aSize i32 & Aufruf: Anzahl der zu lesenden Bytes Return: Anzahl der gelesenen Bytes apData void * Speicheradresse der gelesenen Daten aSubId u32 SubID des zu lesenden Objekts aTimeOut i32 Maximale Antwortzeit in ns. Bei 0 wird der Defaultwert genommen. Beispiel: NT::u32 result; NT::u8 buffer[32]; NT::u32 length; length = 1; result = piCNetDirect->readObject(SlaveId,OID::eOID_UT_Inputs08,0,length,&buffer,0); pr(LI,"\nThe inputs of drive: %d are: %02x”, SlaveId,buffer[0]); 2.1.5. ‚writeObject‘ Die Funktion ermöglicht das Schreiben eines Objekts eines Antrieb. Die Funktion ist sowohl im Master als auch im Slave nutzbar. Im Slave muss die IP-Adresse des angesprochenen Antriebs bekannt sein. Im Master wird diese aus der Liste der gekoppelten Antriebe entnommen. Beschreibung der Parameter: Name Type Beschreibung aId i32 Gerätenadresse 0..n: Index in Geräteliste oder 0xyyyy: IP-Adresse. 172.16.5.84 = 0xAC100554 aObjId u32 Nummer des zu schreibenden Objekts aIndex u32 Index innerhalb des zu schreibenden Objekts aSize i32 & Aufruf: Anzahl der zu schreibenden Bytes Return: Anzahl der geschriebenen Bytes apData void * Speicheradresse der zu schreibenden Daten aSubId u32 SubID des zu schreibenden Objekts Dokument: PR_0002_32-Drive-Direct-Communication-V1_ger.docx Seite 7 von 15
Erstelldatum Letzte Änderung Erstellt von Reversion 15.10.2020 22.10.20 HP V1 Projekt: PR_0002_32 Titel : SD3-Drive-Direkt-Kommunikation Kapitel : Einbinden des ‚CNetDirect‘ PlugIns aTimeOut i32 Maximale Antwortzeit in ns. Bei 0 wird der Defaultwert genommen. aPort u32 Portnummer zu dem die Daten geschrieben werden sollen. Hier sollte immer 0 übergeben werden. Beispiel: NT::u32 result; NT::u8 buffer[32]; NT::u32 length; length = 1; buffer[0] = 0x3; result = piCNetDirect->writeObject(SlaveId,OID::eOID_UT_Outputs08,0,length,&buffer,0); pr(LI,"\nWriting %02x to the outputs of drive: %d” ,buffer[0], SlaveId); 2.1.6. ‘writeMasterObject’ Die Funktion löst einen Datenaustausch zwischen Master und den gekoppelten Slaves aus. Die Funktion wird nur im Master ausgeführt und überträgt das Master-Tx-Objekt zu den gekoppelten Antrieben. Die Slaves antworten daraufhin mit ihren Slave-Tx-Objekten. Die Funktion sollte nur aufgerufen werden, wenn der Master nicht in den zyklischen Betrieb geschaltet wurde. Beispiel: piCNetDirect-> writeMasterObject(); 2.1.7. ‘getSlaveSet’ Die Funktion ermittelt ein Bitset der aktiven Slaves. Bit-n entspricht dem Index aus der Antriebsliste Beispiel: NT::u8 slave_set = piCNetDirect->getSlaveSet(); 2.1.8. ‘getNoOfSlavesSet’ Die Funktion ermittelt Anzahl der aktiven Slaves. Diese sollte nach der Konfiguration der Größe der Antriebsliste entsprechen. Beispiel: NT::u8 no_of_slave = piCNetDirect->getNoOfSlaves(); 2.1.9. ‘getDeviceName’ Die Funktion mittelt den Gerätenamen. Beispiel: QString name; Name = piCNetDirect->getDeviceNameObject(); pr(LI,"\nDevice Name: %”,qPrintable(Name)); Dokument: PR_0002_32-Drive-Direct-Communication-V1_ger.docx Seite 8 von 15
Erstelldatum Letzte Änderung Erstellt von Reversion 15.10.2020 22.10.20 HP V1 Projekt: PR_0002_32 Titel : SD3-Drive-Direkt-Kommunikation Kapitel : Datenaustausch 2.1.10. ‘installCallBackFunction’ Die Funktion ermöglicht die Installation eines Event-Handlers. Dieser wird zwischen dem Empfang des Master-Datentelegramms und dem Senden des Slave-Datentelegramms aufgerufen. Beispiel: void myEventHandler() { //-- handle new data . . . //-- set output data . . . } result = piCNetDirect-> installCallBackFunction(myEventHandler); 3. Datenaustausch Beim zyklischen Datenaustausch sendet der Master-Antrieb den Inhalt des Master_Tx_Objekts per Multicast-IP an alle Slave-Antriebe. Diese entnehmen den für sie bestimmten Teil, kopieren diesen in das Slave_Rx_Objekt und antworten mit dem Slave_Tx_Objekt. Der Master empfängt dieses und überträgt die Daten an die entsprechende Position im Master_Rx_Objekt. Die Positionen werden durch die Reihenfolge in der Antriebsliste definiert Dokument: PR_0002_32-Drive-Direct-Communication-V1_ger.docx Seite 9 von 15
Erstelldatum Letzte Änderung Erstellt von Reversion 15.10.2020 22.10.20 HP V1 Projekt: PR_0002_32 Titel : SD3-Drive-Direkt-Kommunikation Kapitel : Datenaustausch SD3-MASTER SD3-SLAVE-n shared-memory shared-memory struct struct { struct { struct struct { { { U8 Wdog; U8 Wdog; U8 Wdog; U8 buffer[n] U8 buffer[n] U8 buffer[n] }; }; } slave_rx; struct struct { { U8 Wdog; U8 Wdog; U8 buffer[n] U8 buffer[n] }; }; struct struct { { U8 Wdog; U8 Wdog; }; U8 buffer[n] NETWORK }; U8 buffer[n] } master_tx; } master_tx; struct { struct struct struct { { { U8 Wdog; U8 Wdog; U8 Wdog; U8 buffer[n] U8 buffer[n] U8 buffer[n] }; } slave_tx; } slave_tx; struct { U8 Wdog; U8 buffer[n] }; struct { U8 Wdog; U8 buffer[n] }; } master_rx; Der Datenaustausch kann mit einer festen Zykluszeit oder manuell über die Funktion writeMasterObject() ausgelöst werden. Die Datenobjekte müssen in allen Antrieben im shared-memory angelegt sein und dieselbe ID haben. Das erste Byte jeder Struktur ist als WatchDog vorgesehen, dieses es wird bei jedem Zyklus inkrementiert vom Master inkrementiert. Der Slave kopiert dieses in seine Antwort. Hierdurch kann die Aktivität kontrolliert werden. Im Master ist das Anlegen der Slave-Datenobjekt nicht erforderlich. Ebenfalls müssen die Master- Datenobjekte nicht im Slave angelegt werden. Dieses hat aber den Vorteil, dass der Kode sowohl im Master als auch im Slave verwendet werden kann In der Testphase hat dieses zusätzlich den Vorteil das der Master mit sich ‚selbst‘ kommunizieren kann. So kann Master- und Slave-Funktionalität in einem Drive getestet werden. Beispiel: Definition der Datenstrukturen #define cBufferSize 32 #define cMemorySize 1024 typedef struct { union Dokument: PR_0002_32-Drive-Direct-Communication-V1_ger.docx Seite 10 von 15
Erstelldatum Letzte Änderung Erstellt von Reversion 15.10.2020 22.10.20 HP V1 Projekt: PR_0002_32 Titel : SD3-Drive-Direkt-Kommunikation Kapitel : Datenaustausch { NT::u8 buffer[cBufferSize]; struct { NT::u8 watchDog; NT::u8 cmd; }; }; } tsTxObject; typedef tsTxObject tsTxObjects[CNetDirect::cNoOfSlaves]; typedef struct { union { NT::u8 buffer[cBufferSize]; struct { NT::u8 watchDog; NT::u8 state; }; }; } tsRxObject; typedef tsRxObject tsRxObjects[CNetDirect::cNoOfSlaves]; //!
Erstelldatum Letzte Änderung Erstellt von Reversion 15.10.2020 22.10.20 HP V1 Projekt: PR_0002_32 Titel : SD3-Drive-Direkt-Kommunikation Kapitel : Datenaustausch //------------------------------------------------------------------- //-- master-out. tsTxObjects[CNetDirect::cNoOfSlaves] //------------------------------------------------------------------- //-- Group apODict->writeStartElement("Group"); apODict->writeTextElement("Name","MA_TX"); apODict->writeStartElement("Dimension"); apODict->writeAttribute("elementsize", QString("%1").arg(sizeof(NT::u32))); apODict->writeAttribute("count", QString("%1").arg(CNetDirect::cNoOfSlaves)); //-- first element is watchdog counter result += apODict->writeObject("CNE_MA_TX_WatchDog",Id++, "UNIT_U8", aOffset+offsetof(tsCNetDirectExample_ACT, TxObjects[0].watchDog),0); //-- second element is command byte sEnum.clear(); sEnum.insert(0, "cmd_0"); sEnum.insert(1, "cmd_1"); sEnum.insert(2, "cmd_2"); result += apODict->writeObject("CNE_MA_TX_Cmd", Id++, "UNIT_U8", aOffset+offsetof(tsCNetDirectExample_ACT, TxObjects[0].cmd),0, NULL, &sEnum); //-- fill in own objects //-- ... //-- show full object as array of byte result += apODict->writeObject("CNE_MA_TX_Buffer", eID_MasterTxId, "UNIT_U8", aOffset+offsetof(tsCNetDirectExample_ACT, TxObjects[0].buffer),cBufferSize); apODict->writeEndElement(); // Dimension //-- End Group apODict->writeEndElement(); // Group MA_TX //------------------------------------------------------------------- //-- master-in object. tsRxObjects[CNetDirect::cNoOfSlaves] //------------------------------------------------------------------- //-- Group apODict->writeStartElement("Group"); apODict->writeTextElement("Name","MA_RX"); apODict->writeStartElement("Dimension"); apODict->writeAttribute("elementsize", QString("%1").arg(sizeof(NT::u32))); apODict->writeAttribute("count", QString("%1").arg(CNetDirect::cNoOfSlaves)); //-- first element is watchdog counter result += apODict->writeObject("CNE_MA_RX_WatchDog",Id++, "UNIT_U8", aOffset+offsetof(tsCNetDirectExample_ACT, RxObjects[0].watchDog),0); //-- second element is command byte sBitSet.clear(); sBitSet.insert( 0, NGen3Config::SBit(QString("flag_0"), false)); sBitSet.insert( 1, NGen3Config::SBit(QString("flag_1"), false)); sBitSet.insert( 2, NGen3Config::SBit(QString("flag_2"), false)); result += apODict->writeObject("CNE_MA_RX_State", Id++, "UNIT_U8", aOffset+offsetof(tsCNetDirectExample_ACT, RxObjects[0].state),0, &sBitSet); //-- fill in ouwn objects //-- ... //-- show full object as array of byte result += apODict->writeObject("CNE_MA_RX_Buffer", eID_MasterRxId, "UNIT_U8", aOffset+offsetof(tsCNetDirectExample_ACT, RxObjects[0].buffer),cBufferSize); Dokument: PR_0002_32-Drive-Direct-Communication-V1_ger.docx Seite 12 von 15
Erstelldatum Letzte Änderung Erstellt von Reversion 15.10.2020 22.10.20 HP V1 Projekt: PR_0002_32 Titel : SD3-Drive-Direkt-Kommunikation Kapitel : Datenaustausch apODict->writeEndElement(); // Dimension //-- End Group apODict->writeEndElement(); // Group MA_RX //------------------------------------------------------------------- //-- slave-out. tsTxObject //------------------------------------------------------------------- //-- Group apODict->writeStartElement("Group"); apODict->writeTextElement("Name","SL_TX"); //-- first element is watchdog counter result += apODict->writeObject("CNE_SL_TX_WatchDog",Id++, "UNIT_U8", aOffset+offsetof(tsCNetDirectExample_ACT, TxObject.watchDog),0); //-- second element is command byte sEnum.clear(); sEnum.insert(0, "cmd_0"); sEnum.insert(1, "cmd_1"); sEnum.insert(2, "cmd_2"); result += apODict->writeObject("CNE_SL_TX_Cmd", Id++, "UNIT_U8", aOffset+offsetof(tsCNetDirectExample_ACT, TxObject.cmd),0, NULL, &sEnum); //-- fill in own objects //-- ... //-- show full object as array of byte result += apODict->writeObject("CNE_SL_TX_Buffer", eID_SlaveTxId, "UNIT_U8",aOffset+offsetof(tsCNetDirectExample_ACT, TxObject.buffer),cBufferSize); //-- End Group apODict->writeEndElement(); // Group SL_TX //------------------------------------------------------------------- //-- slave-in object. tsRxObject //------------------------------------------------------------------- //-- Group apODict->writeStartElement("Group"); apODict->writeTextElement("Name","SL_RX"); //-- first element is watchdog counter result += apODict->writeObject("CNE_SL_RX_WatchDog",Id++, "UNIT_U8", aOffset+offsetof(tsCNetDirectExample_ACT, RxObject.watchDog),0); //-- second element is command byte sBitSet.clear(); sBitSet.insert( 0, NGen3Config::SBit(QString("flag_0"), false)); sBitSet.insert( 1, NGen3Config::SBit(QString("flag_1"), false)); sBitSet.insert( 2, NGen3Config::SBit(QString("flag_2"), false)); result += apODict->writeObject("CNE_SL_RX_State", Id++, "UNIT_U8", aOffset+offsetof(tsCNetDirectExample_ACT, RxObject.state),0, &sBitSet); //-- fill in own objects //-- ... //-- show full object as array of byte result += apODict->writeObject("CNE_SL_RX_Buffer", eID_SlaveRxId, "UNIT_U8", aOffset+offsetof(tsCNetDirectExample_ACT, RxObject.buffer),cBufferSize); //-- End Group apODict->writeEndElement(); // Group SL_RX Dokument: PR_0002_32-Drive-Direct-Communication-V1_ger.docx Seite 13 von 15
Erstelldatum Letzte Änderung Erstellt von Reversion 15.10.2020 22.10.20 HP V1 Projekt: PR_0002_32 Titel : SD3-Drive-Direkt-Kommunikation Kapitel : Beispiel-PlugIn //-- union array ---------------------------------------------------- result += apODict->writeObject("CNetDirectExample_ALL", Id++, "UNIT_U8", aOffset+offsetof(tsCNetDirectExample_ACT, AllData), cMemorySize); Beispiel: Übergabe der Objektinformationen //-- find slaves result = piCNetDirect->findSlaves( eID_MasterTxId, sizeof(tsTxObject), eID_MasterRxId, sizeof(tsRxObject), eID_SlaveTxId, eID_SlaveRxId); 4. Beispiel-PlugIn Für den einfachen Start existiert ein Beispiel-PlugIn. Dieses kann als Basis für ein eigenes PlugIn verwendet werden. Dieses fungiert als Master-Antrieb und bindet sich selbst als Slave-Antrieb ein. So kann einfach die Funktionsweise erforscht werden. Hierfür muss dieses ‚geklont‘ werden. Nach dem kompilieren müssen sie noch ihr neues PlugIn in das Projekt aufnehmen und das Objektverzeichnis neu erstellen. Das Beispiel erzeugt eine eigene Parameterdatei. Diese sollte mit dem ‚DRIVEMASETER-3‘ in das Projekt aufgenommen werden. In diesem Fall würde die Datei ‚CMyNetTest‘ heißen. Dokument: PR_0002_32-Drive-Direct-Communication-V1_ger.docx Seite 14 von 15
Erstelldatum Letzte Änderung Erstellt von Reversion 15.10.2020 22.10.20 HP V1 Projekt: PR_0002_32 Titel : SD3-Drive-Direkt-Kommunikation Kapitel : Beispiel-PlugIn In diese Datei müssen der Gerätename und die Namen der zu koppelnden Drives eingetragen werden. Bei den Slaves bleibt die SLAVE-Liste leer. Eine Master-Konfiguration könnte folgendermaßen aussehen. Hier ist ein Master mit sich selbst als Slave und einem zusätzlichem Slave parametriert. Eine Slave-Konfiguration könnte folgendermaßen aussehen. Dokument: PR_0002_32-Drive-Direct-Communication-V1_ger.docx Seite 15 von 15
Sie können auch lesen