?? fmaclien.c
字號:
//-----------------------------------------------------------------------------
// $Id: fmaclient.c,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
//-----------------------------------------------------------------------------
//
// Popis:
// ------
// Funkce FMA (Fieldbus Management) pro aplikacni vrstvu.
//
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
// #include "vardef.H"
#include "fmaclient.h"
#define LEN_BUS_PARAMETER sizeof(struct bus_parameter_block)
#define NETTO_DATA_OFFSET 12
#define FDL_ERROR -1 /* return codes of functions */
#define OK 0
#define NOT_OPENED -1 /* SCP not opened, invalid */
#define SST_NOT_USED 0 /* SAP State: not activated */
#define SST_ACTIVATED 1 /* SAP State: not activated */
// Ukazka aplikace nasledujicich funkci
// vsude se pracuje s jednim Request Blockem
/*
void Rizeni_dopravniku(fdl_rb *recv_rb)
{
UBYTE ch=0;
while (fdl_read (recv_rb)==1)
{
switch (recv_rb -> application_block.opcode) {
case indication: {
switch (recv_rb -> application_block.service.code) {
case srd: {
empty_fc(1);
} break;
case sdn: {
smer=2; goto Go;
empty_fc(1);
} break;
case fdl_event: {
empty_fc(1);
} break;
}
} break;
case confirm:
{
switch (recv_rb -> application_block.service.code) {
case srd: {
if ((recv_rb -> application_block.dsap==255) && (recv_rb -> application_block.ssap==255) ) {
if ((ch=get_char_from_switch())==64) {
Send_SRD(9,255,255,"00",high);
smer=0;
break;
}
if ((recv_rb-> user_data_2[NETTO_DATA_OFFSET])==0x21 ) {//hodnota vstupu...
Send_fdl_await_indication(255,high);
Send_SRD(9,255,255,"02",high);
smer=1;
continue; //break;
}
if ((recv_rb-> user_data_2[NETTO_DATA_OFFSET])==0x22 ) { //hodnota vstupu...
Send_fdl_await_indication(255,high);
Send_SRD(9,255,255,"04",high);
dopravnik_x=2;
smer=3;
continue;//break;
}
if ((recv_rb-> user_data_2[NETTO_DATA_OFFSET])==0x12 ) { //hodnota vstupu...
Send_fdl_await_indication(255,high);
Send_SRD(9,255,255,"01",high);
smer=4;
continue;//break;
}
if ((recv_rb-> user_data_2[NETTO_DATA_OFFSET])==0x11 ) { //hodnota vstupu...
Send_fdl_await_indication(255,high);
Send_SRD(9,255,255,"08",high);
smer=2;
continue; //break;
}
else {
Send_fdl_await_indication(255,high);
Go: if (smer==1) Send_SRD(9,255,255,"02",high);
if (smer==2) Send_SRD(9,255,255,"08",high);
if (smer==3) Send_SRD(9,255,255,"04",high);
if (smer==4) Send_SRD(9,255,255,"01",high);
if (smer==0) Send_SRD(9,255,255,"00",high);
};
}
} break;
case sdn: {
empty_fc(1);
} break;
case reply_update_single: {
empty_fc(1);
} break;
case reply_update_multiple: {
empty_fc(1);
} break;
case fdl_read_value: {
empty_fc(1);
}break;
case fdl_set_value: {
empty_fc(1);
}break;
case sap_activate: {
empty_fc(1);
}break;
case rsap_activate: {
empty_fc(1);
}break;
case sap_deactivate : {
empty_fc(1);
}break;
case lsap_status: {
empty_fc(1);
} break;
case fdl_life_list_create_local : {
empty_fc(1);
}break;
case fdl_life_list_create_remote: {
empty_fc(1);
}break;
case fdl_ident: {
empty_fc(1);
}break;
case fdl_read_statistic_ctr: {
empty_fc(1);
} break;
case await_indication: {
empty_fc(1);
}break;
case withdraw_indication: {
empty_fc(1);
}break;
}
}break;
};
};
}
*/
/**************************************************************************/
/* fdl_write */
/* sends request block to communication interface */
/**************************************************************************/
BYTE fdl_write( fdl_rb *rb )
{
int BytesWritten;
int status;
status = WriteFile( DriverHandle, rb, sizeof( fdl_rb ), &BytesWritten, 0 );
return status;
}
/**************************************************************************/
/* build_head */
/* fills header parameters */
/**************************************************************************/
void build_head( fdl_rb *rb )
{
rb -> rb2_header.length = 80;
rb -> rb2_header.user = 0; // use this for local block identifications - by application
rb -> rb2_header.rb_type = 2;
rb -> rb2_header.priority = low;
rb -> rb2_header.subsystem = FLC_Subsys; /* for Layer2 */
rb -> rb2_header.opcode = request;
rb -> rb2_header.response = 0;
rb -> rb2_header.fill_length_1 = 246;
rb -> rb2_header.seg_length_1 = 255;
rb -> rb2_header.offset_1 = 80;
rb -> rb2_header.fill_length_2 = 0;
rb -> rb2_header.seg_length_2 = 0;
rb -> rb2_header.offset_2 = 0;
rb -> application_block.opcode = request;
rb -> application_block.subsystem = FLC_Subsys;
}
/**************************************************************************/
/*
void FDL_set_val(fdl_rb *rb,BYTE pr)
{
UBYTE *Vendor_name = "FEL-CVUT";
UBYTE *Controller_type = "Motorola";
UBYTE *HW_release = "1.0";
UBYTE *SW_release = "3.1.5.7.98";
UBYTE block[202];
struct bus_parameter_block *temp_ptr;
build_head(rb);
temp_ptr = (struct bus_parameter_block *)rb->user_data_1;
temp_ptr->hsa=HSA_default;
temp_ptr->ts=TS_default;
temp_ptr->stat_type=Station_type_default;
temp_ptr->Baud_Rate=Baud_rate_default;
temp_ptr->medium_red=Medium_red_default;
temp_ptr->retry_ctr=Max_retry_default;
temp_ptr->default_sap=DEFAULT_SAP;
temp_ptr->tqui=TQUI_default;
temp_ptr->tset=TSET_default;
temp_ptr->in_ring_desired= 1; //!!!!! povoleni vstupu do ringi
temp_ptr->tsl=TSL_default;
temp_ptr->ttr=TTR_default;
temp_ptr->g=G_default;
temp_ptr->min_tsdr=minTSDR_default;
temp_ptr->max_tsdr=maxTSDR_default;
temp_ptr->physical_layer=PHY_l_char;
strcpy(block,"");
block[0]=strlen(Vendor_name);
block[1]=strlen(Controller_type);
block[3]=strlen(HW_release);
block[4]=strlen(SW_release);
block[5]=0;
strcat(block,Vendor_name);
strcat(block,Controller_type);
strcat(block,HW_release);
strcat(block,SW_release);
//temp_ptr->ident.ident[0] =strlen(Vendor_name);
//temp_ptr->ident.ident[1] =strlen(Controller_type);
//temp_ptr->ident.ident[2] =strlen(HW_release);
//temp_ptr->ident.ident[3] =strlen(SW_release);
//temp_ptr->ident.ident[4] =strlen(HW_release);
//temp_ptr->ident.ident=*block;
strcpy(temp_ptr->ident.ident,"");
strcat(temp_ptr->ident.ident, block);
rb -> rb2_header.priority = pr;
rb -> rb2_header.opcode = request;
rb -> application_block.opcode = request;
rb -> application_block.service.code = fdl_set_value;
rb -> rb2_header.seg_length_1 = strlen(block);
}
void FDL_read_val(fdl_rb *rb,BYTE pr)
{
// struct bus_parameter_block *temp_ptr;
// temp_ptr = (struct bus_parameter_block *)rb->user_data_1;
build_head(rb);
rb -> rb2_header.priority = pr;
rb -> rb2_header.opcode = request;
rb -> application_block.opcode = request;
rb -> application_block.service.code = fdl_read_value;
}
*/
/**********************************************************************/
/* D e s c r i p t i o n : */
/* */
/* build request_block for sap_activate for all services */
/**********************************************************************/
void build_rqb_sap_activate( fdl_rb *rb,
UBYTE sap_nr,
UBYTE ACCSAP,
UBYTE ACCSTAT,
UBYTE SDA_R,
UBYTE SDN_R,
UBYTE SRD_R,
BYTE pr )
{
struct fdl_sap *sptr;
build_head( rb );
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -