gfambrtumst.h 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. // gfambrtumst.h :
  2. //
  3. #if !defined(AGD_GFAMBRTUMST_H__F97088DB_3E1B_4FC8_A313_476634890514__INCLUDED_)
  4. #define AGD_GFAMBRTUMST_H__F97088DB_3E1B_4FC8_A313_476634890514__INCLUDED_
  5. #include <gfautils.h>
  6. #include <gfambrtucom.h>
  7. #ifdef __cplusplus
  8. extern "C" {
  9. #endif // __cplusplus
  10. /////////////////////////////////////////////////////////////////////////////
  11. // mbrtumast.h - Declarations:
  12. typedef void *HMBRTUMST;
  13. /////////////////////////////////////////////////////////////////////////////
  14. // error codes
  15. #define GFA_MB_MST_ERROR_INVALID_SLAVE_ID 0x0001
  16. #define GFA_MB_MST_ERROR_INVALID_FUNCTION 0x0002
  17. #define GFA_MB_MST_ERROR_SLAVE_ERROR 0x0003
  18. #define GFA_MB_MST_ERROR_SLAVE_RESPONSE_TIMEOUT 0x0004
  19. #define GFA_MB_MST_ERROR_SLAVE_CHAR_TIMEOUT 0x0005
  20. #define GFA_MB_MST_ERROR_SLAVE_INVALID_CRC 0x0006
  21. #define GFA_MB_MST_ERROR_SLAVE_INVALID_DATA 0x0007
  22. #define GFA_MB_MST_ERROR_UNEXPECTED 0xFFFF
  23. /////////////////////////////////////////////////////////////////////////////
  24. typedef enum _GFA_MODBUS_RTU_MST_STATES
  25. {
  26. MB_RTU_MST_Void = -1,
  27. MB_RTU_MST_Idle,
  28. MB_RTU_MST_TxStart,
  29. MB_RTU_MST_TxWaitEnd,
  30. MB_RTU_MST_TxDone,
  31. MB_RTU_MST_WaitRxFifo,
  32. MB_RTU_MST_RxSlvID,
  33. MB_RTU_MST_RxFunc,
  34. MB_RTU_MST_RxData,
  35. MB_RTU_MST_RxError,
  36. MB_RTU_MST_RxCRC,
  37. MB_RTU_MST_RxFinalize,
  38. MB_RTU_MST_ReportError
  39. }GFA_MODBUS_RTU_MST_STATES;
  40. /////////////////////////////////////////////////////////////////////////////
  41. typedef void (*PFN_GFA_RAW_REQUEST_COMPLETE) (uint32_t nTID, uint8_t nSlvID, uint16_t err, LPCMODBUS_RTU_ADU padu, size_t nCbData, void *pParam);
  42. typedef void (*PFN_GFA_READ_REGISTERS_COMPLETE) (uint32_t nTID, uint8_t nSlvID, uint16_t err, const uint16_t *pRegs, size_t nRegCount);
  43. typedef void (*PFN_GFA_PRESET_SINGLE_REGISTER_COMPLETE) (uint32_t nTID, uint8_t nSlvID, uint16_t err);
  44. typedef void (*PFN_GFA_WRITE_REGISTERS_COMPLETE) (uint32_t nTID, uint8_t nSlvID, uint16_t err, uint16_t nRegStart, uint16_t nRegsWritten);
  45. typedef void (*PFN_GFA_DIAGNOSIS_COMPLETE) (uint32_t nTID, uint8_t nSlvID, uint16_t err, uint16_t nSubFunc, uint16_t nData);
  46. typedef void (*PFN_GFA_REPORT_SLAVE_ID_COMPLETE) (uint32_t nTID, uint8_t nSlvID, uint16_t err, const void *pData, size_t nCbData);
  47. /////////////////////////////////////////////////////////////////////////////
  48. typedef void (*PFN_GFA_MASTER_STATE_CHANGED) (GFA_MODBUS_RTU_MST_STATES newState, GFA_MODBUS_RTU_MST_STATES oldState);
  49. typedef void (*PFN_GFA_MASTER_PRE_TRANSMIT) (uint32_t nTID, uint8_t nSlvID);
  50. typedef void (*PFN_GFA_MASTER_POST_TRANSMIT) (uint32_t nTID, uint8_t nSlvID);
  51. typedef void (*PFN_GFA_MASTER_RECEIVE_START) (uint32_t nTID);
  52. typedef void (*PFN_GFA_MASTER_RECEIVE_END) (uint32_t nTID);
  53. typedef struct _GFA_MODBUS_MASTER_APP_INTERFACE
  54. {
  55. PFN_GFA_MASTER_STATE_CHANGED pfnStateChanged;
  56. PFN_GFA_MASTER_PRE_TRANSMIT pfnPreTx;
  57. PFN_GFA_MASTER_POST_TRANSMIT pfnPostTx;
  58. PFN_GFA_MASTER_RECEIVE_START pfnRxStart;
  59. PFN_GFA_MASTER_RECEIVE_END pfnRxEnd;
  60. }GFA_MODBUS_MASTER_APP_INTERFACE, *LPGFA_MODBUS_MASTER_APP_INTERFACE;
  61. typedef const GFA_MODBUS_MASTER_APP_INTERFACE *LPCGFA_MODBUS_MASTER_APP_INTERFACE;
  62. /////////////////////////////////////////////////////////////////////////////
  63. typedef struct _GFA_MODBUS_RTU_MASTER_PARAMETERS
  64. {
  65. HFIFO hFifoRX;
  66. HFIFO hFifoTX;
  67. uint64_t nRxTimeoutUs;
  68. GFA_MODBUS_PROTOCOL_TIMEOUTS mpt;
  69. GFA_MODBUS_MASTER_APP_INTERFACE appItf;
  70. }GFA_MODBUS_RTU_MASTER_PARAMETERS, *LPGFA_MODBUS_RTU_MASTER_PARAMETERS;
  71. typedef const GFA_MODBUS_RTU_MASTER_PARAMETERS *LPCGFA_MODBUS_RTU_MASTER_PARAMETERS;
  72. /////////////////////////////////////////////////////////////////////////////
  73. HMBRTUMST GfaModbusRTUMstCreate(LPCGFA_MODBUS_RTU_MASTER_PARAMETERS pmap);
  74. void GfaModbusRTUMstRelease(HMBRTUMST hMbMst);
  75. bool GfaModbusRTUMstStateMachine(HMBRTUMST hMbMst);
  76. bool GfaModbusRTUMstSendRawRequest(HMBRTUMST hMbMst, uint32_t nTID, uint8_t nSlvID, uint8_t nFunc, const void *pData, size_t nCbData, size_t nCbDataExpected, PFN_GFA_RAW_REQUEST_COMPLETE pfnRawReqComplete, void *pParam);
  77. bool GfaModbusRTUMstReadHoldingRegisters(HMBRTUMST hMbMst, uint32_t nTID, uint8_t nSlvID, uint16_t nRegStart, uint16_t nRegCount, PFN_GFA_READ_REGISTERS_COMPLETE pfnReadRegsComplete);
  78. bool GfaModbusRTUMstReadInputRegisters(HMBRTUMST hMbMst, uint32_t nTID, uint8_t nSlvID, uint16_t nRegStart, uint16_t nRegCount, PFN_GFA_READ_REGISTERS_COMPLETE pfnReadRegsComplete);
  79. bool GfaModbusRTUMstWriteMultipleRegisters(HMBRTUMST hMbMst, uint32_t nTID, uint8_t nSlvID, uint16_t nRegStart, uint16_t nRegCount, const void *pRegData, PFN_GFA_WRITE_REGISTERS_COMPLETE pfnWriteRegsComplete);
  80. bool GfaModbusRTUMstPresetSingleRegister(HMBRTUMST hMbMst, uint32_t nTID, uint8_t nSlvID, uint16_t nRegAddr, uint16_t nRegVal, PFN_GFA_PRESET_SINGLE_REGISTER_COMPLETE pfnPresetRegComplete);
  81. bool GfaModbusRTUMstDiagnosis(HMBRTUMST hMbMst, uint32_t nTID, uint8_t nSlvID, uint16_t nSubFunc, uint16_t nData, PFN_GFA_DIAGNOSIS_COMPLETE pfnDiagComplete);
  82. bool GfaModbusRTUMstReportSlaveID(HMBRTUMST hMbMst, uint32_t nTID, uint8_t nSlvID, size_t nCbDataExpected, PFN_GFA_REPORT_SLAVE_ID_COMPLETE pfnRepSlvIDComplete);
  83. /////////////////////////////////////////////////////////////////////////////
  84. /////////////////////////////////////////////////////////////////////////////
  85. /////////////////////////////////////////////////////////////////////////////
  86. // Metronik support
  87. /*
  88. *
  89. * ACHTUNG:
  90. * Befindet sich der Sensors am Bus mit anderen Teilnehmern führt ein Pollen der Slaves mit einem Frame-Delay < 10 ms zu Timeout-Problemen des Sensors!
  91. *
  92. */
  93. #define GFA_MB_ILM_FUNC_READ_UV ((uint8_t)0x41)
  94. #define GFA_MB_ILM_FUNC_READ_TEMP ((uint8_t)0x42)
  95. #define GFA_MB_ILM_FUNC_UNLOCK ((uint8_t)0x43)
  96. #define GFA_MB_ILM_FUNC_NEW_ADDR ((uint8_t)0x44)
  97. #define GFA_MB_ILM_FUNC_READ_RANGE ((uint8_t)0x45)
  98. #define GFA_MB_ILM_FUNC_READ_SERIAL ((uint8_t)0x46)
  99. /////////////////////////////////////////////////////////////////////////////
  100. typedef void (*PFN_GFA_ILM_READ_UV_COMPLETE) (uint32_t nTID, uint8_t nSlvID, uint16_t err, uint16_t nVal);
  101. typedef void (*PFN_GFA_ILM_READ_TEMP_COMPLETE) (uint32_t nTID, uint8_t nSlvID, uint16_t err, uint8_t nVal);
  102. typedef void (*PFN_GFA_ILM_READ_UNLOCK_COMPLETE) (uint32_t nTID, uint8_t nSlvID, uint16_t err, uint8_t nVal);
  103. typedef void (*PFN_GFA_ILM_NEW_ADDR_COMPLETE) (uint32_t nTID, uint8_t nSlvID, uint16_t err, uint8_t nVal);
  104. typedef void (*PFN_GFA_ILM_READ_RANGE_COMPLETE) (uint32_t nTID, uint8_t nSlvID, uint16_t err, uint16_t nVal);
  105. typedef void (*PFN_GFA_ILM_READ_SERIAL_COMPLETE) (uint32_t nTID, uint8_t nSlvID, uint16_t err, const uint8_t *pVal, size_t nCbVal);
  106. /////////////////////////////////////////////////////////////////////////////
  107. bool GfaModbusRTUMstILMReadUV(HMBRTUMST hMbMst, uint32_t nTID, uint8_t nSlvID, PFN_GFA_ILM_READ_UV_COMPLETE pfnReadUvComplete);
  108. bool GfaModbusRTUMstILMReadTemp(HMBRTUMST hMbMst, uint32_t nTID, uint8_t nSlvID, PFN_GFA_ILM_READ_TEMP_COMPLETE pfnReadTempComplete);
  109. bool GfaModbusRTUMstILMUnlock(HMBRTUMST hMbMst, uint32_t nTID, uint8_t nSlvID, PFN_GFA_ILM_READ_UNLOCK_COMPLETE pfnUnlockComplete);
  110. bool GfaModbusRTUMstILMReadRange(HMBRTUMST hMbMst, uint32_t nTID, uint8_t nSlvID, PFN_GFA_ILM_READ_RANGE_COMPLETE pfnReadRangeComplete);
  111. bool GfaModbusRTUMstILMReadSerial(HMBRTUMST hMbMst, uint32_t nTID, uint8_t nSlvID, PFN_GFA_ILM_READ_SERIAL_COMPLETE pfnReadSerialComplete);
  112. /*
  113. * GfaModbusRTUMstILMNewAddr: Weist dem Sensor eine neue Slave-Adresse zu.
  114. * Achtung: Der Sensor antwortet bei Erfolg bereits mit der neuen Slave-Adresse im Antwort-Frame!!!
  115. * Der Master ruft im Anschluss die Completion-Funktion mit dem Fehlercode GFA_MB_MST_ERROR_INVALID_SLAVE_ID (1) auf!
  116. * Die neue Slave-Adresse wurde in diesem Fall aber erfolgreich im Slave gesetzt!
  117. *
  118. * Achtung: Der Sensor akzeptiert die Broadcast-Adresse 0 als Slave-ID!!!! Diese sollte niemals gesetzt werden!
  119. */
  120. bool GfaModbusRTUMstILMNewAddr(HMBRTUMST hMbMst, uint32_t nTID, uint8_t nSlvID, uint8_t nNewAddr, PFN_GFA_ILM_NEW_ADDR_COMPLETE pfnNewAddrComplete);
  121. /////////////////////////////////////////////////////////////////////////////
  122. #ifdef __cplusplus
  123. }
  124. #endif // __cplusplus
  125. #endif // !defined(AGD_GFAMBRTUMST_H__F97088DB_3E1B_4FC8_A313_476634890514__INCLUDED_)