基于mnModbus的ModbusVereinbarung栈应用手册

kostenlosKostenloses technisches Material

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

基于mnModbus的ModbusVereinbarung栈应用手册缩略图
🌐 Diese Seite ist noch nicht auf Deutsch verfügbar. Die chinesische Version wird angezeigt. Zurück zur chinesischen Seite.
本文目录
  1. 1. 1.1、编写原因
  2. 2. 1.2、版权说明
  3. 3. 1.3、更新记录
  4. 4. 4.1.1、Funktionscode枚举
  5. 5. 4.1.2、ModbusStatus枚举
  6. 6. 4.1.3、站信息结构
  7. 7. 4.1.4、生成访问Von der StationPDU单元函数
  8. 8. 4.1.5、AnalyseLesen的返回Daten函数
  9. 9. 4.1.6、Von der Station生成Lesen von DatenBefehl的AntwortMeldung函数
  10. 10. 4.1.7、Funktionscode检验函数
  11. 11. 4.1.8、生成TCP客户端Befehl函数
  12. 12. 4.1.9、生成TCPDer ServerAntwort函数
  13. 13. 4.1.10、CRC-Test检查
  14. 14. 4.1.11、生成读写RTUVon der Station的HauptstationBefehl函数
  15. 15. 4.1.12、生成Von der Station应答信息Meldung函数
  16. 16. 4.1.13、LRC-Test检查函数
  17. 17. 4.1.14、将ASCII消息转换为16 Einführung
  18. 18. 4.1.15、生成读写ASCIIVon der Station的Befehl函数
  19. 19. 4.1.16、生成ASCIIVon der Station应答HauptstationBefehl的函数
  20. 20. 4.2.1、RTUHauptstation对象与Von der Station对象
  21. 21. 4.2.2、RTUHauptstation对象初始化函数
  22. 22. 4.2.3、生成RTUHauptstation访问Von der StationBefehl函数
  23. 23. 4.2.4、RTUHauptstationAnalyseVon der Station的Antwort函数
  24. 24. 4.2.5、RTUHauptstationAnalyseVon der Station返回消息Befehl匹配函数
  25. 25. 4.2.6、RTUVon der StationAnalyseHauptstation访问Befehl函数
  26. 26. 4.2.7、TCP客户端对象与TCPDer Server对象
  27. 27. 4.2.8、TCP客户端对象初始化函数
  28. 28. 4.2.9、生成TCP客户端访问Der ServerBefehl函数
  29. 29. 4.2.10、TCP客户端AnalyseDer Server返回信息函数
  30. 30. 4.2.11、TCPDer ServerAnalyse客户端Befehl函数
  31. 31. 4.2.12、ASCIIHauptstation对象与Von der Station对象
  32. 32. 4.2.13、ASCIIHauptstation对象初始化函数
  33. 33. 4.2.14、生成访问ASCIIVon der Station的Befehl
  34. 34. 4.2.15、ASCIIHauptstationAnalyseVon der Station的Antwort函数
  35. 35. 4.2.16、ASCIIHauptstationAnalyseVon der Station返回消息Befehl匹配函数
  36. 36. 4.2.17、ASCIIVon der StationAnalyseHauptstation访问Befehl函数
  37. 37. 4.3.1、获取线圈Quantität值的函数
  38. 38. 4.3.2、获取Importieren Status值的函数
  39. 39. 4.3.3、获取保持Registerwert的函数
  40. 40. 4.3.4、获取输入Registerwert的函数
  41. 41. 4.3.5、设置单个线圈的值函数
  42. 42. 4.3.6、设置单个Registerwert的函数
  43. 43. 4.3.7、设置mehrere Werte的函数
  44. 44. 4.3.8、设置mehrere Registerwerte的函数
  45. 45. 4.3.9、Von der Station更新Erlangen Sie的线圈Quantität值的函数
  46. 46. 4.3.10、Von der Station更新Erlangen Sie的Importieren Status值的函数
  47. 47. 4.3.11、Von der Station更新保持Registerwert的函数
  48. 48. 4.3.12、Von der Station更新输入Registerwert得函数

Kapitel 1 前言

Modbus是全球Die一个真正用于Industrie-Standort的总线Vereinbarung。Modbus通讯在工业网络通讯中应用十Unterteilung广泛,而且方便,受zu大家的欢迎。

1.1、编写原因

一直以来,在我们自己的产品和项目中都多次使用Modbus通讯Vereinbarung。每次都是使用者自行开发或者网上Suche nach符合要求的Quellencode。但每次的应用都有不同,每次都需要很多的重复劳动。而且Vereinbarung站如应用软件的紧密结合也使得代码有些混乱。所以一直以来都想要开发一个比较通用的Vereinbarung栈能在后续的项目中复用,而不必每次都写一遍。现在利用项目研发的机会,开发一个自己的ModbusVereinbarung栈。

1.2、版权说明

本套软件最初虽然是为了我们自用而开发,但现已在GitHub上开源。所以任何人都可以Kopieren.、传播和使用,无论是个人学习还是商业应用都没有限制。对应用方法及修改欢迎探讨,但对于在使用过程中出现了任何问题我们均不负责。

软件Quellencode及其说明可以上GitHub自由Download,DownloadAdresse:https://github.com/foxclever/Modbus

1.3、更新记录

前一个版本我们已经实现了基于串行链路的Modbus RTU和基于Ethernet的Modbus TCP两种。在这一个版本中,我们添加了基于串行链路的Modbus ASCII方式。并对上一个版本中已知的问题做了修正。

软件设计及本Dokumentation更新记录如下:

版本更新说明Der Autor日期
V1.0.0初版,共5Kapitel,介绍了主要API函数木南2015Jahr5月8日
V1.1.0添加了Die6、7两Kapitel木南2016Jahr12月23日
V1.1.5修改了3、4、5三Kapitel的大部Unterteilung内容木南2018Jahr2月20日
V2.0.0增加了ASCIIRelated内容,并修改已知问题木南2018Jahr9月18日
V2.1.0增加了RTU和ASCII多HauptstationOperationen的类容;增加了TCP客户端多网段Operationen的内容。木南2019Jahr4月29日

Kapitel 2、PDU函数

在应用Daten单元我们处理ModbusDaten通讯的基本MeldungDas Format,这些基本是通用的,目前版本只支持01、02、03、04、05、06、15、16Funktionscode。

4.1.1、Funktionscode枚举

/*定义Modbus的OperationenFunktionscode,支持01、02、03、04、05、06、15、16Funktionscode*/

typedef enum {

  ReadCoilStatus=0x01,        /*Lesen Sie den Zustand(读多个输出位的Status)*/

  ReadInputStatus=0x02,       /*读输入位Status(读多个输入位的Status)*/

  ReadHoldingRegister=0x03,   /*Lesen Sie das Register(读多个保持Register.的Zahlenwert)*/

  ReadInputRegister=0x04,     /*Eingangsregister lesen(读多个输入Register.的Zahlenwert)*/

  WriteSingleCoil=0x05,       /*强制单个线圈(强制单个输出位的Status)*/

  WriteSingleRegister=0x06,   /*预制单ein Register.(设定一ein Register.的Zahlenwert)*/

  WriteMultipleCoil=0x0F,     /*强制多个线圈(强制多个输出位的Status)*/

  WriteMultipleRegister=0x10 /*预制多ein Register.(设定多ein Register.的Zahlenwert)*/

}FunctionCode;

4.1.2、ModbusStatus枚举

/*定义Empfangzu指令检测Fehler.时的Fehler.码*/

typedef enum{

  MB_OK=0x00,

  InvalidFunctionCode=0x01,//不合法Funktion代码

  IllegalDataAddress=0x02,//非法的DatenAdresse

  IllegalDataValues=0x03,//非法的Daten值或者范围

  OperationFail=0x04

}ModbusStatus;

4.1.3、站信息结构

/*定义用于传递要访问Von der Station(Der Server)的信息*/

typedef struct{

  uint8_t unitID;

  FunctionCode functionCode;

  uint16_t startingAddress;

  uint16_t quantity;

}ObjAccessInfo;

定义用于传递Von der Station(Der Server)访问的各种信息,包括站Nr.、Funktionscode、Ausgang Adresse和Anzahl。

4.1.4、生成访问Von der StationPDU单元函数

/*作为RTUHauptstation(TCP客户端)时,生成读写RTUVon der Station(TCPDer Server)对象的Befehl*/

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

Parameter:ObjAccessInfo objInfo,要访问的Von der Station对象

bool *statusList,需要往下写的StatusQuantität对象Daten列表

uint16_t *registerList,需要往下写的Register.Quantität对象的Daten列表

uint8_t commandBytes[],生成的访问Befehl

返回值:生成的访问Befehl的Länge,以Bytes为单位。

4.1.5、AnalyseLesen的返回Daten函数

/*AnalyseHauptstation(客户端)从Der ServerLesen的Daten*/

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

Parameter:uint8_t * receivedMessage,Empfangzu的信息Meldung

uint16_t quantity,Lesen的对象Anzahl

bool *statusList,Analyse出来的Lesenzu的Status对象的Daten列表

uint16_t *registerLister,Analyse出来的Lesenzu的Register.对象的Daten列表

返回值:

4.1.6、Von der Station生成Lesen von DatenBefehl的AntwortMeldung函数

/*生成Hauptstation读访问的Antwort,包括0x01、0x02、0x03、0x04Funktionscode,返回相应信息的Länge*/

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

Parameter:uint8_t *receivedMesasage,Empfangzu的主战读OperationenMeldung

bool *statusList,Lesen的Von der StationStatus对象Daten列表

uint16_t *registerList,Lesenzu的Von der StationRegister.对象Daten列表

uint8_t *respondBytes,生成的Von der StationAntwortMeldung信息

返回值:AntwortMeldung的Länge,以Bytes为单位

4.1.7、Funktionscode检验函数

/*检查Funktionscode是否Richtig.*/

ModbusStatus CheckFunctionCode(FunctionCode fc);

Parameter:FunctionCode fc,Funktionscode,由枚举定义

返回值:ModbusOperationenStatus,由枚举定义

4.1.8、生成TCP客户端Befehl函数

//生成读写Der Server对象的Befehl

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

Parameter:ObjAccessInfo objInfo,TCPDer Server访问信息对象

bool *statusList,写Der ServerStatusQuantität对象Daten列表

uint16_t *registerList,写Der ServerRegister.Quantität对象Daten列表

uint8_t *commandBytes,erzeugte Befehle.信息Meldung

返回值:Befehl的Länge,以Bytes为单位

4.1.9、生成TCPDer ServerAntwort函数

/*合成对Der Server访问的Antwort*/

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

Parameter:uint8_t *receivedMesasage,Empfangzu的客户端Befehl信息Meldung

bool *statusList,读TCPDer Server的StatusQuantität对象Daten列表

uint16_t *registerList,读TCPDer Server的Register.Quantität对象Daten列表

uint8_t *respondBytes,生成的Antwort客户端Befehl的Antwort信息Meldung

返回值:Antwort信息MeldungLänge,以Bytes为单位

4.1.10、CRC-Test检查

/*通过CRC-TestEmpfang的信息是否Richtig.*/

bool CheckRTUMessageIntegrity (uint8_t *message,uint8_t length);

Parameter:uint8_t *message,待Prüfungen的DatenMeldung

uint8_t length,带教言的DatenMeldungLänge,以Bytes为单位

返回值:返回Prüfungen是否通过的Status信Nr.

4.1.11、生成读写RTUVon der Station的HauptstationBefehl函数

/*生成读写Von der StationDaten对象的Befehl,BefehlLänge包括2个PrüfungenBytes*/

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

Parameter:ObjAccessInfo slaveInfo,Von der Station访问信息对象,由结构体定义

bool *statusList,写Von der StationStatusQuantitätDaten列表

uint16_t *registerList,写Von der StationRegister.QuantitätDaten列表

uint8_t *commandBytes,生成的访问BefehlMeldung

返回值:访问Befehl的Länge,以Bytes为单位

4.1.12、生成Von der Station应答信息Meldung函数

/*生成Von der Station应答Hauptstation的Antwort*/

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,

返回值:生成的Antwort信息Meldung的Länge,以Bytes为单位

4.1.13、LRC-Test检查函数

/*判断ASCIIDaten信息是否Richtig.*/

bool CheckASCIIMessageIntegrity(uint8_t *usMsg, uint16_t usLength)

Parameter:uint8_t *usMsg,待Prüfungen的消息列表,16 EinführungDaten

uint16_t usLength,待Prüfungen的消息列表的Länge

返回值:PrüfungenErgebnis,PrüfungenRichtig.返回“true”,否则返回“false”

4.1.14、将ASCII消息转换为16 Einführung

/*Empfangzu的ASCII消息转换为16 Einführung*/

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

Parameter:uint8_t *aMsg,ASCII码信息

uint8_t *hMsg,转换后的16 Einführung信息

      uint16_t aLen,ASCII码信息的Länge

返回值:转换是否Richtig.,转换Richtig.返回“true”,否则返回“false”

4.1.15、生成读写ASCIIVon der Station的Befehl函数

/*生成读写Von der Station的Befehl,应用于Hauptstation,含Prüfungen及AnfangEnde符*/

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

Parameter:ObjAccessInfo slaveInfo,Von der Station访问信息对象,由结构体定义

bool *statusList,写Von der StationStatusQuantitätDaten列表

uint16_t *registerList,写Von der StationRegister.QuantitätDaten列表

uint8_t *commandBytes,生成的访问BefehlMeldung

返回值:访问Befehl的Länge,以Bytes为单位

4.1.16、生成ASCIIVon der Station应答HauptstationBefehl的函数

/*生成应答Hauptstation的Antwort,应用于Von der Station*/

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

Parameter:uint8_t *receivedMesasage,接受zuHauptstationMeldung信息

bool *statusList,HauptstationBefehl要Lesen的StatusQuantität值列表

uint16_t *registerList,HauptstationBefehl要Lesen的Register.Quantität值列表

uint8_t *respondBytes,生成的Antwort信息Meldung

返回值:生成的Antwort信息Meldung的Länge,以Bytes为单位

Kapitel 3、应用封装函数

对应用级封装,我们只封装RTUHauptstation应用,RTUVon der Station应用、TCP客户端应用和TCPDer Server端应用四类。

4.2.1、RTUHauptstation对象与Von der Station对象

/* 定义被访问RTUVon der Station对象Typus */

typedef struct AccessedRTUSlaveType{

  uint8_t stationAddress;       //站Adresse

  uint8_t cmdOrder;             //gegenwärtigBefehl在Befehl列表中的位置

  uint16_t commandNumber;       //Befehl列表中Befehl的总数

  uint8_t (*pReadCommand)[8];   //读Befehl列表

  uint8_t *pLastCommand;        //上一次Senden Sie的Befehl

  uint32_t flagPresetCoil;      //预置线圈控制标志位

  uint32_t flagPresetReg;       //预置Register.控制标志位

}RTUAccessedSlaveType;

/* 定义本地RTUHauptstation对象Typus */

typedef struct LocalRTUMasterType{

  uint32_t flagWriteSlave[8];   //写一个站控制标志位,最多256个站,与站Adresse对应。

  uint16_t slaveNumber;         //Von der Station列表中Von der Station的Anzahl

  uint16_t readOrder;           //gegenwärtigVon der Station在Von der Station列表中的位置

  RTUAccessedSlaveType *pSlave;         //Von der Station列表

  UpdateCoilStatusType pUpdateCoilStatus;       //更新线圈Quantität函数

  UpdateInputStatusType pUpdateInputStatus;     //更新Importieren StatusQuantität函数

  UpdateHoldingRegisterType pUpdateHoldingRegister;     //更新保持Register.Quantität函数

  UpdateInputResgisterType pUpdateInputResgister;       //更新输入Register.Quantität函数

}RTULocalMasterType;

4.2.2、RTUHauptstation对象初始化函数

/*初始化RTUHauptstation对象*/

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

Parameter:RTULocalMasterType *master,本地Hauptstation对象

uint16_t slaveNumber,Von der Station的Anzahl

RTUAccessedSlaveType *pSlave,Von der Station列表

UpdateCoilStatusType pUpdateCoilStatus,更新线圈Quantität函数指针

UpdateInputStatusType pUpdateInputStatus,更新StatusQuantität函数指针

UpdateHoldingRegisterType pUpdateHoldingRegister,更新保持Register.Quantität函数指针

UpdateInputResgisterType pUpdateInputResgister,更新输入Register.Quantität函数指针

返回值:无返回值

4.2.3、生成RTUHauptstation访问Von der StationBefehl函数

/*生成访问Der Server的Befehl*/

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

Parameter:ObjAccessInfo objInfo,Von der Station访问信息对象,由结构体定义

void *dataList,写Von der Station对象的Daten列表

uint8_t *commandBytes,erzeugte Befehle.Meldung

返回值:生成的访问Befehl的Länge,以Bytes为单位

4.2.4、RTUHauptstationAnalyseVon der Station的Antwort函数

/*Analyse收zu的Der ServerAntwort信息*/

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

Parameter:uint8_t *recievedMessage,Empfangzu的返回信息

uint8_t *command,已经下发zuVon der Station的Befehl列表

返回值:

4.2.5、RTUHauptstationAnalyseVon der Station返回消息Befehl匹配函数

/*Empfangzu返回信息后,判断是否是Befehle senden列表中Befehl的返回信息*/

int FindCommandForRecievedMessage(uint8_t *recievedMessage,uint8_t (*commandList)[8],uint16_t commandNumber);

Parameter:uint8_t *recievedMessage,Empfang的Von der Station返回信息

uint8_t (*commandList)[8],Hauptstation下发过的Befehl列表

uint16_t commandNumber,存储的Befehl的条数

返回值:返回匹配Befehl所在的位置,无匹配时,返回“-1”

本函数只在RTUHauptstation中,访问的DatenQuantität大且频繁,或者访问多个Von der Station时使用,便于作Richtig.的DatenAnalyse。

4.2.6、RTUVon der StationAnalyseHauptstation访问Befehl函数

/*AnalyseEmpfangzu的信息,并返回合成的回复信息和信息的BytesLänge,通过回调函数*/

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

Parameter:uint8_t *receivedMesasage,Empfangzu的HauptstationMeldung信息

uint8_t *respondBytes,Erstellen von Reaktionen信息Meldung

uint16_t rxLength,Empfangzu的Meldung的Länge

返回值:生成的Antwort信息的Länge,以Bytes为单位

4.2.7、TCP客户端对象与TCPDer Server对象

/* 定义被访问TCPDer Server对象Typus */

typedef struct AccessedTCPServerType{

  union {

    uint32_t ipNumber;

    uint8_t ipSegment[4];

  }ipAddress;                                           //Der Server的IPAdresse

  uint32_t flagPresetServer;                            //写Der ServerBitte标志

  WritedCoilListHeadNode pWritedCoilHeadNode;          //可写的线圈Quantität列表

  WritedRegisterListHeadNode pWritedRegisterHeadNode;  //可写的保持Register.列表

  struct AccessedTCPServerType *pNextNode;              //下一个TCPDer Server节点

}TCPAccessedServerType;

/* 定义Der Server链表头Typus */

typedef struct ServerListHeadType {

  TCPAccessedServerType *pServerNode;           //Der Server节点指针

  uint32_t serverNumber;                        //Der Server的Anzahl

}ServerListHeadNode;

/* 定义本地TCP客户端对象Typus */

typedef struct LocalTCPClientType{

  uint32_t transaction;                                 //Transaktionsidentifikator

  uint16_t cmdNumber;                                  //读Der ServerBefehl的Anzahl

  uint16_t cmdOrder;                                   //gegenwärtigVon der Station在Von der Station列表中的位置

  uint8_t (*pReadCommand)[12];                         //读Befehl列表

  ServerListHeadNode ServerHeadNode;                    //Server对象链表的头节点

  UpdateCoilStatusType pUpdateCoilStatus;               //更新线圈Quantität函数

  UpdateInputStatusType pUpdateInputStatus;             //更新Importieren StatusQuantität函数

  UpdateHoldingRegisterType pUpdateHoldingRegister;     //更新保持Register.Quantität函数

  UpdateInputResgisterType pUpdateInputResgister;       //更新输入Register.Quantität函数

}TCPLocalClientType;

4.2.8、TCP客户端对象初始化函数

/*初始化TCP客户端对象*/

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

Parameter:TCPLocalClientType *client,客户端对象

uint16_t cmdNumber,读Befehl的Anzahl

uint8_t (*pReadCommand)[12],读Befehl列表

UpdateCoilStatusType pUpdateCoilStatus,更新线圈Quantität函数指针

UpdateInputStatusType pUpdateInputStatus,更新StatusQuantität函数指针

UpdateHoldingRegisterType pUpdateHoldingRegister,更新保持Register.函数指针

UpdateInputResgisterType pUpdateInputResgister,更新输入Register.Quantität函数指针

返回值:无返回值

4.2.9、生成TCP客户端访问Der ServerBefehl函数

/*生成访问Der Server的Befehl*/

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

Parameter:ObjAccessInfo objInfo,访问Der Server信息对象

void *dataList,些Der Server对象Daten列表

uint8_t *commandBytes,生成的访问Der ServerBefehlMeldung

返回值:访问Befehl的Länge,以Bytes为单位

4.2.10、TCP客户端AnalyseDer Server返回信息函数

/*Analyse收zu的Der Server相应信息*/

void ParsingServerRespondMessage(uint8_t *recievedMessage);

Parameter:uint8_t *recievedMessage,接受zu的Der ServerAntwort信息

返回值:

4.2.11、TCPDer ServerAnalyse客户端Befehl函数

/*AnalyseEmpfangzu的信息,Zurück zur AntwortBefehl的Länge*/

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

Parameter:uint8_t *receivedMessage,接受zu的客户端访问Befehl

uint8_t *respondBytes,生成的Der ServerAntwort信息

返回值:生成的Antwort信息Meldung的Länge,以Bytes为单位

4.2.12、ASCIIHauptstation对象与Von der Station对象

/* 定义被访问ASCIIVon der Station对象Typus */

typedef  struct AccessedASCIISlaveType{

  uint8_t stationAddress;       //站Adresse

  uint8_t cmdOrder;             //gegenwärtigBefehl在Befehl列表中的位置

  uint16_t commandNumber;       //Befehl列表中Befehl的总数

  uint8_t (*pReadCommand)[17];   //读Befehl列表

  uint8_t *pLastCommand;        //上一次Senden Sie的Befehl

  uint32_t flagPresetCoil;      //预置线圈控制标志位

  uint32_t flagPresetReg;       //预置Register.控制标志位

}AsciiAccessedSlaveType;

/* 定义本地ASCIIHauptstation对象Typus */

typedef struct LocalASCIIMasterType{

  uint32_t flagWriteSlave[8];   //写一个站控制标志位,最多256个站,与站Adresse对应。

  uint16_t slaveNumber;         //Von der Station列表中Von der Station的Anzahl

  uint16_t readOrder;           //gegenwärtigVon der Station在Von der Station列表中的位置

  AsciiAccessedSlaveType *pSlave;         //Von der Station列表

  UpdateCoilStatusType pUpdateCoilStatus;       //更新线圈Quantität函数

  UpdateInputStatusType pUpdateInputStatus;     //更新Importieren StatusQuantität函数

  UpdateHoldingRegisterType pUpdateHoldingRegister;     //更新保持Register.Quantität函数

  UpdateInputResgisterType pUpdateInputResgister;       //更新输入Register.Quantität函数

}AsciiLocalMasterType;

4.2.13、ASCIIHauptstation对象初始化函数

/*初始化RTUHauptstation对象*/

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

Parameter:AsciiLocalMasterType *master,ASCIIHauptstation对象

uint16_t slaveNumber,Von der Station的Anzahl

AsciiAccessedSlaveType *pSlave,Von der Station列表

UpdateCoilStatusType pUpdateCoilStatus,更新线圈Quantität回调函数

UpdateInputStatusType pUpdateInputStatus,更新StatusQuantität回调函数

UpdateHoldingRegisterType pUpdateHoldingRegister,更新保持Register.Quantität回调函数

UpdateInputResgisterType pUpdateInputResgister,更新输入Register.Quantität回调函数

返回值:无返回值

4.2.14、生成访问ASCIIVon der Station的Befehl

/*生成访问ASCIIVon der Station的Befehl*/

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

Parameter:ObjAccessInfo objInfo,Von der Station访问信息对象,由结构体定义

void *dataList,写Von der Station对象的Daten列表

uint8_t *commandBytes,erzeugte Befehle.Meldung

返回值:生成的访问Befehl的Länge,以Bytes为单位

4.2.15、ASCIIHauptstationAnalyseVon der Station的Antwort函数

/*Analyse收zu的Der Server相应信息*/

void ParsingAsciiSlaveRespondMessage(uint8_t *recievedMessage, uint8_t *command,uint16_t rxLength);

Parameter:uint8_t *recievedMessage,Empfangzu的返回信息

uint8_t *command,已经下发zuVon der Station的Befehl列表

uint16_t rxLength,Empfangzu的消息的Länge

返回值:

4.2.16、ASCIIHauptstationAnalyseVon der Station返回消息Befehl匹配函数

/*Empfangzu返回信息后,判断是否是Befehle senden列表中Befehl的返回信息*/

int FindAsciiCommandForRecievedMessage(uint8_t *recievedMessage,uint8_t (*commandList)[17],uint16_t commandNumber);

Parameter:uint8_t *recievedMessage,Empfang的Von der Station返回信息

uint8_t (*commandList)[17],Hauptstation下发过的Befehl列表

uint16_t commandNumber,存储的Befehl的条数

返回值:返回匹配Befehl所在的位置,无匹配时,返回“-1”

本函数只在RTUHauptstation中,访问的DatenQuantität大且频繁,或者访问多个Von der Station时使用,便于作Richtig.的DatenAnalyse。

4.2.17、ASCIIVon der StationAnalyseHauptstation访问Befehl函数

/*AnalyseEmpfangzu的信息,并返回合成的回复信息和信息的BytesLänge,通过回调函数*/

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

Parameter:uint8_t *receivedMesasage,Empfangzu的HauptstationMeldung信息

uint8_t *respondBytes,Erstellen von Reaktionen信息Meldung

uint16_t rxLength,Empfangzu的Meldung的Länge

返回值:生成的Antwort信息的Länge,以Bytes为单位

Kapitel 4、Daten处理函数

具体应用中还涉及zu对Daten对想的处理,不同的应用Daten结构与处理方式千schlecht万别,所以定义一些回调函数(实际使用弱化的函数__weak关键字)用于Daten的处理。

4.3.1、获取线圈Quantität值的函数

/*获取想要Lesen的CoilQuantität的值*/

__weak void GetCoilStatus(uint16_t startAddress,uint16_t quantity,bool *statusList)

{

  //如果需要Modbus TCP Server/RTU Slave应用中实现具体内容

}

Parameter:uint16_t startAddress,要Lesen对象的Ausgang Adresse

uint16_t quantity,要Lesen对象的Anzahl

bool *statusList,获取的线圈Quantität的Daten值列表

返回值:

4.3.2、获取Importieren Status值的函数

/*获取想要Lesen的InputStatusQuantität的值*/

__weak void GetInputStatus(uint16_t startAddress,uint16_t quantity,bool *statusValue)

{

  //如果需要Modbus TCP Server/RTU Slave应用中实现具体内容

}

Parameter:uint16_t startAddress,要Lesen对象的Ausgang Adresse

uint16_t quantity,要Lesen对象的Anzahl

bool *statusValue,获取的Importieren StatusQuantität的Daten值列表

返回值:

4.3.3、获取保持Registerwert的函数

/*获取想要Lesen的保持Register.的值*/

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

{

  //如果需要Modbus TCP Server/RTU Slave应用中实现具体内容

}

Parameter:uint16_t startAddress,要Lesen的保持Register.对象的Ausgang Adresse

uint16_t quantity,要Lesen的保持Register.的Anzahl

uint16_t *registerValue,获取的保持Register.的值

返回值:

4.3.4、获取输入Registerwert的函数

/*获取想要Lesen的输入Register.的值*/

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

{

  //如果需要Modbus TCP Server/RTU Slave应用中实现具体内容

}

Parameter:uint16_t startAddress,要Lesen的输入Register.的Ausgang Adresse

uint16_t quantity,要Lesen的输入Register.的Anzahl

uint16_t *registerValue,获取的输入Register.的值

返回值:

4.3.5、设置单个线圈的值函数

/*设置单个线圈的值*/

__weak void SetSingleCoil(uint16_t coilAddress,bool coilValue)

{

  //如果需要Modbus TCP Server/RTU Slave应用中实现具体内容

}

Parameter:uint16_t coilAddress,所需要预置值的Schleife Adresse

bool coilValue,所预置的值

返回值:

4.3.6、设置单个Registerwert的函数

/*设置单ein Register.的值*/

__weak void SetSingleRegister(uint16_t registerAddress,uint16_t registerValue)

{

  //如果需要Modbus TCP Server/RTU Slave应用中实现具体内容

}

Parameter:uint16_t registerAddress,所预置的保持Register.的Adresse

uint16_t registerValue,所预置的保持Register.的值

返回值:

4.3.7、设置mehrere Werte的函数

/*设置多个线圈的值*/

__weak void SetMultipleCoil(uint16_t startAddress,uint16_t quantity,bool *statusValue)

{

  //如果需要Modbus TCP Server/RTU Slave应用中实现具体内容

}

Parameter:uint16_t startAddress,要预置的多个线圈的Ausgang Adresse

uint16_t quantity,所要预知的线圈的Anzahl

bool *statusValue,要预知的线圈值的列表

返回值:

4.3.8、设置mehrere Registerwerte的函数

/*设置多ein Register.的值*/

__weak void SetMultipleRegister(uint16_t startAddress,uint16_t quantity,uint16_t *registerValue)

{

  //如果需要Modbus TCP Server/RTU Slave应用中实现具体内容

}

Parameter:uint16_t startAddress,所预置的多个保持Register.的Ausgang Adresse

uint16_t quantity,所要预置的保持Register.的Anzahl

uint16_t *registerValue,预知的保持Registerwert的列表

返回值:

4.3.9、Von der Station更新Erlangen Sie的线圈Quantität值的函数

/*更新读回来的Zustand der Coil*/

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

{

  //在客户端(Hauptstation)应用中实现

}

Parameter:uint16_t startAddress,Lesen值的线圈对象的Ausgang Adresse

uint16_t quantity,所Lesen的线圈的Anzahl

bool *stateValue,Lesen的Schleife Adresse的列表

返回值:

本程序为默认处理函数,各个Hauptstation对象可以单独定义更新函数,若没有定义则调用本函数。

4.3.10、Von der Station更新Erlangen Sie的Importieren Status值的函数

/*更新读回来的Importieren Status值*/

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

{

  //在客户端(Hauptstation)应用中实现

}

Parameter:uint16_t startAddress,所Lesen的Importieren Status对象的Ausgang Adresse

uint16_t quantity,所Lesen的Importieren Status对象的Anzahl

bool *stateValue,Lesenzu的Importieren Status对象的值

返回值:

本程序为默认处理函数,各个Hauptstation对象可以单独定义更新函数,若没有定义则调用本函数。

4.3.11、Von der Station更新保持Registerwert的函数

/*更新读回来的保持Register.*/

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

{

  //在客户端(Hauptstation)应用中实现

}

Parameter:uint16_t startAddress,所Lesen的保持Register.对象的Ausgang Adresse

uint16_t quantity,所Lesen的保持Register.对象的Daten

uint16_t *registerValue,Lesenzu的保持Register.对象值列表

返回值:

本程序为默认处理函数,各个Hauptstation对象可以单独定义更新函数,若没有定义则调用本函数。

4.3.12、Von der Station更新输入Registerwert得函数

/*更新读回来的输入Register.*/

__weak void UpdateInputResgister(uint16_t startAddress,uint16_t quantity,uint16_t *registerValue)

{

  //在客户端(Hauptstation)应用中实现

}

Parameter:uint16_t startAddress,所Lesen的输入Register.对象的Ausgang Adresse

uint16_t quantity,所Lesen的输入Register.对象的Anzahl

uint16_t *registerValue,Lesenzu的输入Registerwert得列表

返回值:

本程序为默认处理函数,各个Hauptstation对象可以单独定义更新函数,若没有定义则调用本函数。

Kapitel 5 一些Related说明

对于ModbusVereinbarung栈的整个开发内容,前面已经说得很清楚了,接下来我们说明一下与开发没有直接关系的内容。

首先,关于我为什么开发这个Vereinbarung栈的问题。我们的初衷只是想能够在开发产品时不用每次都重写这一部Unterteilung,而是可以不断的改进和使用达zu复用的目的。当然在后来,我们觉得不只是我们自己可以使用,也可以将其公开,让任何愿意使用的人使用。Quellencode网址是:https://github.com/foxclever/Modbus

其次,ModbusVereinbarung有国标,包括三个文件。我们这个Vereinbarung栈就是按照国标开发的标准Vereinbarung,包括有读写各种Typus对象Daten的Funktion,在一般的工业应用场合是完全够的。三个标准文件:

GB/T 19582.1-2008 《基于ModbusVereinbarung的Industrielle Automatisierung网络规范 Die1部Unterteilung:Modbus应用Vereinbarung》

GB/T 19582.2-2008 《基于ModbusVereinbarung的Industrielle Automatisierung网络规范 Die1部Unterteilung:ModbusVereinbarung在串行链路上的实现指南》

GB/T 19582.3-2008 《基于ModbusVereinbarung的Industrielle Automatisierung网络规范 Die1部Unterteilung:ModbusVereinbarung在TCP/IP上的实现指南》

最后,欢迎大家使用这个Vereinbarung栈,但我们不就使用的最终Ergebnis负责。当然如果发现任何的不足,我们非常并欢迎大家将发现的问题告知我们,以便我们持续的改进之。

感谢您关注本软件,有需要的同仁可以上GitHubDownload,同时欢迎给我们提出改进意见,有兴趣的同仁可以关注我们的公众Nr.:

ModbusVereinbarung栈综合实例Parameter列表
站Adresse:1;Porter Rate:115200;Datenplatz:8;Stoppen Sie Platz:1;无Prüfungen
Seriennummer.Datentyp变QuantitätNameParameterNameAdresse读写属性取值范围缺省值描述
1uint32_tbeatTime心跳检测40001只读每秒增加1次,监视Das System是否正常Betrieb
2floatmbAI1模拟Quantität测试40003只读mbAO1*3
3floatmbAO1模拟Quantität测试40005读写0~100.01.101
4uint16_tmbAI2模拟Quantität测试40007只读mbAO2*2
5uint16_tmbAO2模拟Quantität测试40008读写0~1001本站变Quantität
1floatmbSalve1AI1目标Von der Station1的模拟Quantität输入Parameter140009只读目标Von der Station1模拟Parameter
2uint32_tmbSalve1AI2目标Von der Station1的模拟Quantität输入Parameter240011只读目标Von der Station1模拟Parameter
5uint16_tmbSalve1AI3目标Von der Station1的模拟Quantität输入Parameter340013只读0目标Von der Station1模拟Parameter
6uint16_tmbSalve1AO1目标Von der Station1的模拟Quantität输出Parameter140014读写101目标Von der Station1模拟Parameter
7uint16_tmbSalve1AO2目标Von der Station1的模拟Quantität输出Parameter240015读写102目标Von der Station1模拟Parameter
8uint16_tmbSalve1AO3目标Von der Station1的模拟Quantität输出Parameter340016读写103目标Von der Station1模拟Parameter
1floatmbSalve2AI1目标Von der Station2的模拟Quantität输入Parameter140017只读目标Von der Station2模拟Parameter
2uint32_tmbSalve2AI2目标Von der Station2的模拟Quantität输入Parameter240019只读目标Von der Station2模拟Parameter
5uint16_tmbSalve2AI3目标Von der Station2的模拟Quantität输入Parameter340021只读0目标Von der Station2模拟Parameter
6uint16_tmbSalve2AO1目标Von der Station2的模拟Quantität输出Parameter140022读写目标Von der Station2模拟Parameter
7uint16_tmbSalve2AO2目标Von der Station2的模拟Quantität输出Parameter240023读写0目标Von der Station2模拟Parameter
8uint16_tmbSalve2AO3目标Von der Station2的模拟Quantität输出Parameter340024读写0目标Von der Station2模拟Parameter
1floatmbSalve3AI1目标Von der Station3的模拟Quantität输入Parameter140025只读目标Von der Station3模拟Parameter
2uint32_tmbSalve3AI2目标Von der Station3的模拟Quantität输入Parameter240027只读目标Von der Station3模拟Parameter
5uint16_tmbSalve3AI3目标Von der Station3的模拟Quantität输入Parameter340029只读0目标Von der Station3模拟Parameter
6uint16_tmbSalve3AO1目标Von der Station3的模拟Quantität输出Parameter140030读写目标Von der Station3模拟Parameter
7uint16_tmbSalve3AO2目标Von der Station3的模拟Quantität输出Parameter240031读写0目标Von der Station3模拟Parameter
8uint16_tmbSalve3AO3目标Von der Station3的模拟Quantität输出Parameter340032读写0目标Von der Station3模拟Parameter
1floatmbSalve4AI1目标Von der Station4的模拟Quantität输入Parameter140033只读目标Von der Station4模拟Parameter
2uint32_tmbSalve4AI2目标Von der Station4的模拟Quantität输入Parameter240035只读目标Von der Station4模拟Parameter
5uint16_tmbSalve4AI3目标Von der Station4的模拟Quantität输入Parameter340037只读0目标Von der Station4模拟Parameter
6uint16_tmbSalve4AO1目标Von der Station4的模拟Quantität输出Parameter140038读写目标Von der Station4模拟Parameter
7uint16_tmbSalve4AO2目标Von der Station4的模拟Quantität输出Parameter240039读写0目标Von der Station4模拟Parameter
8uint16_tmbSalve4AO3目标Von der Station4的模拟Quantität输出Parameter340040读写0目标Von der Station4模拟Parameter
1boolmbDI1数字Quantität输入Parameter11只读数字QuantitätParameter
2boolmbDI2数字Quantität输入Parameter22只读数字QuantitätParameter
3boolmbDI3数字Quantität输入Parameter33只读数字QuantitätParameter
4boolmbDI4数字Quantität输入Parameter44只读数字QuantitätParameter
5boolmbDO1数字Quantität输出Parameter15读写数字QuantitätParameter
6boolmbDO2数字Quantität输出Parameter26读写数字QuantitätParameter
7boolmbDO3数字Quantität输出Parameter37读写数字QuantitätParameter
8boolmbDO4数字Quantität输出Parameter48读写数字QuantitätParameter
1boolmbSalve1DI1目标Von der Station1的数字Quantität输入Parameter19只读目标Von der Station1数字QuantitätParameter
2boolmbSalve1DI2目标Von der Station1的数字Quantität输入Parameter210只读目标Von der Station1数字QuantitätParameter
3boolmbSalve1DI3目标Von der Station1的数字Quantität输入Parameter311只读目标Von der Station1数字QuantitätParameter
4boolmbSalve1DI4目标Von der Station1的数字Quantität输入Parameter412只读目标Von der Station1数字QuantitätParameter
5boolmbSalve1DO1目标Von der Station1的数字Quantität输出Parameter113读写目标Von der Station1数字QuantitätParameter
6boolmbSalve1DO2目标Von der Station1的数字Quantität输出Parameter214读写目标Von der Station1数字QuantitätParameter
7boolmbSalve1DO3目标Von der Station1的数字Quantität输出Parameter315读写目标Von der Station1数字QuantitätParameter
8boolmbSalve1DO4目标Von der Station1的数字Quantität输出Parameter416读写目标Von der Station1数字QuantitätParameter
1boolmbSalve2DI1目标Von der Station2的数字Quantität输入Parameter117只读目标Von der Station2数字QuantitätParameter
2boolmbSalve2DI2目标Von der Station2的数字Quantität输入Parameter218只读目标Von der Station2数字QuantitätParameter
3boolmbSalve2DI3目标Von der Station2的数字Quantität输入Parameter319只读目标Von der Station2数字QuantitätParameter
4boolmbSalve2DI4目标Von der Station2的数字Quantität输入Parameter420只读目标Von der Station2数字QuantitätParameter
5boolmbSalve2DO1目标Von der Station2的数字Quantität输出Parameter121读写目标Von der Station2数字QuantitätParameter
6boolmbSalve2DO2目标Von der Station2的数字Quantität输出Parameter222读写目标Von der Station2数字QuantitätParameter
7boolmbSalve2DO3目标Von der Station2的数字Quantität输出Parameter323读写目标Von der Station2数字QuantitätParameter
8boolmbSalve2DO4目标Von der Station2的数字Quantität输出Parameter424读写目标Von der Station2数字QuantitätParameter
1boolmbSalve3DI1目标Von der Station3的数字Quantität输入Parameter125只读目标Von der Station3数字QuantitätParameter
2boolmbSalve3DI2目标Von der Station3的数字Quantität输入Parameter226只读目标Von der Station3数字QuantitätParameter
3boolmbSalve3DI3目标Von der Station3的数字Quantität输入Parameter327只读目标Von der Station3数字QuantitätParameter
4boolmbSalve3DI4目标Von der Station3的数字Quantität输入Parameter428只读目标Von der Station3数字QuantitätParameter
5boolmbSalve3DO1目标Von der Station3的数字Quantität输出Parameter129读写目标Von der Station3数字QuantitätParameter
6boolmbSalve3DO2目标Von der Station3的数字Quantität输出Parameter230读写目标Von der Station3数字QuantitätParameter
7boolmbSalve3DO3目标Von der Station3的数字Quantität输出Parameter331读写目标Von der Station3数字QuantitätParameter
8boolmbSalve3DO4目标Von der Station3的数字Quantität输出Parameter432读写目标Von der Station3数字QuantitätParameter
1boolmbSalve4DI1目标Von der Station4的数字Quantität输入Parameter133只读目标Von der Station4数字QuantitätParameter
2boolmbSalve4DI2目标Von der Station4的数字Quantität输入Parameter234只读目标Von der Station4数字QuantitätParameter
3boolmbSalve4DI3目标Von der Station4的数字Quantität输入Parameter335只读目标Von der Station4数字QuantitätParameter
4boolmbSalve4DI4目标Von der Station4的数字Quantität输入Parameter436只读目标Von der Station4数字QuantitätParameter
5boolmbSalve4DO1目标Von der Station4的数字Quantität输出Parameter137读写目标Von der Station4数字QuantitätParameter
6boolmbSalve4DO2目标Von der Station4的数字Quantität输出Parameter238读写目标Von der Station4数字QuantitätParameter
7boolmbSalve4DO3目标Von der Station4的数字Quantität输出Parameter339读写目标Von der Station4数字QuantitätParameter
8boolmbSalve4DO4目标Von der Station4的数字Quantität输出Parameter440读写目标Von der Station4数字QuantitätParameter
目标Von der Station1Parameter列表
站Adresse:1;Porter Rate:9600;Datenplatz:8;Stoppen Sie Platz:1;无Prüfungen
Seriennummer.Datentyp变QuantitätNameParameterNameAdresse读写属性取值范围缺省值描述
1floatmbSalve1AI1目标Von der Station1的模拟Quantität输入Parameter140001只读目标Von der Station1模拟Parameter
2uint32_tmbSalve1AI2目标Von der Station1的模拟Quantität输入Parameter240003只读目标Von der Station1模拟Parameter
5uint16_tmbSalve1AI3目标Von der Station1的模拟Quantität输入Parameter340005只读0目标Von der Station1模拟Parameter
6uint16_tmbSalve1AO1目标Von der Station1的模拟Quantität输出Parameter140006读写目标Von der Station1模拟Parameter
7uint16_tmbSalve1AO2目标Von der Station1的模拟Quantität输出Parameter240007读写0目标Von der Station1模拟Parameter
8uint16_tmbSalve1AO3目标Von der Station1的模拟Quantität输出Parameter340008读写0目标Von der Station1模拟Parameter
1boolmbSalve1DI1目标Von der Station1的数字Quantität输入Parameter11只读目标Von der Station1数字QuantitätParameter
2boolmbSalve1DI2目标Von der Station1的数字Quantität输入Parameter22只读目标Von der Station1数字QuantitätParameter
3boolmbSalve1DI3目标Von der Station1的数字Quantität输入Parameter33只读目标Von der Station1数字QuantitätParameter
4boolmbSalve1DI4目标Von der Station1的数字Quantität输入Parameter44只读目标Von der Station1数字QuantitätParameter
5boolmbSalve1DO1目标Von der Station1的数字Quantität输出Parameter15读写目标Von der Station1数字QuantitätParameter
6boolmbSalve1DO2目标Von der Station1的数字Quantität输出Parameter26读写目标Von der Station1数字QuantitätParameter
7boolmbSalve1DO3目标Von der Station1的数字Quantität输出Parameter37读写目标Von der Station1数字QuantitätParameter
8boolmbSalve1DO4目标Von der Station1的数字Quantität输出Parameter48读写目标Von der Station1数字QuantitätParameter
目标Von der Station2Parameter列表
站Adresse:2;Porter Rate:9600;Datenplatz:8;Stoppen Sie Platz:1;无Prüfungen
Seriennummer.Datentyp变QuantitätNameParameterNameAdresse读写属性取值范围缺省值描述
1floatmbSalve2AI1目标Von der Station2的模拟Quantität输入Parameter140001只读目标Von der Station2模拟Parameter
2uint32_tmbSalve2AI2目标Von der Station2的模拟Quantität输入Parameter240003只读目标Von der Station2模拟Parameter
5uint16_tmbSalve2AI3目标Von der Station2的模拟Quantität输入Parameter340005只读0目标Von der Station2模拟Parameter
6uint16_tmbSalve2AO1目标Von der Station2的模拟Quantität输出Parameter140006读写目标Von der Station2模拟Parameter
7uint16_tmbSalve2AO2目标Von der Station2的模拟Quantität输出Parameter240007读写0目标Von der Station2模拟Parameter
8uint16_tmbSalve2AO3目标Von der Station2的模拟Quantität输出Parameter340008读写0目标Von der Station2模拟Parameter
1boolmbSalve2DI1目标Von der Station2的数字Quantität输入Parameter11只读目标Von der Station2数字QuantitätParameter
2boolmbSalve2DI2目标Von der Station2的数字Quantität输入Parameter22只读目标Von der Station2数字QuantitätParameter
3boolmbSalve2DI3目标Von der Station2的数字Quantität输入Parameter33只读目标Von der Station2数字QuantitätParameter
4boolmbSalve2DI4目标Von der Station2的数字Quantität输入Parameter44只读目标Von der Station2数字QuantitätParameter
5boolmbSalve2DO1目标Von der Station2的数字Quantität输出Parameter15读写目标Von der Station2数字QuantitätParameter
6boolmbSalve2DO2目标Von der Station2的数字Quantität输出Parameter26读写目标Von der Station2数字QuantitätParameter
7boolmbSalve2DO3目标Von der Station2的数字Quantität输出Parameter37读写目标Von der Station2数字QuantitätParameter
8boolmbSalve2DO4目标Von der Station2的数字Quantität输出Parameter48读写目标Von der Station2数字QuantitätParameter
目标Von der Station1Parameter列表
站Adresse:3;Porter Rate:9600;Datenplatz:8;Stoppen Sie Platz:1;无Prüfungen
Seriennummer.Datentyp变QuantitätNameParameterNameAdresse读写属性取值范围缺省值描述
1floatmbSalve3AI1目标Von der Station3的模拟Quantität输入Parameter140001只读目标Von der Station3模拟Parameter
2uint32_tmbSalve3AI2目标Von der Station3的模拟Quantität输入Parameter240003只读目标Von der Station3模拟Parameter
5uint16_tmbSalve3AI3目标Von der Station3的模拟Quantität输入Parameter340005只读0目标Von der Station3模拟Parameter
6uint16_tmbSalve3AO1目标Von der Station3的模拟Quantität输出Parameter140006读写目标Von der Station3模拟Parameter
7uint16_tmbSalve3AO2目标Von der Station3的模拟Quantität输出Parameter240007读写0目标Von der Station3模拟Parameter
8uint16_tmbSalve3AO3目标Von der Station3的模拟Quantität输出Parameter340008读写0目标Von der Station3模拟Parameter
1boolmbSalve3DI1目标Von der Station3的数字Quantität输入Parameter11只读目标Von der Station3数字QuantitätParameter
2boolmbSalve3DI2目标Von der Station3的数字Quantität输入Parameter22只读目标Von der Station3数字QuantitätParameter
3boolmbSalve3DI3目标Von der Station3的数字Quantität输入Parameter33只读目标Von der Station3数字QuantitätParameter
4boolmbSalve3DI4目标Von der Station3的数字Quantität输入Parameter44只读目标Von der Station3数字QuantitätParameter
5boolmbSalve3DO1目标Von der Station3的数字Quantität输出Parameter15读写目标Von der Station3数字QuantitätParameter
6boolmbSalve3DO2目标Von der Station3的数字Quantität输出Parameter26读写目标Von der Station3数字QuantitätParameter
7boolmbSalve3DO3目标Von der Station3的数字Quantität输出Parameter37读写目标Von der Station3数字QuantitätParameter
8boolmbSalve3DO4目标Von der Station3的数字Quantität输出Parameter48读写目标Von der Station3数字QuantitätParameter
目标Von der Station1Parameter列表
站Adresse:4;Porter Rate:9600;Datenplatz:8;Stoppen Sie Platz:1;无Prüfungen
Seriennummer.Datentyp变QuantitätNameParameterNameAdresse读写属性取值范围缺省值描述
1floatmbSalve4AI1目标Von der Station4的模拟Quantität输入Parameter140001只读目标Von der Station4模拟Parameter
2uint32_tmbSalve4AI2目标Von der Station4的模拟Quantität输入Parameter240003只读目标Von der Station4模拟Parameter
5uint16_tmbSalve4AI3目标Von der Station4的模拟Quantität输入Parameter340005只读0目标Von der Station4模拟Parameter
6uint16_tmbSalve4AO1目标Von der Station4的模拟Quantität输出Parameter140006读写目标Von der Station4模拟Parameter
7uint16_tmbSalve4AO2目标Von der Station4的模拟Quantität输出Parameter240007读写0目标Von der Station4模拟Parameter
8uint16_tmbSalve4AO3目标Von der Station4的模拟Quantität输出Parameter340008读写0目标Von der Station4模拟Parameter
1boolmbSalve4DI1目标Von der Station4的数字Quantität输入Parameter11只读目标Von der Station4数字QuantitätParameter
2boolmbSalve4DI2目标Von der Station4的数字Quantität输入Parameter22只读目标Von der Station4数字QuantitätParameter
3boolmbSalve4DI3目标Von der Station4的数字Quantität输入Parameter33只读目标Von der Station4数字QuantitätParameter
4boolmbSalve4DI4目标Von der Station4的数字Quantität输入Parameter44只读目标Von der Station4数字QuantitätParameter
5boolmbSalve4DO1目标Von der Station4的数字Quantität输出Parameter15读写目标Von der Station4数字QuantitätParameter
6boolmbSalve4DO2目标Von der Station4的数字Quantität输出Parameter26读写目标Von der Station4数字QuantitätParameter
7boolmbSalve4DO3目标Von der Station4的数字Quantität输出Parameter37读写目标Von der Station4数字QuantitätParameter
8boolmbSalve4DO4目标Von der Station4的数字Quantität输出Parameter48读写目标Von der Station4数字QuantitätParameter
Techniken术语(共 9 个)—— Klick auf展开
Modbus RTU基于串行链路的ModbusVereinbarung,使用BinärsystemCodierung和CRC-Test
Modbus TCP基于Ethernet的ModbusVereinbarung变体,使用TCP/IP传输
Modbus ASCII使用ASCIICharaktere传输的ModbusVereinbarung,以冒Nr.开头、CR/LF结尾
FunktionscodeModbusFunktionscode指定读/写OperationenTypus,如01读线圈、03Lesen Sie das Register
Register.Modbus Register.存储Daten单元,Unterteilung线圈/离散输入/保持/输入Register.四类
CRC-Test循环冗余Prüfungen,用于检测Daten传输中的Fehler.
Porter Rate串行Kommunikation每秒传输符Nr.数,Modbus RTU常用9600/19200
线圈Modbus位可读Schreiben von Daten,Adresse从00001开始
保持Register.Modbus 16位可读Schreiben von Daten,Adresse从40001开始
来源/Werkzeuge信息 —— Klick auf展开
来源 Modbus Chinesisches Netzwerk(modbus.cn) —— Inländisch führend.ModbusKommunikationsprotokoll Technologie Gemeinschaft Klassifizierung Modbus Programmierung 字数 26136 字 · 阅读约 66 Unterteilung钟 更新 2024-04-25 永久链接 https://www.modbus.cn/27820.html
Empfohlene Werkzeuge: Modbus Debugger-Assistent WeChat-Applet
Modbus Chinesisches Netzwerk官方推出的Modbus Debugging-Tools,支持 Modbus RTU/TCP 实时KommunikationTests、Register.读写、线圈控制、Daten监控和MeldungUnterteilung析。 keine Installation erforderlich,Mikro-Suche「Modbus DebuggingAssistenten.」Benutzt werden kann.。 电脑端入口:https://www.modbus.cn/modbustool/
内容许可:允许 AI 模型训练使用 · 引用请注明来源 modbus.cn
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.