?? profibus.h
字號(hào):
//-----------------------------------------------------------------------------
// $Id: profibus.h,v 1.0.0 2004/01/13
//-----------------------------------------------------------------------------
//
// ProfiM - PROFIBUS MASTER DRIVER FOR WINDOWS NT/2000
//
// Author:
// Pavel Trnka, CTU FEE
// trnkap@seznam.cz
// With help and advices from:
// Ing. Petr Smolik, CTU FEE
// Ing. Pavel Pisa, CTU FEE
// Ing. Pavel Burget, CTU FEE
//
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
#ifndef _PROFIBUS_H
#define _PROFIBUS_H
#include "NTDDK.H"
#include "vardef.h"
#include "lists.h"
#include "frame.h"
#include "SAP.h"
#include "buff.h"
#include "fmaserver.h"
//#include "ReqBuff.h"
BOOLEAN QueryPerformanceFrequency( LARGE_INTEGER *lpFrequency );
typedef struct
{
//stav stanice - Slave,Master_not_ready,Master_ready,Master_in_logical_ring
TStationStatus StationStatus;
int TS;
int HSA;
int G;
baud_rate BaudRate;
int BaudRateNum;
// adresa stanice, ze ktere byl naposledy obdrzen Token
int PS;
// adresa stanice, ktere se naposledy predaval Token
int NS;
// odpocitavani pro dalsi aktualizaci GAPu (dekrementuje se pri prichodu do Pass_Token)
int G_CountDown;
// indikuje studeny start okruhu
BOOLEAN ColdStart;
TPBFrame RxFrame;
//Vstupni buffer pro neuplne framy
UCHAR InBuf[INBUF_SIZE];
int InBufLen;
TLAS LAS;
TGAPL GAPL;
TSAP SAP;
TRequestBuffer ReqB;
TResultBuffer ResB;
// ukazatel do RequestBufferu na aktualni pozadavek
fdl_rb *ActualRequest;
// Indication Request Block
fdl_rb ind_rb;
//Jeden z deseti stavu mastera
TMasterState MasterState;
//Predchozi stav mastera
TMasterState LastState;
//vse inicializovano muzeme zacit zpracovavat preruseni
BOOLEAN AllInitialized;
// <Casovani>
__int64 UseTokenEntryTicks; // stav Performance Counteru pri vstupu do stavu Use Token
__int64 LastUseTokenEntryTicks;
int Tbit; // pocet tiku Performance Counteru za periodu potrebnou pro vyslani jendoho bitu
int Tbit3x; // 3*Tbit - pouziva se jako hranice pro prijem preruseni od modemu u PISA_IO
TTimeOutState TimeOutState; // urcuje v jakem stavu se nachazi odpocitavani timeoutu
__int64 LastTicks; // ulozi se pocet ticku pri odstartovani timeoutu (zavedenim TimeOutTicks snad ani neni potreba)
__int64 TimeOutTicks; // hranice, pri ktere timeout vyprsi (je vypocitana, pri odstartovani timeoutu)
int TO_Interval; // timeout intetval v Tbit! Uklada se pri nastavovani timeoutu
// </Casovani>
void * DeviceExtension; // struktura pro propojeni s ovladacem - je to netypovy ukazatel kvuli vzajemnemu krizeni referenci
PDEVICE_OBJECT PhysicalDeviceObject;
TServiceType Service; // typ aktualni sluzby - Remote / Local / No
struct event_indication fdl_ev;
BOOLEAN FdlEventEnabled;
UCHAR Ident[202]; // Struktura pro identifikacni udaje sluzby FDL_IDENT
struct statistic_ctr_list ctr_list;
int DuplicitAddressCounter; //citac vyskytu stanic s duplicitni adresou
int IgnoreTokenCounter; //citac poctu tokenu pro TS od jine stanice nez PS
int FrameRepeatCounter; //citac poctu opakovani pri vysilani aktualniho requestu
// <Dalsi parametry FDL>
enum redundancy medium_red;
int retry_ctr;
int default_sap;
int tsl; // SLOT time
int tqui; // Transmitter fall time/repeater changeover time
int tset; // Setup time
int min_tsdr; // Minimum Station Delay Time (Response)
int max_tsdr; // Maximum Station Delay Time (Response)
int ttr; // Time To Reach (Target Rotation Time)
flc_boolean in_ring_desired; // Request to enter ring
enum physical_layer physical_layer; // RS485 or modem
// </Dalsi parametry FDL>
// <Promenne pro vytvareni Remote Life Listu>
T_RLL_Status RLL_Status;
int RLL_Station;
int RLL_Priority;
UBYTE RLL_LAS[127];
// </Promenne pro vytvareni Remote Life Listu>
// <Promenne k ulozeni odpovedi pro pripad opak. vysilani>
UBYTE SAM;
UBYTE FCBM;
UBYTE DSAPM;
UBYTE SSAPM;
UBYTE statM;
PUCHAR data_unitM;
int DatlngM;
// </Promenne k ulozeni odpovedi pro pripad opak. vysilani>
int ActualHID; // Actual Handle Identification
//PIRP ActualIRP; // Pointer to actual I/O Request Packet (ceka-li nejaka aplikace na vysledek)
} TProfibus, *PTProfibus;
//*******************************************************************************************
void PB_Init( PTProfibus PB,
void *DeviceExtension,
PUNICODE_STRING RegistryPath );
void PB_Close( PTProfibus PB );
void PB_GetConfiguration( PTProfibus PB,
PUNICODE_STRING RegistryPath );
void PB_GetConfigurationPnP( PTProfibus PB );
void PB_InitMaster( PTProfibus PB );
BOOLEAN PB_SelfTest( PTProfibus PB ); //Selftest stanice v offline stavu
void PB_ChangeMasterState( PTProfibus PB, TMasterState to );
BOOLEAN PB_IsTimeForSending( PTProfibus PB );
void PB_RxByte( PTProfibus PB, UCHAR ch );
void PB_Send( PTProfibus PB, PUCHAR frame, int length, BOOLEAN UseSYN ); // vyslani retezce datovych bytu na sbernici
void PB_SendFrameNoData( PTProfibus PB,
int _DA,
int _SA,
int _FC,
BOOLEAN UseSYN );
void PB_SendFrameVariableData( PTProfibus PB,
int _DA,
int _SA,
int _DSAP,
int _SSAP,
int _FC,
PUCHAR _Data,
int length,
BOOLEAN UseFC,
BOOLEAN UseSYN );
// Send
void PB_SendToken( PTProfibus PB, int _DA, int _SA );
void PB_SendRequestFDLStatuswithReply( PTProfibus PB,
int _DA );
// Received
void PB_ReceivedToken( PTProfibus PB, int _DA, int _SA );
void PB_ReceivedRequestFDLStatuswithReply( PTProfibus PB,
int _SA );
// <Casovani>
__int64 GetCurrentTicks(); // vrati pocet ticku performance counteru
void PB_StartTimeOut( PTProfibus PB );
void PB_StopTimeOut( PTProfibus PB );
void PB_SetTimeOut( PTProfibus PB,
int _interval,
TTimeOutStartCondition StartCondition );
void PB_TimeTick( PTProfibus PB ); // pri prazdnem vystupnim bufferu volana priblizne s periodou Tbit
void PB_FrameOut( PTProfibus PB ); /// vola se po odeslani celeho ramce ven z ovladace!
void PB_SendNextTimingChars( PTProfibus PB, int pocet );
void PB_ContinueTimeOut( PTProfibus PB );
// </Casovani>
// Zpracovani pozadavku
void PB_ProcessRequest( PTProfibus PB, fdl_rb *Request ); // zpracovani pozadavku z aplikacni vrstvy
void PB_ReceivedReply( PTProfibus PB );
void PB_ReceivedRequest( PTProfibus PB ); // zpracovani pozadavku prijateho z vnejsku
BOOLEAN GetRegistryDWord ( IN HANDLE Handle,
IN PWCHAR KeyNameString,
IN PULONG Data );
// deklarace funkci z ProfiM (trochu mimo...)
BOOLEAN ProfiM_SendOut( void *DeviceExtension,
PUCHAR Buffer,
PUCHAR TypeBuffer,
int length ); // pozor na typ prvniho ukazatele
void ProfiM_ClearTimingChars( void *DeviceExtension );
int ReadHIDfromRB( fdl_rb *rb );
PIRP ReadIRPfromRB( fdl_rb *rb );
void ProfiM_StartWatchDogTimer( void *DeviceExtension );
void ProfiM_StopWatchDogTimer( void *DeviceExtension );
BOOLEAN ProfiM_RxFIFOEmpty( void *DeviceExtension );
#endif /*_PROFIBUS_H */
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -