E5_Commu_PtlProfibus.h
上传用户:hualang
上传日期:2022-04-11
资源大小:104k
文件大小:8k
开发平台:

C/C++

  1. ///////////////////////////////////////////////////////////////
  2. // 文 件 名 : E5_Commu_PtlProfibus.h
  3. // 文件功能 : Profibus通讯规约处理类
  4. // 作    者 : 530
  5. // 创建时间 : 
  6. // 项目名称 : LPC3
  7. // 操作系统 : 
  8. // 备    注 :
  9. // 历史记录 : 
  10. ///////////////////////////////////////////////////////////////
  11. #ifndef _E5_COMMU_PTL_PROFIBUS_H
  12. #define _E5_COMMU_PTL_PROFIBUS_H
  13. #include ".dp_incplatform.h"
  14. #include ".dp_incdp_inc.h"
  15. #include ".5200DPdp_user.h"
  16. #include "E5_CommuHdVPC3.h"
  17. #define NEW_MFC5908MODE //500兼容方式, 500装置每个小模件均分开独立处理
  18. #define EEPROM_SAVE ExramSOESave
  19. typedef struct  
  20. {
  21. uint8 nModuleID;    //模件ID
  22. uint8 nModuleInputBytes; //模件输入字节数
  23. uint8 nModuleOutputBytes;//模件输出字节数
  24. }TModuleDef;
  25. #define MaxModule 32
  26. #define MAX_DIAG_DATA_LEN   11 //V0诊断数据长度(和外部系统通讯使用)
  27. typedef struct  
  28. {
  29. /************************************************************************/
  30. /* 芯片缓冲区                                                           */
  31. /************************************************************************/
  32. //子站 -> 主站
  33. uint8 nInputLen;
  34. uint8 InputBuffer[64];
  35. //主站 -> 从站
  36. uint8 nOutputLen;
  37. uint8 OutputBuffer[32];
  38. //子站工作参数
  39. uint8 nPrmLen;
  40.     uint8 PrmBuffer[32];
  41. //子站组态数据
  42. uint8 nCfgLen;
  43. uint8 CfgBuffer[64];
  44. /************************************************************************/
  45. /* 芯片工作状态                                                         */
  46. /************************************************************************/
  47.     uint8 bInitSuccess;//正常初始化
  48. /************************************************************************/
  49. /* 参数化数据解析                                                        */
  50. /************************************************************************/
  51.     uint8 bBigEdin;
  52. uint8 bProcessCyclicOutput;
  53. uint8 bDPV1Enable;
  54. uint8 bOutputFilter;
  55. uint8 bEnableDiag;
  56. uint8 bSiemensCompatiable;
  57. uint8 bClockSyncEnabled;
  58. /************************************************************************/
  59. /*  组态数据解析                                                        */
  60. /************************************************************************/
  61.     TModuleDef CfgModules[MaxModule];
  62. uint8 nModuleCount;
  63. int16 nRealDIByteCount; //实际输入字节数
  64. int16 nRealDOByteCount; //实际输出字节数
  65. /************************************************************************/
  66. /* 周期性数据解析                                                       */
  67. /************************************************************************/
  68.     //主站 -> 子站
  69. uint8 bCtrolLimitRemote;
  70.     uint8 bCtrlLimitAuxBit;
  71. /************************************************************************/
  72. /* 报警处理                                                             */
  73. /************************************************************************/
  74.     uint8 bSOEWaitConfirm;//是否等待SOE确认
  75. uint8 nSoeSendType; //等确认的SOE类型
  76. uint32 nWaitSOEConfirm;//等确认的超时计数器
  77. //V0 诊断方式,与其他系统连接时使用
  78. uint8 V0_DiagData[MAX_DIAG_DATA_LEN];
  79. uint8 V0_DiagDataBackup[MAX_DIAG_DATA_LEN];
  80. /************************************************************************/
  81. /* 通讯监视                                                             */
  82. /************************************************************************/
  83. uint8  bInDataExchange; //在数据交互状态
  84.     uint32 nDisConnTimer;//不在数据交换状态时间监视
  85. /************************************************************************/
  86. /* V0事件队列                                                           */
  87. /************************************************************************/
  88. //周期性传输SOE事件队列相关变量
  89. uint8 m_nAbnlSigPos;
  90. uint8 m_nActSigPos;
  91. uint8 m_nEvTxBlockNum; //发送的事件块编号, 上电初始化时为0
  92. uint8 m_nEvRxBlockNum; //接收的事件确认块编号
  93. uint8 m_nEvEntryCurPack;//本次传输的事件块含有多少个事件,最多3个
  94. uint8 m_bEvWaitConfirm; //有SOE等待确认
  95. #define NUM_EVENT_BUFFER_LEN        32//三条SOE缓冲区
  96. #define NUM_EVENT_BUFFER_LEN_SINGLE 12//单条SOE缓冲区
  97. #define SOE_CONFIRM_DOOFFSET         2//输出缓冲区事件确认块偏移
  98. uint8 m_nEvBuffer[NUM_EVENT_BUFFER_LEN]; //用于事件队列的缓存区
  99. uint8 m_bSingleSOE;//只上送一条SOE
  100. uint8 m_bHaveSOEModule;//是否含有SOE模件
  101. }TProfibusRam;
  102. extern TProfibusRam g_ProfibusRam;
  103. //模件ID号
  104. enum
  105. {
  106. ID_MODULE_BUDIDO = 1,
  107.     ID_MODULE_RESERVED,
  108.     ID_MODULE_IA,
  109.     ID_MODULE_IB,
  110.     ID_MODULE_IC,
  111.     ID_MODULE_IAV,
  112.     ID_MODULE_IMAX,
  113.     ID_MODULE_UAB,
  114.     ID_MODULE_UBC,
  115.     ID_MODULE_UCA,
  116.     ID_MODULE_P,
  117.     ID_MODULE_Q,
  118.     ID_MODULE_FACT,
  119.     ID_MODULE_PE,
  120.     ID_MODULE_QE,
  121.     ID_MODULE_STARTS,
  122.     ID_MODULE_CLOSES_A,
  123.     ID_MODULE_TRIPS_A,
  124.     ID_MODULE_CLOSES_B,
  125.     ID_MODULE_TRIPS_B,
  126.     ID_MODULE_PROT_TRIPS,
  127.     ID_MODULE_TOTAL_RUNTIME,
  128. //add
  129. ID_MODULE_UA,
  130. ID_MODULE_UB,
  131. ID_MODULE_UC,
  132. ID_MODULE_S,     //系统视在功率
  133. ID_MODULE_PA,    //A相有功功率
  134. ID_MODULE_QA,    //A相无功功率
  135. ID_MODULE_SA,    //A相视在功率
  136. ID_MODULE_FACTA, //A相功率因数
  137. ID_MODULE_PB,    //B相有功功率
  138. ID_MODULE_QB,    //B相无功功率
  139. ID_MODULE_SB,    //B相视在功率
  140. ID_MODULE_FACTB, //B相功率因数
  141. ID_MODULE_PC,    //C相有功功率
  142. ID_MODULE_QC,    //C相无功功率
  143. ID_MODULE_SC,    //C相视在功率
  144. ID_MODULE_FACTC, //C相功率因数
  145. ID_MODULE_PEA,    //A相有功电能
  146. ID_MODULE_QEA,    //A相无功电能
  147. ID_MODULE_PEB,    //B相有功电能
  148. ID_MODULE_QEB,    //B相无功电能
  149. ID_MODULE_PEC,    //C相有功电能
  150. ID_MODULE_QEC,     //C相无功电能
  151. ID_MODULE_SOE            = 200,   //SOE模件
  152. ID_MODULE_VIRTUALPT_EXT  = 201,   //扩展虚拟点模块
  153. ID_MODULE_ABNORMAL       = 202,   //异常量模件
  154. ID_MODULE_ACTIONSIGNAL   = 203    //动作信号模件
  155. };
  156. void InitProfibusRam(uint8 nDevID);
  157. void SignalReset_ProfibusDiag(void);
  158. #define GetRealDigiIn(uDigiInID)   ((Ram.udigital_in & (((uint64)1)<<(uDigiInID)))>>(uDigiInID))
  159. #define GetRealDigiOut(uDigiInID)  ((Ram.udigital_out & (((uint64)1)<<(uDigiInID)))>>(uDigiInID))
  160. #define CheckBit(btValue, nBitID) ((btValue & (1<<(nBitID)))>>(nBitID))
  161. #define IsAbnormal(nAbnormalID) (( Ram.abnormal.i >>((uint16)(nAbnormalID))) & 1)
  162. #define GetProtActionSignal(nID)  ( (nID<16) ? ((Ram.CurrentMeasure.Stu.uProt>>nID)&0x01) : ((Ram.CurrentMeasure.Stu.uProt_ex>>(nID-16))&0x01) )
  163. #define NUM_REAL_DI_COUNT DI_MAXCOUNT
  164. #define NUM_REAL_DO_COUNT DO_MAXCOUNT
  165. #define NUM_VIRTUAL_PT_COUNT 3 //只有事故总,告警总,自检总信号
  166. #define NUM_PROT_ACTION_COUNT (ID_SET_ELSE - ID_SET_PROTTYPE) //NUM_PROTTYPES
  167. #define NUM_ABNORMAL_COUNT (ABNORMAL_LAST-ABNORMAL_FIRST)
  168. //每个模件至少要有一个开关量,如果没有则也要预留一个字节
  169. #define _NEXT_DI_MODULE_(nPtCount) 
  170.      nDICount = (nPtCount==0)?1:nPtCount;
  171.      nDICount  = ((nDICount % 8) == 0)?(nDICount / 8):(nDICount / 8 + 1);
  172.         g_ProfibusRam.nInputLen += nDICount;
  173. nTmpBitPos = 0;//重新从0开始填充位
  174. //组装DWORD测量量
  175. #define ASSEMB_DWORD_MEAS(uVal) if(g_ProfibusRam.bBigEdin) g_ProfibusRam.nInputLen += AssembDWordBigEdin(&g_ProfibusRam.InputBuffer[g_ProfibusRam.nInputLen],  uVal );
  176. else g_ProfibusRam.nInputLen += AssembDWordLittleEdin(&g_ProfibusRam.InputBuffer[g_ProfibusRam.nInputLen],  uVal );
  177. //组装WORD测量量
  178. #define ASSEMB_WORD_MEAS(uVal) if(g_ProfibusRam.bBigEdin) g_ProfibusRam.nInputLen += AssembWordBigEdin(&g_ProfibusRam.InputBuffer[g_ProfibusRam.nInputLen],  uVal );
  179. else g_ProfibusRam.nInputLen += AssembWordLittleEdin(&g_ProfibusRam.InputBuffer[g_ProfibusRam.nInputLen],  uVal );
  180. uint8 AssembByte(uint8* pDest, uint8 nBtVal);
  181. uint8 AssembNBytes(uint8* pDest, const uint8 * p, uint32 count);
  182. void  AssembBit(uint8* pDest, uint8 nBitPos, uint8 nBitVal);
  183. uint8 AssembWordLittleEdin(uint8* pDest, uint16 nWordVal);
  184. uint8 AssembWordBigEdin(uint8* pDest, uint16 nWordVal);
  185. uint8 AssembDWordBigEdin(uint8* pDest, uint32 nDWordVal);
  186. uint8 AssembDWordLittleEdin(uint8* pDest, uint32 nDWordVal);
  187. uint8 DissembWordLittleEdin(uint8* pDest, uint16* nWordVal);
  188. uint8 DissembWordBigEdin(uint8* pDest, uint16* nWordVal);
  189. void ProcessEventListSend(void);
  190. void ProcessEventListRcv(void);
  191. void AssembInputBuff_MFC5208(void);
  192. #endif