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

📄 fma.c

📁 profibus-dp主站源代码
💻 C
📖 第 1 页 / 共 3 页
字号:
  rb -> application_block.ssap = source_sap;   // local SAP
  rb -> application_block.send_l_sdu.length = j;
  rb -> user_data_1[0] = NETTO_DATA_OFFSET;

  // initialize Data
  HexStringToByteString( user_data, j, rb->user_data_1 + NETTO_DATA_OFFSET );
}




/**********************************************************************/
/*  D e s c r i p t i o n :                                           */
/*                                                                    */
/*  build request_block for FDL_statistic_counter                     */
/**********************************************************************/
void build_rqb_statistic_count( fdl_rb *rb, BYTE priority )
{
  build_head( rb );

  rb -> rb2_header.fill_length_1 = 0;
  rb -> rb2_header.seg_length_1 = sizeof( statistic_ctr_list );
  rb -> rb2_header.offset_1 = 80;
  rb -> rb2_header.priority = priority;

  rb -> rb2_header.fill_length_2 = 0;
  rb -> rb2_header.seg_length_2 = 0;

  rb -> application_block.serv_class = priority;
  rb -> application_block.service.code = fdl_read_statistic_ctr;
}




/**********************************************************************/
/*  D e s c r i p t i o n :                                           */
/*                                                                    */
/*  build request_block for reply_update_multiple                     */
/**********************************************************************/
void build_rqb_reply_update_multiple( fdl_rb *rb,
                                      UBYTE source_sap,
                                      BYTE priority,
                                      unsigned char user_data[260] )
{
  int j;

  build_head( rb );

  j = ( strlen( user_data ) + 1 ) / 3;    

  rb -> rb2_header.fill_length_1 = j + NETTO_DATA_OFFSET;
  rb -> rb2_header.seg_length_1 = 260;
  rb -> rb2_header.offset_1 = 80;
  rb -> rb2_header.priority = priority;

  rb -> rb2_header.fill_length_2 = 0;
  rb -> rb2_header.seg_length_2 = 0;
  rb -> rb2_header.offset_2 = 0;

  rb -> application_block.service.code = reply_update_multiple;
  rb -> application_block.ssap = source_sap;   // local SAP
  rb -> application_block.serv_class = priority;
  rb -> application_block.send_l_sdu.length = j;
  rb -> user_data_1[0] = NETTO_DATA_OFFSET;

  // initialize Data
  HexStringToByteString( user_data, j, rb->user_data_1 + NETTO_DATA_OFFSET );
}




/**************************************************************************/
/**************************************************************************/
/*                                                                        */
/*                        EXPORTED FUNCTIONS                              */
/*                                                                        */
/**************************************************************************/
/**************************************************************************/



/**************************************************************************/
/*                                                                        */
/*  int get_life_list_local(HWND hWnd)                                           */
/*                                                                        */
/*                                                                        */
/**************************************************************************/
int FDL_life_list_local( BYTE pr )
{
  int ret;

  build_head( rqb );
  rqb -> rb2_header.priority = pr;      // rqb - univerzalni pointer na Request Block
  rqb -> rb2_header.fill_length_1 = 0;
  rqb -> rb2_header.seg_length_1 = 127;
  rqb -> rb2_header.offset_1 = 80;

  // application block params
  rqb -> application_block.service.code = fdl_life_list_create_local;

  ret = fdl_write( rqb );

  return( ret );
}

//*************************************************************************

int FDL_life_list_remote( BYTE pr )
{
  int ret;

  build_head( rqb );
  rqb -> rb2_header.priority = pr;
  rqb -> rb2_header.fill_length_1 = 0;
  rqb -> rb2_header.seg_length_1 = 127;
  rqb -> rb2_header.offset_1 = 80;

  // application block params
  rqb -> application_block.service.code = fdl_life_list_create_remote;

  ret = fdl_write( rqb );

  return( ret );
}

/**************************************************************************/
/*  int fdl_ident(HWND hWnd,BYTE address)                                           */
/**************************************************************************/
int FDL_ident( BYTE address, BYTE pr )
{
  int ret;
  build_head( rqb );

  rqb -> rb2_header.fill_length_1 = 0;
  rqb -> rb2_header.seg_length_1 = 260;
  rqb-> rb2_header.offset_1 = 80;
  rqb-> rb2_header.priority = pr;

  rqb -> rb2_header.fill_length_2 = 0;
  rqb -> rb2_header.seg_length_2 = 0;
  rqb -> rb2_header.offset_2 = 0;

  rqb -> application_block.service.code = fdl_ident;
  rqb -> application_block.receive_l_sdu.length = 255;
  rqb -> application_block.rem_add.station = address;

  ret = fdl_write( rqb );
  return( ret );
}

//*****************************************************************************

int Send_fdl_await_indication( UBYTE s, BYTE p )
{
  int ret;
  if ( s == EVENT_SAP )
    build_rqb_event_sap( rqb, p );    // EVENT_SAP=64
  else
    build_rqb_await_indication( rqb, s, p );
  ret = fdl_write( rqb );
  return( ret );
}

//*****************************************************************************

void Send_Replay_Update_Single( UBYTE s_sap, unsigned char data[260], BYTE pr )
{
  build_rqb_reply_update_single( rqb, s_sap, pr, data );
  fdl_write( rqb );
}

//*****************************************************************************

void Send_Replay_Update_Multiple( UBYTE s_sap, unsigned char data[260], BYTE pr )
{
  build_rqb_reply_update_multiple( rqb, s_sap, pr, data );
  fdl_write( rqb );
}

//*****************************************************************************

void Send_SDN( BYTE adr,
               UBYTE ssap,
               UBYTE dsap,
               unsigned char data[260],
               BYTE pr )
{
  build_rqb_sdn( rqb, adr, dsap, ssap, pr, data );
  fdl_write(/*Handle,*/ rqb );
}

//*****************************************************************************

void Send_SRD( BYTE adr,
               UBYTE ssap,
               UBYTE dsap,
               unsigned char data[260],
               BYTE pr )
{
  build_rqb_srd( rqb, adr, dsap, ssap, pr, data );
  fdl_write( rqb );
}

//*****************************************************************************

void Set_FDL_value( BYTE pr )
{
  FDL_set_val( rqb, pr );
  fdl_write( rqb );
}

//*****************************************************************************

void Read_FDL_value( BYTE pr )
{
  FDL_read_val( rqb, pr );
  fdl_write( rqb );
}

//*****************************************************************************

void SAP_activate( UBYTE sap_nr,
                   UBYTE ACCSAP,
                   UBYTE ACCSTAT,
                   UBYTE SDA_R,
                   UBYTE SDN_R,
                   UBYTE SRD_R,
                   BYTE priority )
{
  build_rqb_sap_activate( rqb,
                          sap_nr,
                          ACCSAP,
                          ACCSTAT,
                          SDA_R,
                          SDN_R,
                          SRD_R,
                          priority );
  fdl_write( rqb );
}

//*****************************************************************************

void RSAP_activate( UBYTE sap_nr, UBYTE ACCSAP, BYTE ACCSTAT, BYTE priority )
{
  build_rqb_rsap_activate( rqb, sap_nr, ACCSAP, ACCSTAT, priority );
  fdl_write( rqb );
}

//*****************************************************************************


void SAP_deactivate( UBYTE NM, BYTE pr )
{
  build_rqb_sap_deactivate( rqb, NM, pr );
  fdl_write( rqb );
}

//*****************************************************************************

void LSAP_status_read( UBYTE Stat, UBYTE NM, BYTE pr )
{
  build_rqb_lsap_status( rqb, Stat, NM, pr );
  fdl_write( rqb );
}

//*****************************************************************************

void Read_Statistic_Ctr( BYTE pr )
{
  build_rqb_statistic_count( rqb, pr );
  fdl_write( rqb );
}

//*****************************************************************************


















//*****************************************************************************
//**
//**    Funkce pro linkvou vrstvu
//**
//*****************************************************************************



//*****************************************************************************
//**  fce pro pripravu confirmation bloku pro aplikacni vrstvu
//*****************************************************************************
void build_conf( fdl_rb *rb, UBYTE L_status )
{
  rb -> rb2_header.opcode = confirm;
  rb -> rb2_header.response = L_status;
  rb -> application_block.opcode = confirm;
  rb -> application_block.l_status = L_status;
}



//*****************************************************************************
//**  fce pro tvorbu SRD confirmation bloku
//*****************************************************************************
void build_conf_srd( fdl_rb *rb, PUCHAR user_data, UBYTE Datlng, UBYTE Response )
{
  UBYTE i;
  build_conf( rb, Response );


  switch ( Response )
  {
      /*status odpovedi na SRD*/
    case ds:
      break;
    case iv:
      break;
    case rs:
      break;
    case ue:
      break;
    case ls:
      break;
    case nr:
      break;
    case na:
      break;
    case rr:
      break;

    case dl:
      {
        rb -> rb2_header.priority = low;
      } break;

    case dh:
      {
        rb -> rb2_header.priority = high;
      } break;

    case rdl:
      {
        rb -> rb2_header.priority = low;
      } break;

    case rdh:
      {
        rb -> rb2_header.priority = high;
      } break;
  }


  rb -> application_block.receive_l_sdu.length = Datlng;
  rb -> rb2_header.fill_length_2 = Datlng;
  rb -> rb2_header.offset_2 = NETTO_DATA_OFFSET;

  for ( i = 0;
        i < Datlng;
        i++ )              /*predani prijatych dat ze SRD odpovedi*/
    rb -> user_data_2[NETTO_DATA_OFFSET + i] = user_data[i];

  rb -> user_data_2[0] = NETTO_DATA_OFFSET;
  rb -> application_block.service.code = srd;
}









⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -