Modbus-Stack - Anwendungsanleitung auf Basis von Modmnbus

kostenlosKostenloses technisches Material

Dieser Inhalt ist direkt lesbar und eignet sich für das Grundlagenlernen und die Suche.

Modbus-Stack - Anwendungsanleitung auf Basis von Modmnbus

Kapitel 1 Vorwort

Modbus ist das weltweit erste Busprotokoll, das in der Industrie eingesetzt wird. Modbus-Kommunikation ist in der industriellen Netzwerkkommunikation sehr weit verbreitet und bequem, wird von allen willkommen.

1.1 Gründe schreiben

Das Modbus-Kommunikationsprotokoll wird in unseren eigenen Produkten und Projekten schon immer wieder verwendet. Jedes Mal entwickeln die Benutzer selbst oder suchen im Internet nach dem erforderlichen Quellcode. Jede Anwendung ist jedoch anders und erfordert jede Menge Wiederholung. Und die enge Kombination von Protokollstationen wie Anwendungssoftware verursacht auch etwas Verwirrung im Code. Es war also immer der Wunsch, einen allgemeineren Protokollstack zu entwickeln, der in späteren Projekten wiederverwendet werden kann, ohne jedes Mal schreiben zu müssen. Jetzt nutzt das Projekt die Gelegenheit, um einen eigenen Modbus-Protokollstack zu entwickeln.

1.2 Urheberrecht erklärt

Diese Software wurde ursprünglich für unseren eigenen Gebrauch entwickelt, ist aber jetzt Open Source auf GitHub. Jeder kann also kopieren, verbreiten und verwenden, und es gibt keine Einschränkungen für das persönliche Lernen oder kommerzielle Anwendungen. Die Anwendungsmethoden und Änderungen sind willkommen zu diskutieren, aber wir sind nicht verantwortlich für irgendwelche Probleme, die während der Nutzung auftreten.

Der Software - Qu ell code und seine Besch reib ungen sind kosten los auf Git Hub her unter gela den : https ://github.com/foxclever/Modbus

1.3 Aktualisierung der Aufzeichnungen

In der vorherigen Version haben wir sowohl Modbus RTUs auf serieller Links als auch Modbus TCPs auf Ethernet implementiert. In dieser Version haben wir den Modbus ASCII-Modus auf Basis von seriellen Verbindungen hinzugefügt. Es wurden auch Fehler behoben, die in der vorherigen Version bekannt waren.

Das Software-Design und die Aktualisierung dieses Dokuments sind wie folgt dokumentiert:

VersionUpdate-AnweisungenV1.0.0Autor
DatumErste Version, 5 Kapitel, die wichtigsten API-Funktionen beschreiben.Munn8. Mai 2015
V1.1.0Kapitel 6 und 7 hinzugefügtMunan23. Dezember 2016
V1.1.5Änderungen an den meisten Kapiteln 3, 4 und 5Munan20. Februar 2018
V2.0.0Hinzufügung von ASCII-Inhalten und Behebung bekannter ProblemeMunan18. September 2018
V2.1.0Hinzufügung von Klassenkapazität für RTU - und ASCII-Multi - Master-Betriebs; Hinzufügung von TCP-Client - Multi-Segment - Operationen.Munan29. April 2019

Kapitel 2, PDU-Funktion

In der Anwendung der Dateneinheit verarbeiten wir die grundlegenden Nachrichtenformate der Modbus-Datenkommunikation, die im Grunde allgemein sind, die aktuelle Version unterstützt nur Funktionscodes 01, 02, 03, 04, 05, 06, 15, 16.

4.1.1 Funktionscode aufzählen

ReadCoilStatus = 0x01 und / * Read-Coil - Status (Zustand, in dem mehrere Ausgangsbits gelesen werden) * /

typedef enum {

ReadCoilStatus = 0x01 und / * Lesen-Spule - Zustand (Zustand, in dem mehrere Ausgangsbits gelesen werden) * /

ReadInputStatus = 0x02, / * Eingabe-Bit - Status lesen (Zustand mehrerer Eingabe-Bit lesen) * /

ReadHoldRegister = 0x03 und / * Read Hold Register (Lesen von mehreren Hold Registers) * /

ReadInputRegister = 0x04, / * Eingangsregister lesen (Werte aus mehreren Eingangsregistern lesen) * /

WriteSingleCoil = 0x05 und / * Einzelspule erzwungen (Zustand eines einzelnen Ausgangsbits erzwungen) * /

WriteSingleRegister = 0x06, / * Vorgefertigte Einzelregister (Ein Register ist ein Wert festgelegt) * /

WriteMultipleCoil = 0x0f, / * Erzwingen mehrerer Spulen (Zustand von mehreren Ausgangsbits erzwungen) * /

WriteMultipleRegister = 0x10 / * Vorgefertigte mehrere Register (Einstellungen für mehrere Registerwerte) * /

} FunctionCode;

4.1.2, Modbus-Status - Aufzählung

/ * Definiert den Fehlercode beim Erhalt von Befehlserkennungfehlern * /

typedef enum{

MB _ OK = 0x00,

InvalidFunctionCode = 0x01, / / Ungültiger Funktionscode

IllegalDataAddress = 0x02, / / Illegale Datenadresse

IllegalDataValues = 0x03, / / Illegaler Datenwert oder Bereich

OperationFail = 0x04

} ModbusStatus;

4.1.3, Stationsinformationsstruktur

/ * Definieren Sie die Informationen, die übertragen werden sollen, um auf die Slave-Station (Server) zuzugreifen * /

typedef struct{

uint8_t UnitID;

FunktionCode FunktionCode;

uint16_t beginnendAddresse;

uint16_t quantity;

} ObjAccessInfo;

Definieren Sie die verschiedenen Informationen, die von der Station (Server) zugegriffen werden, einschließlich der Stationsnummer, Funktionscode, Startadresse und Anzahl.

4.1.4 Erstellen von Zugriffsfunktionen von PDU-Einheiten

/ * Generieren Sie Befehle zum Lesen und Schreiben von Objekten von RTU-Slaven (TCP-Server) als RTU-Master (TCP-Client) * /

uint16_t erzeugenReadWriteCommand(ObjAccessInfo objInfo, bool * statusList, uint16_t * registerList, uint8_t commandBytes[]);

Parameter:ObjAccessInfo objInfo, Slave-Objekt, auf das zugegriffen wird

bool * statusList, Datenliste von Statusvolumen-Objekten, die nach unten geschrieben werden müssen

uint16_t * registerList, Datenliste von Registervolumen-Objekten, die nach unten geschrieben werden müssen

uint8_t commandBytes[], generierte Zugriffskommandos

gibt einen Wert zurück:Die Länge des generierten Zugriffsbefehls, in Bytes.

4.1.5, Resolvieren von gelesenen Daten

/ * Resolvieren von Daten vom Host (Client) vom Server gelesen * /

void TransformClientReceivedData (uint8_t * receivedMessage, uint16_t quantity, bool * statusList, uint16_t * registerLister);

Parameter:uint8_t * receivedMessage, empfangene Nachricht

uint16_t quantity, Anzahl der gelesenen Objekte

bool * statusList, Liste der gelesenen Statusobjekte

uint16_t * registerLister, die aufgelöste Datenliste von gelesenen Registerobjekten

gibt den Wert zurück:无

4.1.6 Erstellen von Antwortnachrichten für Lese-Daten - Befehle von der Station

/ * Erstellen von Antwort für Lese-Zugriff von der Master-Station, einschließlich 0x01, 0x02, 0x03, 0x04 Funktionscode, die Länge der entsprechenden Informationen zurückgeben * /

uint16_t GenerateMasterAccessRespond (uint8_t * receivedMesasage, bool * statusList, uint16_t * registerList, uint8_t * respondBytes);

Parameter:uint8_t * receivedMesasage, empfangene Master-Leseoperationsnachricht

bool * statusList, Liste der gelesenen Slave-Status - Objekte

uint16_t * registerList, gelesenes Slave-Register - Objekt-Datenliste

uint8_t * respondBytes, erzeugte Slave-Antwort - Nachricht

gibt den Wert zurück:Die Länge der Antwortnachricht in Bytes

4.1.7, Funktionscode-Prüffunktion

/ * Funktionscode-Prüfungsfunktion * /

ModbusStatus CheckFunctionCode (FunctionCode fc);

Parameter:FunctionCode fc, Funktionscode, durch Aufzählung definiert

Rückgabewert:Modbus-Betriebszustand, durch Aufzählung definiert

4.1.8, TCP-Client - Befehl-Funktion erzeugen

/ / Befehl zum Lesen und Schreiben von Serverobjekten erzeugen

uint16_t SyntheticReadWriteTCPServerCommand (ObjAccessInfo objInfo, bool * statusList, uint16_t * registerList, uint8_t * commandBytes);

Parameter:ObjAccessInfo objInfo, TCP-Server Zugriffsinformationsobjekt

bool * statusList, Schreiben einer Liste von Objektdaten für den Serverstatus

uint16_t * registerList, Schreib-Server - Register-Menge - Objekt-Datenliste

uint8_t * commandBytes, erzeugte Befehlsnachricht

gibt den Wert zurück:Länge des Befehls in Bytes

4.1.9, Erstellen einer TCP-Server - Antwort-Funktion

/ * Synthetische Antwort auf einen Serverzugriff * /

uint16_t SyntheticServerAccessRespond (uint8_t * receivedMesasage, bool * statusList, uint16_t * registerList, uint8_t * respondBytes);

Parameter:uint8_t *receivedMesasage, empfangene Client-Befehl - Nachricht

bool *statusList, Lesen der Status-Menge - Objekt-Datenliste des TCP-Servers

uint16_t * registerList, Lesen der Register-Menge - Objekt-Datenliste des TCP-Servers

uint8_t * respondBytes, generierte Antwort-Informations - Nachricht

als Antwort auf den Client-Befehl gibt Wert zurück:Antwort-Informations - Nachrichten-Länge in Bytes

4.1.10, CRC-Prüfung

/ * Überprüfen Sie, ob die empfangenen Informationen korrekt sind * /

bool CheckRTUMessageIntegrity (uint8_t * message, uint8_t length);

Parameter:uint8_t * message, Datennachricht zu überprüfen

uint8_t length, Datennachricht Länge in Bytes

Rückgabewert:gibt ein Zustandssignal zurück, das überprüft, ob es erfolgreich ist

4.1.11, erzeugt eine Master-Befehl - Funktion, die RTU-Sklaven - Stationen lesen und schreiben kann

/ * Generiert einen Befehl zum Lesen und Schreiben von Slave-Datenobjekten mit einer Länge von 2 Checkbytes * /

uint16_t SyntheticReadWriteSlaveCommand (ObjAccessInfo slaveInfo, bool * statusList, uint16_t * registerList, uint8_t * commandBytes);

Parameter:ObjAccessInfo slaveInfo, Zugriff auf ein Informationsobjekt von der Station, definiert durch die Struktur

bool * statusList, Schreiben von Datenlisten von Statusvolumen von der Station

uint16_t * registerList, Schreiben von Datenlisten von Statusvolumen von der Station

uint8_t * commandBytes, Die generierte Zugriffsbefehlmeldung

gibt den Wert zurück:Länge des Zugriffsbefehls in Bytes

4.1.12, Erstellen von Slave-Antwort - Nachrichten

/ * Erstellen von Slave-Antwort - Nachrichten von Master-Stationen * /

uint16_t SyntheticSlaveAccessRespond (uint8_t * receivedMesasage, bool * statusList, uint16_t * registerList, uint8_t * respondBytes);

Parameter:uint8_t * receivedMesasage,

bool * statusList,

uint16_t * registerList,

uint8_t * respondBytes,

gibt den Wert zurück: Die Länge der vongenerierten Antwortnachricht in Bytes

4.1.13, LRC-Check - Check-Funktion

/ * Beurteilen, ob die ASCII-Daten korrekt sind * /

CheckASCIIMessageIntegrity (uint8_t * usMsg, uint16_t usLength)

Parameter:uint8_t * usMsg, Liste der Nachrichten, die überprüft werden sollen, hexadezionale Daten

uint16_t usLength, die Länge der Liste der Nachrichten, die überprüft werden sollen

gibt den Wert zurück:Prüft das Ergebnis, gibt „true" zurück, gibt „false" zurück

4.1.14 Konvertieren von ASCII-Nachrichten in Hexadezimal

/ * Konvertieren von empfangenen ASCII-Nachrichten in Hexadezimal * /

bool CovertAsciiMessageToHex (uint8_t * aMsg, uint8_t * hMsg, uint16_t aLen);

Parameter:uint8_t * aMsg, ASCII-Code - Informationen

uint8_t * hMsg, umgewandelte hexadezimal-Informationen

uint16_t aLen, Länge der ASCII-Code - Informationen

gibt den Wert zurück:ist die Umwandlung korrekt, die Umwandlung gibt „true" zurück, andernfalls gibt es „false" zurück

4.1.15, generieren Sie ASCII-Slaven - Befehlfunktion

/ * generieren Sie Befehle für die Slave-Station, die auf die Master-Station angewendet werden, Enthält Check-Sum - Start-End - Zeichen * /

uint16_t SyntheticReadWriteAsciiSlaveCommand(ObjAccessInfo slaveInfo, bool * statusList, uint16_t * registerList, uint8_t * commandBytes)

Parameter:ObjAccessInfo slaveInfo, Zugriffsinformationsobjekt von der Station, definiert durch die Struktur

bool * statusList, Schreiben von Stationsstatus-Volumen - Datenliste

uint16_t * registerList, Schreiben von Stationsregister-Volumen - Datenliste

uint8_t * commandBytes, erzeugte Zugriff Befehlmeldung

gibt den Wert zurück:Länge des Zugriffsbefehls in Bytes

4.1.16 Funktion, um ASCII-Antworten für Master-Befehle von Slaves zu generieren

/ * Erstellen einer Antwort für Master-Befehle, die an Slaves angewendet wird * /

uint16_t SynthetischAsciiSlaveAccessRespond (uint8_t * receivedMessage, bool * statusList, uint16_t * registerList, uint8_t * respondBytes)

Parameter:uint8_t * receivedMesasage, Akzeptierte Nachricht zum Host

bool * statusList, Liste der Statuswerte, die vom Host-Befehl gelesen werden sollen

uint16_t * registerList, Master-Befehl Liste der zu lesen Registergrößen

uint8_t * respondBytes, generierte Antwortnachrichten

Rückgabewert:Die Länge der generierten Antwortnachrichten in Bytes

Kapitel 3, Anwendung der Verpackungsfunktion

Für die Anwendungsebene Encapsulation, wir kapseln nur RTU Master-Anwendung, RTU Slave-Anwendung, TCP-Client - Anwendung und TCP-Server - Anwendung vier Kategorien.

4.2.1, RTU-Master - und Slave-Objekte

/ * Definieren des Typs von RTU-Slaven - Objekten, auf die zugegriffen wird * /

typedef struct AccessedRTUSlaveType{

uint8_t stationAddresse; / / Station Adresse

uint8_t cmdOrder; Position des aktuellen Befehls in der Befehlsliste

uint16_t Befehlsnummer; / / Gesamtzahl der Befehle in der Befehllliste

uint8_t (* pReadCommand) [8] Lesebefehlslliste

uint8_t * pLastCommand; Der letzte Befehl, der gesendet wurde.

uint32_t FlagPresetCoil; / / Voreinstelltes Spule-Steuerungs - Flagge

uint32_t flagPresetReg; / / Vorinstelltes Register-Steuerungs - Flag-Bit

} RTUAccessedSlaveType;

/ * Definiert den lokalen RTU-Master - Objekttyp * /

typedef struct LocalRTUMasterType{

uint32_t FlagWriteSlave [8]; // Schreiben Sie ein Stationssteuerungsflag für maximal 256 Stationen, das der Stationsadresse entspricht.

uint16_t slaveNumber; Anzahl der Stationen in der Stationsliste

uint16_t readOrder; Der aktuelle Standort in der Liste der Stationen

RTUAccessedSlaveType * pSlave; Von der Station Liste

UpdateCoilStatusType pUpdateCoilStatus; / / Aktualisieren Sie die Funktion der Spule

UpdateInputStatusType pUpdateInputStatus; / / Aktualisieren der Eingabe-Status - Funktion

UpdateHoldRegisterType pUpdateHoldRegister; / / Aktualisieren der Aufbewahrungsregister-Größe Funktion

UpdateInputResgisterTyp pUpdateInputResgister; / / Aktualisieren Sie die Eingabe-Register - Funktion

} RTULocalMasterType;

4.2.2, RTU-Master - Objektinitialisierungsfunktion

/ * Initialisieren Sie RTU-Master - Objekt * /

void InitializeRTUMasterObject (RTULocalMasterType * master, uint16_t slaveNumber, RTUAccessedSlaveType * pSlave, UpdateCoilStatusType pUpdateCoilStatus, UpdateInputStatusType pUpdateInputStatus, UpdateHoldingRegisterType pUpdateHoldingRegister, UpdateInputResgisterType pUpdateInputResgister);

Parameter:RTULocalMasterType * master, Lokal Master-Objekt

uint16_t slaveNumber, Anzahl Slave-Stationen

RTUAccessedSlaveType * pSlave, Slave-Liste

UpdateCoilStatusType pUpdateCoilStatus, Aktualisieren Sie den Funktionszeiger für die Spulevolumen

UpdateInputStatusType pUpdateInputStatus, Aktualisieren Sie den Funktionszeiger für die Statusvolumen

UpdateHoldingRegisterType pUpdateHoldingRegister, Aktualisieren Sie den Funktionszeiger für die Haltungsregistervolumen.

UpdateInputResgisterType pUpdateInputResgister, Aktualisieren Eingabe-Register - Quantität-Funktion Zeiger

Rückgabewert:Kein Rückgabewert

4.2.3, Erstellen von RTU-Master - Station-Zugriff Befehl-Funktion

/ * Erstellen von Befehlen für den Zugriff auf den Server * /

uint16_t CreateAccessSlaveCommand (ObjAccessInfo objInfo, void * dataList, uint8_t * commandBytes);

Parameter:ObjAccessInfo objInfo, Zugriff auf ein Informationsobjekt von der Station, definiert durch die Struktur

void * dataList, Schreiben von Datenliste von Station-Objekten

uint8_t * commandBytes, die generierte Befehlmeldung

gibt einen Wert zurück:Die Länge des generierten Zugriffsbefehls in Bytes

4.2.4, RTU-Master - Antwortfunktion des Slaves

/ * Die empfangenen Server-Antwortinformationen * /

void ParsingSlaveRespondMessage (uint8_t * receivedMessage, uint8_t * command);

Parameter:uint8_t * recievedMessage, erhaltenen Rückgabe

uint8_t * command, der an die Befehlslliste der Slave-Station

ausgegeben wurde, um den Wert zurückzugeben:无

4.2.5, RTU-Master - Station löst die Befehl-Matching - Funktion von Slave-Nachricht zurückgegeben

/ * Nach Erhalt der Rückmeldung wird entschieden, ob es sich um die Rückmeldung eines Befehls in der Send-Befehlsliste handelt * /

int FindCommandForReceivedMessage(uint8_t * receivedMessage,uint8_t (* commandList) [8],uint16_t commandNumber);

Parameter:uint8_t * recievedMessage, Empfangene Rückgabe von Slave-Stationen

uint8_t (* commandList) [8], eine Liste von Befehlen, die von der Hauptstation ausgegeben wurden

uint16_t commandNumber, Anzahl der gespeicherten Befehle

Rückgabewert:Gibt die Position des übereinstimmenden Befehls zurück, wenn es keine Übereinstimmung gibt, gibt "-1" zurück

Diese Funktion wird nur in der RTU-Master - Station verwendet, wenn die Datenmenge groß und häufig aufgreift, oder wenn mehrere Slaves aufgreift werden, um die korrekte Datenanalyse zu erleichtern.

4.2.6, die RTU-Funktion

/ * analysiert die empfangenen Informationen und gibt die synthetische Antwort und die Bytelänge der Informationen zurück, indem sie die Rückruffunktion * /

uint16_t ParsingMasterAccessCommand (uint8_t * receivedMesasage, uint8_t * respondBytes, uint16_t rxLength);

Parameter:uint8_t *receivedMesasage, empfangene Nachricht

uint8_t * respondBytes, erzeugen Sie eine Antwort Nachricht

uint16_t rxLength, die Länge der empfangenen Nachricht

gibt den Wert:Die Länge der generierten Antwortinformationen in Bytes

4.2.7, TCP-Client - und TCP-Server - Objekte

/ * Definieren Sie den Typ des aufgerufenen TCP-Server - Objekts * /

typedef struct AccessedTCPServerType{

Union {

uint32_t IPNumber;

uint8_t ipSegment [4];

ipAdresse; / / IP-Adresse des Servers

uint32_t FlagPresetServer; / / Schreiben des Server-Anforderungs - Flaggs

Schreiben Sie eine Bewertung für WritedCoilListHeadNode pWritedCoilHeadNode / / Liste der schreibbaren Spulen

WritedRegisterListHeadNode pWritedRegisterHeadNode; / / Liste der schreibbaren Aufbewahrungsregister

struct AccessedTCPServerType * pNextNode; Der nächste TCP-Server

} TCPAccessedServerType;

/ * Definiert den Header-Typ der Serverkette * /

typedef struct ServerListHeadType {

TCPAccededServerType * pServerNode; / / Serverknotenzeiger

uint32_t ServerNumber; / / Anzahl der Server

}ServerListHeadNode;

/ * Definiert den lokalen TCP-Client - Objekttyp * /

typedef struct LocalTCPClientType{

uint32_t Transaktion; / / Transaktionsbezeichner

uint16_t cmdNumber; Anzahl der Befehle, die vom Server gelesen werden

uint16_t cmdOrder; Der aktuelle Standort in der Liste der Stationen

uint8_t (* pReadCommand) [12]; Lesebefehlslliste

ServerListHeadNode ServerHeadNode; / / Kopfknoten der verknüpften Liste von Serverobjekten

UpdateCoilStatusType pUpdateCoilStatus; / / Aktualisieren Sie die Funktion der Spulenmenge

UpdateInputStatusType pUpdateInputStatus; / / Aktualisieren der Eingabe-Status - Funktion

UpdateHoldRegisterType pUpdateHoldRegister; / / Aktualisieren der Aufbewahrungsregister-Größenfunktion

UpdateInputResgisterTyp pUpdateInputResgister; / / Aktualisieren Sie die Eingabe-Register - Funktion

} TCPLocalClientType;

4.2.8, TCP-Client - Objektinitialisierungsfunktion

/ * TCP-Client - Objekt initialisieren * /

void InitializeTCPClientObject(TCPLocalClientType * client, uint16_t cmdNumber, uint8_t (* pReadCommand)[12],UpdateCoilStatusType pUpdateCoilStatus,UpdateInputStatusType pUpdateInputStatus,UpdateHoldingRegisterType pUpdateHoldingRegister,UpdateInputResgisterType pUpdateInputResgister);

Parameter:TCPLocalClientType * client, Clientobjekt

uint16_t cmdNumber, Anzahl der Befehle zum Lesen

uint8_t (* pReadCommand) [12], Leseliste von Befehlen

UpdateCoilStatusType pUpdateCoilStatus, Aktualisieren Sie den Funktionszeiger für die Anzahl der Spulen

UpdateInputStatusType pUpdateInputStatus, Aktualisieren Status-Menge - Funktionszeiger

UpdateHoldingRegisterType pUpdateHoldingRegister, Aktualisieren Halte-Register - Funktionszeiger

UpdateInputResgisterType pUpdateInputResgister, Aktualisieren Eingabe-Register - Menge - Funktionszeiger

Rückgabewert:Kein Rückgabewert

4.2.9, Erstellen eines TCP-Client - Zugriffserver-Befehls

/ * Erstellen eines Zugriffserver-Befehls * /

uint16_t CreateAccessServerCommand(ObjAccessInfo objInfo, void * dataList, uint8_t * commandBytes);

Parameter:ObjAccessInfo objInfo, Zugriffserver-Informationsobjekt

void * dataList, Datenliste für Serverobjekte

uint8_t * commandBytes, erzeugte Zugriffserver-Befehlsmeldung

gibt den Wert zurück:Länge des Zugriffsbefehls, in Bytes

4.2.10, TCP-Client - Resolver-Server - Funktion zur Rückgabe von Informationen

/ * Resolviert die empfangenen Informationen des Servers * /

Void ParsingServerRespondMessage (uint8_t * recievedMessage);

Parameter:uint8_t * recievedMessage, Empfangene Serverantwort

gibt den Wert zurück:无

4.2.11, TCP-Server - Parsing-Client - Befehlfunktion

/ * Parsiert die empfangenen Informationen und gibt die Länge des Antwortbefehls zurück * /

uint16_t ParsingClientAccessCommand(uint8_t * receivedMessage, uint8_t * respondBytes);

Parameter:uint8_t * receivedMessage, empfangener Clientzugriff

uint8_t * respondBytes, erzeugte Serverantwort

gibt den Wert zurück:Die Länge der generierten Antwortnachricht in Bytes

4.2.12, ASCII-Master - und Slave-Objekte

/ * Definieren des aufgeregebenen ASCII-Slave - Objekttyps * /

typedef struct AccessedASCIISlaveType {

uint8_t stationAddresse; / / Adresse der Station

uint8_t cmdOrder; Position des aktuellen Befehls in der Befehlsliste

uint16_t Befehlsnummer; / / Gesamtzahl der Befehle in der Befehllliste

uint8_t (* pReadCommand) [17]; Lesebefehlslliste

uint8_t * pLastCommand; / / Letzter gesendete Befehl

uint32_t FlagPresetCoil; / / Voreinstelltes Spule-Steuerungs - Flag-Bit

uint32_t flagPresetReg; / / Voreinstelltes Register-Steuerungs - Flag-Bit

} AsciiAccessedSlaveType;

/ * Definiert den lokalen ASCII-Master - Objekttyp * /

typedef struct LocalASCIIMasterType{

uint32_t FlagWriteSlave [8]; // Schreiben Sie ein Stationssteuerungsflag für maximal 256 Stationen, das der Stationsadresse entspricht.

uint16_t slaveNumber; Anzahl der Stationen in der Stationsliste

uint16_t readOrder; / / Aktuelle Position des Slaves in der Liste der Slaves

AsciiAccessedSlaveType * pSlave; / / Liste von Slaves

UpdateCoilStatusType pUpdateCoilStatus; / / Aktualisieren Sie die Funktion der Spule

UpdateInputStatusType pUpdateInputStatus; / / Aktualisieren der Eingabe-Status - Funktion

UpdateHoldRegisterType pUpdateHoldRegister; / / Aktualisieren der Aufbewahrungsregister-Größe Funktion

UpdateInputResgisterTyp pUpdateInputResgister; / / Aktualisieren der Eingangsregisterfunktion

} AsciiLocalMasterType;

4.2.13, ASCII-Master - Objektinitialisierungsfunktion

/ * RTU-Master - Objekt initialisieren * /

void InitializeASCIIMasterObject (AsciiLocalMasterType * master, uint16_t slaveNumber, AsciiAccessedSlaveType * pSlave, UpdateCoilStatusType pUpdateCoilStatus, UpdateInputStatusType pUpdateInputStatus, UpdateHoldingRegisterType pUpdateHoldingRegister, UpdateInputResgisterType pUpdateInputResgister);

Parameter:AsciiLocalMasterType * master, ASCII-Master - Objekt

uint16_t slaveNumber, Anzahl der Slaves

AsciiAccessedSlaveType * pSlave, Liste der Slaves

UpdateCoilStatusType pUpdateCoilStatus, Aktualisieren Sie die Rückruffunktion für die Spule

UpdateInputStatusType pUpdateInputStatus, Aktualisieren Sie die Rückruffunktion für die Zustandsmenge

UpdateHoldingRegisterType pUpdateHoldingRegister, Aktualisieren Sie die Rückruffunktion für die Aufbewahrungsregistermenge

UpdateInputResgisterType pUpdateInputResgister, Aktualisieren Sie die Rückruffunktion für die Eingabe-Registermenge

Rückgabewert:Kein Rückgabewert

4.2.14, Erstellen von Befehlen für den Zugriff auf ASCII-Slaven

/ * Erstellen von Befehlen für den Zugriff auf ASCII-Slaven * /

uint16_t CreateAccessAsciiSlaveCommand (ObjAccessInfo objInfo, void * dataList, uint8_t * commandBytes);

Parameter:ObjAccessInfo objInfo, Zugriff auf ein Informationsobjekt von der Station, durch die Struktur definiert

void * dataList, Schreiben einer Datenliste von einem Stationobjekt

uint8_t * commandBytes, generierte Befehlmeldung

gibt den Wert zurück:Länge des generierten Zugriffsbefehls, in Bytes

4.2.15, ASCII-Master - Antwortfunktion von Slaves

/ * ParsingAsciiSlaveRespondMessage (uint8_t * receivedMessage, uint8_t * command, uint16_t rxLength);

Void ParsingAsciiSlaveRespondMessage(uint8_t * receivedMessage, uint8_t * command, uint16_t rxLength);

Parameter:uint8_t * recievedMessage, die empfangene Rückgabe

uint8_t * command, die an die Befehlslliste der Station ausgegeben wurde

uint16_t rxLength, die Länge der empfangenen Nachricht

gibt den Wert zurück:无

4.2.16 ASCII-Master - Auflösung von Nachrichten-Befehl - Übereinstimmung von Slave-Stationen

/ * Nach Erhalt der Rückmeldung wird entschieden, ob es sich um eine Rückmeldung eines Befehls in der Send-Befehlsliste handelt * /

int FindAsciiCommandForReceivedMessage(uint8_t * receivedMessage,uint8_t (* commandList)[17],uint16_t commandNumber);

Parameter:uint8_t * recievedMessage, empfangene Nachricht vom Slave

uint8_t (* commandList) [17] Liste von Befehlen, die von der Hauptstation ausgegeben wurden

uint16_t commandNumber, Anzahl der gespeicherten Befehle

Rückgabewert:Gibt den Ort des entsprechenden Befehls zurück, gibt „-1" zurück, falls es keine Übereinstimmung gibt

Diese Funktion wird nur in der RTU-Master - Station verwendet, wenn große und häufige Datenmengen aufgerufen werden, oder wenn mehrere Slave-Stationen aufgerufen werden, um eine korrekte Datenanalyse zu ermöglichen.

4.2.17, ASCII Slave Parsing Master-Access - Befehl

/ * Parsiert die empfangenen Informationen und gibt die synthetische Antwort-Information und die Byte-Länge der Informationen zurück, indem Sie die Rückruffunktion * /

uint16_t ParsingAsciiMasterAccessCommand (uint8_t * receivedMessage, uint8_t * respondBytes, uint16_t rxLength, uint8_t StationAddress);

Parameter:uint8_t * receivedMesasage, empfangene Nachricht von der Hoststation

uint8_t * respondBytes, erzeugen Antwort Nachricht

uint16_t rxLength, die Länge der empfangenen Nachricht

Rückgabewert:Die Länge der erzeugten Antwort-Informationen, in Byte

Kapitel 4, Datenverarbeitung Funktion

Die spezifische Anwendung beinhaltet auch die Verarbeitung von Daten, die unterschiedlichen Anwendungsdatenstrukturen und - verarbeitungsmethoden sind sehr unterschiedlich, so definieren Sie einige Callback-Funktionen (eigentlich verwenden Sie die geschwächte Funktion _ _ weak Schlüsselwort) für die Datenverarbeitung.

4.3.1 Funktion, um den Wert der Spulen zu erhalten

/ * Holen Sie den Wert der Coil, die Sie lesen möchten * /

__ weak void GetCoilStatus(uint16_t startAddress,uint16_t quantity,bool * statusList)

{

/ / Wenn Sie spezifische Inhalte in der Modbus TCP Server / RTU Slave-Anwendung implementieren müssen

}

Parameter:uint16_t startAddress, die Startadresse des Objekts zum Lesen

uint16_t quantity, die Anzahl des Objekts zum Lesen

bool * statusList, eine Liste von Datenwerten für die Menge der gewünschten Spulen

gibt den Wert zurück:无

4.3.2, Funktion zum Abrufen des Eingabestatuswertes

/ * Abrufen des Wertes des InputStatus * /

__ weak void GetInputStatus(uint16_t startAddress, uint16_t quantity, bool * statusValue)

{

/ / Wenn Sie spezifische Inhalte in der Modbus TCP Server / RTU Slave-Anwendung implementieren müssen

}

Parameter:uint16_t startAddress, um die Anfangsadresse des Objekts zu lesen

uint16_t quantity, um die Anzahl des Objekts zu lesen

bool * statusValue, eine Liste von Datenwerten für die Menge des Status eingegeben erhalten

Rückgabewert:无

4.3.3 Funktion, die den Wert des Hold-Registers abnimmt

/ * Abrufen des Wertes des Hold-Registers, das gelesen werden soll * /

GetHoldingRegister(uint16_t startAddress, uint16_t quantity, uint16_t * registerValue)

{

/ / Wenn die Implementierung spezifischer Inhalte in der Modbus TCP Server / RTU Slave-Anwendung erforderlich ist

}

Parameter:uint16_t startAddress, die Anfangsadresse des zu liesenden Haltregister-Objekts

uint16_t quantity, die Anzahl der zu liesenden Haltregisters

uint16_t * registerValue, der Wert des zu liesenden Haltregisters

Rückgabewert:无

4.3.4 Funktion zum Abrufen von Eingabe-Register - Werten

/ * Holen Sie den Wert des Eingangsregisters ab, das Sie lesen möchten * /

GetInputRegister(uint16_t startAddress, uint16_t quantity, uint16_t * registerValue)

{

// Wenn die Modbus TCP Server / RTU Slave-Anwendung spezifische Inhalte implementiert werden muss

}

Parameter:uint16_t startAddress, Startadresse des zu lesen Eingaberegisters

uint16_t quantity, Anzahl der zu lesen Eingaberegisters

uint16_t * registerValue, der Wert des zu lesen Eingaberegisters

Rückgabewert:无

4.3.5, Wertfunktion für einzelne Spule festlegen

/ * Wert für einzelne Spule festlegen * /

__ weak void SetSingleCoil(uint16_t coilAddress, bool coilValue)

{

// Wenn die Modbus TCP Server / RTU Slave-Anwendung spezifische Inhalte implementieren muss, gibt

}

Parameter:uint16_t coilAddress, die Spule-Adresse des vordefinierten Wertes

bool coilValue, der vordefinierte Wert

zurück:无

4.3.6, Funktion zum Festlegen eines einzelnen Registerwerts

/ * Festlegen eines einzelnen Registerwerts * /

__ weak void SetSingleRegister(uint16_t registerAddress, uint16_t registerValue)

{

// Wenn die Modbus TCP Server / RTU Slave-Anwendung spezifische Inhalte implementiert werden muss, gibt

}

Parameter:uint16_t registerAddress, die Adresse des vordefinierten Aufbewahrungsregisters

uint16_t registerValue, den Wert des vordefinierten Aufbewahrungsregisters

zurück:无

4.3.7 Funktion, um mehrere Werte von Spulen zu setzen

/ * Wert für mehrere Spulen festlegen * /

__ weak void SetMultipleCoil(uint16_t startAddress, uint16_t quantity, bool * statusValue)

{

/ / Wenn die Implementierung spezifischer Inhalte in der Modbus TCP Server / RTU Slave-Anwendung erforderlich ist

}

Parameter:uint16_t startAddress, Startadresse für mehrere Spule, die vorgegeben werden sollen

uint16_t quantity, Anzahl der Spule, die vorgegeben werden sollen

bool * statusValue, Liste der Spulewerte, die vorgegeben werden sollen

Rückgabewert:无

4.3.8, Funktion zum Festlegen mehrerer Registerwerte

/ * Festlegen mehrerer Registerwerte * /

__ weak void SetMultipleRegister(uint16_t startAddress, uint16_t quantity, uint16_t * registerValue)

{

/ / Wenn die Implementierung spezifischer Inhalte in der Modbus TCP Server / RTU Slave-Anwendung erforderlich ist

}

Parameter:uint16_t startAddress, die Anfangsadresse für mehrere vordefinierte Aufbewahrungsregister

uint16_t quantity, die Anzahl der vordefinierten Aufbewahrungsregister.

uint16_t * registerValue, Liste der vorbekannten Werte für die Aufbewahrung des Registers

Rückgabewert:无

4.3.9, Funktion, um die von der Station erfassten Spulenwerte zu aktualisieren

/ * Aktualisiert den gelesenen Spulenstatus * /

__weak void UpdateCoilStatus(uint16_t startAddress, uint16_t quantity, bool * stateValue)

{

Implementieren Sie den

}

- Parameter in der Client-Applikation:uint16_t startAddress, die Startadresse des Spule-Objekts, das den Wert liest.

uint16_t quantity, Anzahl der gelesenen Spule

bool * stateValue, Liste der gelesenen Spule-Adressen

Rückgabewert:无

Dieses Programm ist die Standardverarbeitung Funktion, jedes Master-Objekt kann die Aktualisierungsfunktion individuell definieren, wenn es keine Definition gibt, rufen Sie diese Funktion auf.

4.3.10, Funktion zum Aktualisieren des von der Station abgerufenen Eingabestatuswertes

/ * Aktualisieren des gelesenen Eingabestatuswertes * /

__ weak void UpdateInputStatus(uint16_t startAddress, uint16_t quantity, bool * stateValue)

{

Implementiert in der Client-Anwendung (Mainstream)

}

Parameter:uint16_t startAddress, die Startadresse des gelesenen Eingabe-Status - Objekts

uint16_t quantity, die Anzahl der gelesenen Eingabe-Status - Objekte

bool * stateValue, der Wert des gelesenen Eingabe-Status - Objekts

Rückgabewert:无

Dieses Programm ist die Standardverarbeitung Funktion, jedes Host-Objekt kann die Update-Funktion individuell definieren, wenn es keine Definition gibt, rufen Sie diese Funktion auf.

4.3.11, Funktion zum Aktualisieren des Haltregisterwertes von der Station

/ * Aktualisieren des zurückgelesenen Haltregisters * /

UpdateHoldingRegister(uint16_t startAddress, uint16_t quantity, uint16_t * registerValue)

{

Implementieren Sie

}

- Parameter in der Client-Applikation:uint16_t startAddress, gelessene Startadresse des Haltungsregisterobjekts

uint16_t quantity, gelessene Daten des Haltungsregisterobjekts

uint16_t * registerValue, gelessene Liste der Haltungsregisterobjekte Werte

Rückgabewert:无

Dieses Programm ist die Standardverarbeitungsfunktion, jedes Master-Objekt kann die Aktualisierungsfunktion individuell definieren, wenn es keine Definition gibt, aufrufen Sie diese Funktion.

4.3.12 Aktualisieren Sie die Eingangsregister von der Station

/ * Aktualisieren Sie das Eingaberegister * /

__ weak void UpdateInputResgister(uint16_t startAddress, uint16_t quantity, uint16_t * registerValue)

{

Implementieren Sie die

}

- Parameter in der Client-Anwendung:uint16_t startAddress, Startadresse des gelesenen Eingabe-Register - Objekts

uint16_t quantity, Anzahl der gelesenen Eingabe-Register - Objekte

uint16_t * registerValue, Liste der gelesenen Eingabe-Register - Werte.

Rückgabewert:无

Dieses Programm ist die Standardverarbeitungsfunktion, jedes Master-Objekt kann die Aktualisierungsfunktion individuell definieren, wenn es keine Definition gibt, rufen Sie diese Funktion auf.

Kapitel 5 Einige Hinweise

Für die gesamte Entwicklung des Modbus-Protokollstacks, die bereits sehr deutlich gesagt wurde, werden wir als nächstes erklären, was nicht direkt mit der Entwicklung zu tun hat.

Z un ächst einmal die Frage , warum ich diesen Protokoll sta ck entwick elt habe . Uns ere urspr üng liche Ab sicht ist , dass wir bei der Entwicklung von Produk ten diesen Teil nicht jedes Mal neu schre iben müssen , sondern kontin ui er lich verbess ern und verw enden können , um wieder ver wend bar zu sein . Sp ä ter hatten wir natürlich das Gefü hl , dass wir es nicht nur für uns selbst benut zen konnten , sondern auch für alle , die es benut zen wollten , öffent lich machen konnten . Die Qu ell - Web se ite ist : https ://github.com/foxclever/Modbus

Zweitens hat das Modbus-Protokoll einen nationalen Standard, der drei Dokumente enthält. Unser Protokoll-Stack ist ein Standardprotokoll, das gemäß nationalen Standards entwickelt wurde, einschließlich der Funktion, verschiedene Arten von Objektdaten zu lesen und zu schreiben, und in der allgemeinen industriellen Anwendung ist völlig ausreichend. Drei Standard-Dokumente:

GB / T 19582.1 Spezifikation für industrielle Automatisierungsnetzwerke auf Basis des Modbus-Protokolls - Teil 1: Modbus-Anwendungsprotokoll

GB / T 19582.2 - 2008 Spezifikation für industrielle Automatisierungsnetzwerke auf Basis des Modbus-Protokolls - Teil 1: Leitfaden für die Implementierung des Modbus-Protokolls über serielle Verbindungen

GB / T 19582.3 Spezifikation für industrielle Automatisierungsnetzwerke auf Basis des Modbus-Protokolls - Teil 1: Leitfaden für die Implementierung des Modbus-Protokolls auf TCP / IP

Schließlich sind wir alle herzlich eingeladen, diesen Protokollstack zu verwenden, aber wir sind nicht verantwortlich für das Endergebnis der Verwendung. Natürlich, wenn wir irgendwelche Mängel finden, sind wir sehr und begrüßen Sie uns mitzuteilen, dass Sie das Problem finden, damit wir es kontinuierlich verbessern können.

Vielen Dank für Ihr Interesse an dieser Software, die benötigten Kollegen können sie auf GitHub herunterladen, und gleichzeitig willkommen, uns Verbesserungen vorzuschlagen, interessierte Kollegen können unsere öffentliche Seite folgen:

Modbus-Stack umfassende Instanz Parameterliste
Station Adresse: 1; Baudrate: 115200; Datenbit: 8; Stoppbit: 1; Keine Überprüfung
SequenznummerDatentypVariablenameName des ParametersAdresseLesen-Schreiben - AttributWertebereichStandardwertBeschreibung
1uint32_tbeatTimeHerzschlag-Erkennung40001Read-onlyZunahme pro Sekunde, um den ordnungsgemäßen Betrieb des Systems zu überwachen
2floatmbAI1Analogen-Test40003Read-onlymbAO1 * 3
3floatmbAO1Analogen-Test40005Lesen und schreiben0 ~ 100.01.101
4uint16_tmbAI2Analog-Test40007Nur LesenmbAO2 * 2
5uint16_tmbAO2Analog-Test40008Lesen und Schreiben0 ~ 1001lokale Variable
1floatmbSalve1AI1Ziel-Slave - Station1 Analog-Eingabe - Parameter140009Nur lesenZiel-Slave - Station1 - Simulationsparameter
2uint32_tmbSalve1AI2Ziel-Slave - Station1 - Simulationsparameter 240011Nur lesenZiel-Slave - Station1 - Simulationsparameter
5uint16_tmbSalve1AI3Analog-Eingabe - Parameter für Ziel-Slave - Station140013Nur lesen0Analog-Parameter für Ziel-Slave - Station1
6uint16_tmbSalve1AO1Analog-Ausgabe - Parameter für Ziel-Slave - Station140014Lesen und Schreiben101Simulation von Zielen von Station 1 Parameter
7uint16_tmbSalve1AO2Analog-Ausgabeparameter für Ziel-Slave - Station140015Lesen und Schreiben102Analog-Ausgabeparameter für Ziel-Slave - Station1
8uint16_tmbSalve1AO3Analog-Ausgabeparameter für Ziel-Slave - Station1 340016Lesen und Schreiben103Zielsklave1 Simulation Parameter
1floatmbSalve2AI1Zielsklave2 Simulation Eingabe Parameter 140017Nur LesenZielsklave2 Simulation Parameter
2uint32_tmbSalve2AI2Analog-Eingabe - Parameter für Ziel-Slave - Station240019Read-OnlyAnalog-Eingabe - Parameter für Ziel-Slave - Station2
5uint16_tmbSalve2AI3Analog-Eingabe - Parameter für Ziel-Slave - Station240021Read-Only0Analog-Eingabe - Parameter für Ziel-Slave - Station2
6uint16_tmbSalve2AO1Analog-Ausgabeparameter 140022Lesen und SchreibenAnalog-Ausgabeparameter 2
7uint16_tmbSalve2AO2Analog-Ausgabeparameter 240023Lesen und Schreiben0Zielsklave2 Simulation Parameter
8uint16_tmbSalve2AO3Zielsklave2 Simulation Ausgabe Parameter 340024Lesen und Schreiben0Zielsklave2 Simulation Parameter
1floatmbSalve3AI1Ziel-Slave - Station3 - Analog-Eingabe - Parameter140025Read OnlyZiel-Slave - Station3 - Analog-Eingabe - Parameter
2uint32_tmbSalve3AI2Ziel-Slave - Station3 - Analog-Eingabe - Parameter240027Read OnlyZiel-Slave - Station3 - Analog-Eingabe - Parameter
5uint16_tmbSalve3AI3Analog-Eingangsparameter für Zielslave Station 340029Read-only0Analog-Eingangsparameter für Zielslave Station 3
6uint16_tmbSalve3AO1Analog-Ausgangsparameter für Zielslave Station 3 140030Lesen und schreibenZielslave Station 3 Simulation Parameter
7uint16_tmbSalve3AO2Zielslave Station 3 Simulation Ausgabe Parameter 240031Lesen und Schreiben0Zielslave Station 3 Simulation Parameter
8uint16_tmbSalve3AO3Analog-Ausgabeparameter für Ziel-Slave - Station340032Lesen und Schreiben0Analog-Ausgabeparameter für Ziel-Slave - Station3
1floatmbSalve4AI1Analog-Eingangparameter für Ziel-Slave - Station440033Nur LesenAnalog-Ausgabeparameter für Ziel-Slave - Station4
2uint32_tmbSalve4AI2Analog-Eingangsparameter für Ziel-Slave - Station440035Read-onlyAnalog-Eingangsparameter für Ziel-Slave - Station4
5uint16_tmbSalve4AI3Analog-Eingangsparameter für Ziel-Slave - Station4 340037Nur lesen0Ausgabeparameter des Zielsklaven 4
6uint16_tmbSalve4AO1Ausgabeparameter des Zielsklaven 440038Lesen und SchreibenAusgabeparameter des Zielsklaven 4
7uint16_tmbSalve4AO2Ziel-Slave - Station4 - Analog-Ausgabeparameter 240039Lesen und Schreiben0Ziel-Slave - Station4 - Analog-Ausgabeparameter
8uint16_tmbSalve4AO3Ziel-Slave - Station4 - Analog-Ausgabeparameter 340040Lesen und Schreiben0Ziel-Sklavenstation4 analoge Parameter
1boolmbDI1Digitale Menge Eingabe Parameter 11Lesen-nurDigitale Menge Parameter
2boolmbDI2Digitale Menge Eingabe Parameter 22Lesen-nurGrößenparameter
3boolmbDI3Größen-Eingabeparameter 33Lese-nurGrößen-Eingabeparameter
4boolmbDI4Größen-Eingabeparameter 44Lese-nurDigitale Größe Parameter
5boolmbDO1Digitale Größe Ausgabe Parameter 15Lesen und SchreibenDigitale Größe Parameter
6boolmbDO2Digitale Größe Ausgabe Parameter 26Lesen und SchreibenZahlen Parameter
7boolmbDO3Digitale Ausgabe Parameter 37Lesen und schreibenZahlen Parameter
8boolmbDO4Digitale Ausgabe Parameter 48Lesen und schreibenParameter der numerischen Größe
1boolmbSalve1DI1Zielslave 1 Parameter der numerischen Größe Eingabe 19Nur gelesenZielslave 1 Parameter der numerischen Größe Eingabe 2
2boolmbSalve1DI2Zielmenge aus der Station 1 numerische Eingabe Parameter 210Nur lesenZielslave-Station1 - numerische Größenparameter
3boolmbSalve1DI3Zielslave-Station1 - numerische Größenparameter 311nur für LesenZielslave-Station1 - numerische Größenparameter
4boolmbSalve1DI4Zielslave-Station1 - numerische Größenparameter 412nur für LesenZielslave Station1 numerische Größenparameter
5boolmbSalve1DO1Zielslave Station1 numerische Größen Ausgabe Parameter 113Lesen und SchreibenZielslave Station1 numerische Größenparameter
6boolmbSalve1DO2Zielslave Station1 numerische Größen Ausgabe Parameter 214Lesen und SchreibenZielmenge von Station 1 numerische Parameter
7boolmbSalve1DO3Zielslave Station1 numerische Größenparameter Ausgabe315Lesen und SchreibenZielslave Station1 numerische Größenparameter
8boolmbSalve1DO4Zielslave Station1 numerische Größenparameter Ausgabe416Lesen und SchreibenZielmenge von Station 1 numerische Parameter
1boolmbSalve2DI1Zielslave-Station2 numerische Größenparameter 117nur für LesenZielslave-Station2 numerische Größenparameter
2boolmbSalve2DI2Zielslave-Station2 numerische Größenparameter 218nur für LesenZielslave-Station 2 - numerische Größenparameter
3boolmbSalve2DI3Zielslave-Station 2 - numerische Größenparameter 319nur für LesenZielslave-Station 2 - numerische Größenparameter
4boolmbSalve2DI4Zielslave-Station 2 - numerische Größenparameter 420nur für LesenZielslave-Station2 - numerische Parameter
5boolmbSalve2DO1Zielslave-Station2 - numerische Ausgabeparameter121Lesen und SchreibenZielslave-Station2 - numerische Parameter
6boolmbSalve2DO2Zielslave-Station2 - numerische Ausgabeparameter222Lesen und schreibenZielslave-Station 2 - numerische Parameter
7boolmbSalve2DO3Zielslave-Station 2 - numerische Ausgabeparameter 323Lesen und SchreibenZielslave-Station 2 - numerische Parameter
8boolmbSalve2DO4Zielslave-Station 2 - numerische Ausgabeparameter 424Lesen und SchreibenZielslave-Station 2 numerische Größe Parameter
1boolmbSalve3DI1Zielslave-Station 3 numerische Größe Eingabe Parameter 125Read-onlyZielslave-Station 3 numerische Größe Parameter
2boolmbSalve3DI2Zielslave-Station 3 numerische Größe Eingabe Parameter 226Read-onlyZiel von Station 3 Zahl Parameter
3boolmbSalve3DI3Zielslave-Station3 - Zahlenparameter-Eingabe - Zahlenparameter 327Nur lesenZielslave-Station3 - Zahlenparameter-Eingabe - Zahlenparameter
4boolmbSalve3DI4Zielslave-Station3 - Zahlenparameter-Eingabe - Zahlenparameter 428Nur lesenZielslave Station 3 numerische Größenparameter
5boolmbSalve3DO1Zielslave Station 3 numerische Größen Ausgabe Parameter 129Lesen und SchreibenZielslave Station 3 numerische Größenparameter
6boolmbSalve3DO2Zielslave Station 3 numerische Größen Ausgabe Parameter 230Lesen und SchreibenZiel von Station 3 Zahl Parameter
7boolmbSalve3DO3Zielslave Station 3 numerische Ausgabe Parameter 331Lesen und SchreibenZielslave Station 3 numerische Ausgabe Parameter
8boolmbSalve3DO4Zielslave Station 3 numerische Ausgabe Parameter 432Lesen und SchreibenZielslave-Station 3 - numerische Größenparameter
1boolmbSalve4DI1Zielslave-Station 4 - numerische Größenparameter 133- nur-lesenZielslave-Station 4 - numerische Größenparameter
2boolmbSalve4DI2Zielslave-Station 4 - numerische Größenparameter 234- nur-lesenZielslave-Station4 - numerische Größenparameter
3boolmbSalve4DI3Zielslave-Station4 - numerische Größenparameter 335Read-onlyZielslave-Station4 - numerische Größenparameter
4boolmbSalve4DI4Zielslave-Station4 - numerische Größenparameter 436Read-onlyZiel von Station 4 Zahlen Parameter
5boolmbSalve4DO1Zielschicht aus der Station 4 numerische Ausgabe Parameter 137Lesen und schreibenZiel von Station 4 Zahlen Parameter
6boolmbSalve4DO2Zielergabe der numerischen Menge von Station4 Parameter238Lesen und schreibenZiel von Station 4 Zahlen Parameter
7boolmbSalve4DO3Zielslave-Station4 - numerische Ausgabeparameter 339Lesen und SchreibenZielslave-Station4 - numerische Parameter
8boolmbSalve4DO4Zielslave-Station4 - numerische Ausgabeparameter 440Lesen und SchreibenZiel-Slavenstation4 Zahlen Quantitätsparameter
Ziel-Slavenstation1 Parameterliste
Station-Adresse: 1; Baudrate: 9600; Datenbit: 8; Stopbit: 1; Keine Überprüfung
SequenznummerDatentypVariablenameParameternameAdresseLesen-Schreiben - EigenschaftWertebereichStandardwertBeschreibung
1floatmbSalve1AI1Ziel-Slave - Station1 analoge Eingabeparameter140001nur LesenZiel-Slave - Station1 analoge Parameter
2uint32_tmbSalve1AI2Analog-Eingangsparameter für Ziel-Slave - Station140003Read-onlyAnalog-Eingangsparameter für Ziel-Slave - Station1
5uint16_tmbSalve1AI3Analog-Eingangsparameter für Ziel-Slave - Station1 340005Nur lesen0Ausgabeparameter für die Analog-Ausgabe von Zielslave 1
6uint16_tmbSalve1AO1Ausgabeparameter für die Analog-Ausgabe von Zielslave 140006Lesen und SchreibenZielslave 1 Analog-Ausgabeparameter
7uint16_tmbSalve1AO2Zielslave Station1 analoge Ausgabe Parameter 240007Lesen und Schreiben0Zielslave Station1 analoge Ausgabe Parameter
8uint16_tmbSalve1AO3Zielslave Station1 analoge Ausgabe Parameter 340008Lesen und Schreiben0Ziel-Slave - Station1 - Analogparameter
1boolmbSalve1DI1Ziel-Slave - Station1 - numerische Eingabeparameter 11Lesen-nurZiel-Slave - Station1 - numerische Eingabeparameter
2boolmbSalve1DI2Ziel-Slave - Station1 - numerische Eingabeparameter 22Lesen-nurZielslave Station1 numerische Größe Parameter
3boolmbSalve1DI3Zielslave Station1 numerische Größe Eingabe Parameter 33nur lesenZielslave Station1 numerische Größe Parameter
4boolmbSalve1DI4Zielslave Station1 numerische Größe Eingabe Parameter 44nur lesenZielslave Station1 numerische Größenparameter
5boolmbSalve1DO1Zielslave Station1 numerische Größenparameter Ausgabe15Lesen und SchreibenZielslave Station1 numerische Größenparameter
6boolmbSalve1DO2Zielslave Station1 numerische Größenparameter Ausgabe26Lesen und SchreibenZielmenge von Station 1 numerische Parameter
7boolmbSalve1DO3Zielslave1 numerische Größenparameter Ausgabe37Lesen und SchreibenZielslave1 numerische Größenparameter
8boolmbSalve1DO4Zielslave1 numerische Größenparameter Ausgabe48Lesen und SchreibenZielslave Station1 Zahlen Quantitätsparameter
Zielslave Station2 Parameterliste
Station-Adresse: 2; Baudrate: 9600; Datenbit: 8; Stoppbit: 1; Keine Überprüfung
SequenznummerDatentypVariablenameParameternameAdresseEigenschaften lesenWertebereichStandardwertBeschreibung
1floatmbSalve2AI1Analog-Eingabe - Parameter für Ziel-Slave - Station240001Nur LesenAnalog-Parameter für Ziel-Slave - Station2
2uint32_tmbSalve2AI2Analog-Eingangsparameter für Ziel-Slave - Station240003Lese-nurAnalog-Eingangsparameter für Ziel-Slave - Station2
5uint16_tmbSalve2AI3Analog-Eingangsparameter für Ziel-Slave - Station2 340005Nur lesen0Simulation von Zielen von Station 2 Parameter
6MessbarkeitMessbarkeit] MessbarkeitZiel analoge Ausgabe Parameter 1 von Station 240006Lesen und schreibenSimulation von Zielen von Station 2 Parameter
7uint16_tmbSalve2AO2Ziel-Slave - Station2 - Analog-Ausgabeparameter 240007Lesen und Schreiben0Ziel-Slave - Station2 - Analog-Ausgabeparameter
8uint16_tmbSalve2AO3Ziel-Slave - Station2 - Analog-Ausgabeparameter 340008Lesen und Schreiben0Ziel-Slave - Station2 - Analogparameter
1boolmbSalve2DI1Ziel-Slave - Station2 - Digitaleingabe-Parameter11Lesen-nurZiel-Slave - Station2 - Digitaleingabe-Parameter
2boolmbSalve2DI2Ziel-Slave - Station2 - Digitaleingabe-Parameter22Lesen-nurZielslave-Station2 - numerische Größenparameter
3boolmbSalve2DI3Zielslave-Station2 - numerische Größenparameter 33nur für LesenZielslave-Station2 - numerische Größenparameter
4boolmbSalve2DI4Zielslave-Station2 - numerische Größenparameter 44nur für LesenZielslave-Station 2 numerische Parameter
5boolmbSalve2DO1Zielslave-Station 2 numerische Ausgabeparameter 15Lesen und SchreibenZielslave-Station 2 numerische Parameter
6boolmbSalve2DO2Zielslave-Station 2 numerische Ausgabeparameter 26Lesen und SchreibenZielslave-Station 2 numerische Größenparameter
7boolmbSalve2DO3Zielslave-Station 2 numerische Größen Ausgabeparameter 37Lesen und SchreibenZielslave-Station 2 numerische Größenparameter
8boolmbSalve2DO4Zielslave-Station 2 numerische Größen Ausgabeparameter 48Lesen und SchreibenZiel-Slavenstation2 Zahlen Quantitätsparameter
Ziel-Slavenstation1 Parameterliste
Stationsadresse 3; Baudrate: 9600; Datenbit: 8; Stopbit: 1; Keine Überprüfung
SequenznummerDatentypVariablenameParameternameAdresseLesen und Schreiben EigenschaftenWertebereichStandardwertBeschreibung
1floatmbSalve3AI1Analog-Eingabe - Parameter für die Ziel-Slave - Station340001Lesen nurAnalog-Parameter für die Ziel-Slave - Station3
2uint32_tmbSalve3AI2Analog-Eingabe - Parameter für Ziel-Slave - Station340003Lese-nurAnalog-Eingabe - Parameter für Ziel-Slave - Station3
5uint16_tmbSalve3AI3Analog-Eingabe - Parameter für Ziel-Slave - Station340005reines Lesen0Zielsklave Station3 Simulation Parameter
6uint16_tmbSalve3AO1Zielsklave Station3 Simulation Ausgabe Parameter 140006Lesen und SchreibenZielsklave Station3 Simulation Parameter
7uint16_tmbSalve3AO2Ziel-Slave - Station3 - Analog-Ausgabeparameter 240007Lesen und Schreiben0Ziel-Slave - Station3 - Analog-Ausgabeparameter
8uint16_tmbSalve3AO3Ziel-Slave - Station3 - Analog-Ausgabeparameter 340008Lesen und Schreiben0Simulation von Zielen von Station 3 Parameter
1boolmbSalve3DI1MBSalve3DI21Nur lesenZiel von Station 3 Zahl Parameter
2boolMBSalve3DI2MBSalve3DI22MBSalve3DI2Zielslave Station 3 numerische Größenparameter
3boolmbSalve3DI3Zielslave Station 3 numerische Größenparameter Eingabe 33Read-onlyZielslave Station 3 numerische Größenparameter
4boolmbSalve3DI4Zielslave Station 3 numerische Größenparameter Eingabe 44Read-onlyZielslave Station 3 numerische Größenparameter
5boolmbSalve3DO1Zielslave Station 3 numerische Größen Ausgabe Parameter 15Lesen und SchreibenZielslave Station 3 numerische Größenparameter
6boolmbSalve3DO2Zielslave Station 3 numerische Größen Ausgabe Parameter 26Lesen und SchreibenZielslave Station 3 numerische Größenparameter
7boolmbSalve3DO3Zielslave Station 3 numerische Größen Ausgabe Parameter 37Lesen und SchreibenZielslave Station 3 numerische Größenparameter
8boolmbSalve3DO4Zielslave Station 3 numerische Größen Ausgabe Parameter 48Lesen und SchreibenZiel-Slave - Station3 Zahlen Quantitätsparameter
Ziel-Slave - Station1 Parameterliste
Station-Adresse 4; Baudrate: 9600; Datenbit: 8; Stoppbit: 1; Keine Überprüfung
SeriennummerDatentypVariablenameParameternameAdresseEigenschaften lesenWertebereichStandardwertBeschreibung
1floatmbSalve4AI1Analog-Eingabe - Parameter für die Ziel-Slave - Station440001Nur LesenAnalog-Parameter für die Ziel-Slave - Station4
2uint32_tmbSalve4AI2Analog-Eingabe - Parameter für Ziel-Slave - Station440003Lese-nurAnalog-Eingabe - Parameter für Ziel-Slave - Station4
5uint16_tmbSalve4AI3Analog-Eingabe - Parameter für Ziel-Slave - Station4 340005reines Lesen0Zielslave Station 4 Simulation Parameter
6uint16_tmbSalve4AO1Zielslave Station 4 Simulation Ausgabe Parameter 140006Lesen und SchreibenZielslave Station 4 Simulation Parameter
7uint16_tmbSalve4AO2Ziel-Slave - Station4 - Analog-Ausgabeparameter 240007Lesen und Schreiben0Ziel-Slave - Station4 - Analog-Ausgabeparameter
8uint16_tmbSalve4AO3Ziel-Slave - Station4 - Analog-Ausgabeparameter 340008Lesen und Schreiben0Ziel-Slave - Station4 - Analogparameter
1boolmbSalve4DI1Ziel-Slave - Station4 - numerische Eingabeparameter11Read-onlyZiel-Slave - Station4 - numerische Eingabeparameter
2boolmbSalve4DI2Ziel-Slave - Station4 - numerische Eingabeparameter22Read-onlyZiel von Station 4 Zahlen Parameter
3boolmbSalve4DI3Zielslave-Station 4 numerische Größe Eingabe Parameter 33nur für LesenZielslave-Station 4 numerische Größe Parameter
4boolmbSalve4DI4Zielslave-Station 4 numerische Größe Eingabe Parameter 44nur für LesenZielslave-Station 4 numerische Größenparameter
5boolmbSalve4DO1Zielslave-Station 4 numerische Größen Ausgabeparameter 15Lesen und SchreibenZielslave-Station 4 numerische Größenparameter
6boolmbSalve4DO2Zielslave-Station 4 numerische Größen Ausgabeparameter 26Lesen und SchreibenZielslave-Station4 - numerische Ausgabeparameter
7boolmbSalve4DO3Zielslave-Station4 - numerische Ausgabeparameter 37Lesen und SchreibenZielslave-Station4 - numerische Ausgabeparameter
8boolmbSalve4DO4Zielslave-Station4 - numerische Ausgabeparameter 48Lesen und SchreibenZiel von Station 4 numerische Größenparameter
Sollte man diese Informationen für ein echtes Projekt verwenden?

Gehen Sie zum Tool Center, um Nachrichten zu analysieren, CRC-Prüfungen und Geräte-Debugging zu erledigen, oder senden Sie Anforderungen für Auswahl - und Zugangsvorschläge.

Ingenieur Mitglied

Verwandeln Sie diesen Artikel in ein umsetzbares Debuggermaterial

Erweiterte Nachrichtenanalyse, Paket-Downloads, Codebeispiele, Engineering-Szenarien und Priority-Technischer Support sind für die Real-Projekt - Bereitstellung möglich.

Unbegrenzte Werkzeuge
Datenpaket und Codepaket
Vollständige Engineering Case-Basis
Vorrangiger Zugang zum technischen Support

Antwort veröffentlichen

Ihre E-Mail - Adresse wird nicht öffentlich gemacht. Erforderliche Elemente wurden verwendet * markiert.