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

📄 fmaclien.c

📁 SPC3 SETUP PROGRAMS SP C3 SETUP PROGRAMS
💻 C
📖 第 1 页 / 共 3 页
字号:
//-----------------------------------------------------------------------------
// $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 + -