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

📄 slink-code.c

📁 slink协议举例
💻 C
字号:
//on a Master device (“C” language).
#include <stdio.h>
#define FRAME_SIZE 50             
#define SOH 0x01
unsigned char slave_failure;
unsigned int Send_data_to_serial_port(char buffer[],unsigned int length);
#define RECEPTION_OK 0
#define RECEPTION_FAIL 1               
unsigned int Receive_data_from_serial_port(
char buffer[],                          
unsigned int ok_response_length,              
unsigned int error_response_length, 
unsigned int slave_replay_del,                 
unsigned int bytes_delay,          
);
unsigned int Write_typed_int_parameter(
unsigned int index,
unsigned char value[]
);
unsigned int Read_typed_int_parameter(
unsigned int index,
unsigned char value[]
);
unsigned char Calculate_xor( unsigned char buffer[],
unsigned int start,
unsigned int end
);
/**********************************MODULE BODY***********************/
void main( void )
{ unsigned int result;
int value;
printf(“\nWriting of parameter 8236 with value 1234..”);
value = 1234;
result = Write_typed_int_parameter( 8236, (unsigned char *)&value);
printf(“\nOperation result : %s”, result ? “OK”:”ERROR”);
if (result ==1)
{printf(“\nSlave state: %s”,slave_failure ? “OK”:”FAIL”);
}
printf(“\nReading of parameter 8236 ..”);
result = Read_typed_int_parameter( 8236, (unsigned char *)&value);
printf(“\nOperation result : %s”, result ? “OK”:”ERROR”);
if (result ==1)
{
printf(“\nParameter 8236 value = %d”, value);
printf(“\nSlave state: %s”,slave_failure ? “OK”:”FAIL”);
}
}                         /* end of main */
**************************************************************************/
unsigned int Write_typed_int_parameter( unsigned int index, unsigned char value[] )
{
unsigned char tx_frame[FRAME_SIZE];
unsigned char rx_frame[FRAME_SIZE];
unsigned int i;                           
unsigned int reception_result;              
unsigned int slave_response;
tx_frame[0] = SOH;                     
tx_frame[1] = 0x00;                       
tx_frame[2] = 0x00;                    
tx_frame[3] = 13;                   
tx_frame[4] = 0x00;                         
tx_frame[5] = 0x27;                    
tx_frame[6] = 0x00;                   
tx_frame[7] = 0x03;                    
tx_frame[8] = (unsigned char) index;               
tx_frame[9] = (unsigned char) (index << 8);             
tx_frame[10] = value[0];                          
tx_frame[11] = value[1];                   

tx_frame[12] = Calculate_xor(&tx_buffer,1,tx_frame[3]-1);

Send_data_to_serial_port(&tx_frame,tx_frame[3]);

reception_result = Receive_data_from_serial_port(&rx_frame,8,8,SLAVE_ANSWER_TIMEOUT,                   
MAX_BYTES_DELAY                 
);
if (reception_result == RECEPTION_OK)
{ if(
Calculate_checksum(&rx_buffer,1,6) != rx_buffer[7])
return (0)
slave_response =
(unsigned int) rx_frame[5] +
( (unsigned int) rx_frame[6] << 8);
slave_failure = rx_frame[4] & 0x10;

if (slave_response != 0x00)
return (0);
return (1);
}
else
return (0);  
}                           /* end of Write_typed_int_parameter */
unsigned int Read_typed_int_parameter( unsigned int index, unsigned char value[] )
{
unsigned char tx_frame[FRAME_SIZE];
unsigned char rx_frame[FRAME_SIZE];
unsigned int i;
/
unsigned int checksum_endoffset;
unsigned int reception_result;
unsigned int slave_response;
tx_frame[0] = SOH;                          
tx_frame[1] = 0x00;                  
tx_frame[2] = 0x00;                
tx_frame[3] = 11;                
tx_frame[4] = 0x00;                    
tx_frame[5] = 0x26;                    
tx_frame[6] = 0x00;                    
tx_frame[7] = 0x03;                   
tx_frame[8] = (unsigned char) index;           
tx_frame[9] = (unsigned char) (index << 8);             

tx_frame[10] = Calculate_xor(&tx_buffer,1,tx_frame[3]-1);

reception_result = Receive_data_from_serial_port(&rx_frame,13,8,
SLAVE_ANSWER_TIMEOUT,            
MAX_BYTES_DELAY                 
);
if (reception_result == RECEPTION_OK)
{
slave_response =
(unsigned int) rx_frame[5] +
( (unsigned int) rx_frame[6] << 8);

checksum_end_offset = (slave_response)? 6 : 11
if(
Calculate_checksum(
&rx_buffer,
1,                                           
checksum_end_offset
) != rx_buffer[ checksum_end_offset+1 ]
)
return (0)
slave_failure = rx_frame[4] & 0x10;
if (slave_response != 0x00)
return (0);
value[0] = rx_frame[10];                   
value[1] = rx_frame[11];                       
return (1);
}
else
return (0);
}                                      /* end of Read_typed_int_parameter */
unsigned char Calculate_xor( unsigned char buffer[], unsigned int start, unsigned int end)
{
unsigned int i;
unsigned char xor
for ( i=start; i <= end; i++ )
{    xor ^= buffer[i];   }
return xor;
}                                       /* end of Calculate_xor */
/****************************************END OF FILE*/
ENDRECORD


⌨️ 快捷键说明

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