📄 functions.h
字号:
#ifndef FUNCTIONS_H
#define FUNCTIONS_H
#include <windows.h>
#include <wchar.h>
#include <rtapi.h>
#include "..\include\SoftSercansdefs.h"
extern char * pbBaseAdress;
extern BOOL DriveExist[256];
typedef struct
{
ULONG ulIdent_Nbr;
USHORT usACT_LEN;
USHORT usMAX_LEN;
LARGE_INTEGER Data_Cont;
USHORT uControlWord;
USHORT uStatusWord;
ULONG ulAttribute;
}NC_SERVICE_CHN;
typedef struct
{
HANDLE ACPH_CNL; /* Handle fuer Shared-Memory */
HANDLE ACPH_FLAG; /* Handle fuer Signal-Flag */
HANDLE ACPH_BUSY; /* Handle fuer Busy-Flag */
HANDLE ACPH_READY; /* Handle fuer Ready-Flag */
HANDLE DIAG_FLAG; /* Handle fuer Signal-Flag Diagnose-Kanal */
HANDLE SOFT_SYNC; /* Handle fuer triger MDT copy */
T_CYC_DATA *CYCLE_DATA_MDT; /* Buffer fuer MDT-Daten */
T_CYC_DATA *CYCLE_DATA_AT; /* Buffer fuer AT-Daten */
HANDLE REAL_CNL;
HANDLE hInterrupt; /* Handle fuer Attach und Release-Interrupt */
T_IPC_NAMES *pSMemNames; /* Namensliste aller named objects */
DIAGNOSE *DIAG_CNL;
HANDLE SYST_CNL; /* Handle fuer Shared-Memory */
HANDLE SYST_FLAG; /* Handle fuer Signal-Flag */
HANDLE SYST_BUSY; /* Handle fuer Busy-Flag */
HANDLE SYST_READY; /* Handle fuer Ready-Flag */
HANDLE TERMINATE_FLAG;
} T_IPC_HANDLES;
typedef struct
{
char Name[5]; /* Task name: NDEF, TERM, MUGE... */
unsigned long TaskID; /* pSOS task identifier */
unsigned short Status;
HANDLE TaskHandle;
/* Variable Status describes the task state as follows:
NDEF (0) Task is not defined yet or after 't_delete'
CREATED (1) Task is created, 't_create'
SUSPENDED (2) Task is suspended, 't_suspend'
STARTED (3) Task is started, 't_start', 't_restart' or 't_resume'
READY (4) Task is ready to work, after initialization section */
} SCS_TASK_t;
//Service Channel
#define WAIT_TIME 30
#define SVCH_IN_USE 0
#define SVCH_NO_READ 1
#define SVCH_NO_WRITE 2
#define SVCH_ERROR 3
#define SVCH_IN_PROGRESS 4
#define SVCH_FINISHED 5
#define SVCH_NO_STATE 6
#define SVCH_OK 7
//Cyclic Data Access
#define NC_LIFECOUNTER (pbBaseAdress + 0x20010)
#define INT_SOURCE (pbBaseAdress + 0x20038)
#define INT_ACK (pbBaseAdress + 0x20014)
/*** Definitionen fuer die Handhabung des Struktur-Arrays 'CLC_Task[].' *****/
#define MAX_NUM_TASKS (32) /* pSOS maximal number of tasks */
/* Beschreibung der Task-Zustaende 'CLC_Task[].Status' */
/* Not defined yet: t_delete */
#define NDEF (0)
/* Task is created */
#define CREATED (1)
/* Task is suspended: t_suspend */
#define SUSPENDED (2)
/* Task started: t_start,t_restart,t_resume */
#define STARTED (3)
/* Task is ready to work, after init. section */
#define READY (4)
/* Nummerierung der SERCANS-Threads. ACHTUNG - Max. 32 Tasks !! */
/* Wird zur Indizierung von 'CLC_Task[].' verwendet. */
#define CMDH (0) /* Task Nr. 1 */
#define DIAG (1) /* Task Nr. 2 */
#define ROOT (2) /* Task Nr. 3 */
#define SVCH (3) /* Task Nr. 4 */
#define SYST (4) /* Task Nr. 5 */
#define WDOG (5) /* Task Nr. 6 */
#define ACPH (6) /* Task Nr. 7 */
#define INT0 (7) /* Task Nr. 8 */
#define ENDH (8) /* Task Nr. 9 */
//gloable variables
extern T_IPC_HANDLES ipc_handles; /* Handles zum Gebrauch NUR in der RTX Umgebung */
extern SCS_TASK_t SCS_Task[MAX_NUM_TASKS];
/* Zaehler fuer NC/SERCOS Taktverh鋖tnis in der Funktion synchronize_user_isr() */
extern USHORT usCount_NC_SERCOS_TAKT_SYNC_USER;
/* Zaehler fuer NC/SERCOS Taktverh鋖tnis in der Funktion check_user_access() */
extern USHORT usCount_NC_SERCOS_TAKT_USER_ACC;
/*the times of nc cycle time / sercos cycle time*/
extern USHORT usNC_SERCOS_TAKT;
//PCI initialize
ULONG SercansInit( void );
//PCI interrupt handler
void RTFCNDCL SERCANS_ISR(PVOID pUnused);
//acph
unsigned long RTFCNDCL acph( PVOID pUnused );
//syst
unsigned long RTFCNDCL syst( PVOID pUnused );
//endh
unsigned long RTFCNDCL endh( PVOID pUnused );
//ipc initialize
DWORD Init_SHM(void);
//System Channel
ULONG ClearError( void );
ULONG ChangePhase( USHORT usNewPhase );
ULONG SaveSystemParameter(void);
ULONG ClearAllErrors( void );
ULONG SetLifecounterDif(USHORT usDifNum);
ULONG GetPhase( USHORT *usActPhase);
ULONG GetDiagMessage( char *pDiagMessage);
//Service Channel
USHORT Request_ReadDriveParameter(USHORT uDriveNbr, ULONG ulIDN, short sDataBlockElement,BOOL bSinglePara);
USHORT Request_WriteDriveParameter(USHORT uDriveNbr,ULONG ulIDN, short sDataBlockelement, ULONG ulData,short sLength,BOOL bSinglePara);
USHORT Response_ReadDriveParameter(USHORT uDriveNbr, ULONG* pulData,USHORT *usLength);
USHORT Response_WriteDriveParameter (USHORT uDriveNbr, ULONG* pulData);
USHORT Request_HMIReadDriveParameter(ULONG ulIDN, short sDataBlockElement,BOOL bSinglePara);
USHORT Request_HMIWriteDriveParameter(ULONG ulIDN, short sDataBlockelement, ULONG ulData,short sLength,BOOL bSinglePara);
USHORT Response_HMIReaDriveParameter(ULONG* pulData,USHORT *usLength);
USHORT Response_HMIWriteDriveParameter (ULONG* pulData);
//Cyclic Data Access
void ReadCyclicData(USHORT uDriveNbr, short* psActualData, short sActualDataLength);
void WriteCyclicData(USHORT uDriveNbr, short * psCommandData, short sCommandDataLength);
//parameter handler tasks
ULONG create_parameter_handler_tasks( void );
ULONG start_parameter_handler_tasks(void);
//synchronize NC access (if NC cycle time > SERCANS cycle time, it will adjust time command value send time)
void synchronize_user_isr();
//get the times of nc cycle time / sercos cycle time
void get_nc_serc_cyc();
//get the existed dirves
void get_exist_drives();
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -