⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 functions.h

📁 SERCOSII卡驱动,通过该驱动程序可以在windowXp与RTX环境下运行自己编写的数控软件实现对数控设备的驱动。
💻 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 + -