#ifndef _RS_FUNCTIONS_H #define _RS_FUNCTIONS_H #define MAX_RECEIVE_LENGTH 254 #define MAX_SEND_LENGTH 400 //266 //254 #define CMD_RS232_MODBUS_1 1 #define CMD_RS232_MODBUS_3 3 #define CMD_RS232_MODBUS_4 4 #define CMD_RS232_MODBUS_5 5 #define CMD_RS232_MODBUS_6 6 #define CMD_RS232_MODBUS_15 15 #define CMD_RS232_MODBUS_16 16 #define RS_TIME_OUT 6000 #define RS_TIME_OUT_MPU 6000//6000 // ожидание ответа от МПУ #define RS_TIME_OUT_HMI 1000 #define RS_TIME_OUT_MAX 10000 #define RS_TIME_OUT_LOST 1000 typedef unsigned char CHAR; // Message RS declaration typedef struct { unsigned int commnumber; // Номер порта unsigned long RS_Length; // Длина пакета unsigned int *pRS_RecvPtr; // Буфер приема unsigned int *pRS_SendPtr; // Буфер посылки unsigned int *pRS_SendPtr_stage1; // Буфер посылки unsigned int *pRS_SendPtr_stage2; // Буфер посылки unsigned int *pRecvPtr; unsigned int RS_PrevCmd; // ПредыдущаЯ комманда unsigned int RS_Cmd; // ТекущаЯ комманда unsigned int RS_Header[MAX_RECEIVE_LENGTH]; // Заголовок unsigned int flag_TIMEOUT_to_Send; // Флаг ожиданиЯ таймаута на отсылку unsigned int flag_TIMEOUT_to_Receive; // Флаг ожиданиЯ таймаута на прием unsigned int RS_DataReady; // Флаг готовности RS данных unsigned int buffer[MAX_SEND_LENGTH]; // Буфер длЯ отсылки по RS unsigned int buffer_stage1[8]; // Буфер длЯ отсылки по RS // unsigned int buffer_stage2[8]; // Буфер длЯ отсылки по RS unsigned int addr_answer; // адрес куда отвечать в режиме ведущего unsigned int addr_recive;// адрес по которому нас запросили unsigned int flag_LEADING; // Флаг режима контроллера (по умолчанию ведомый) unsigned long RS_RecvLen; unsigned long RS_SLength; // Длина пакета длЯ посылки unsigned long RS_SendLen; // Количество байт уже передали unsigned long RS_SLength_stage1; // Длина пакета длЯ посылки unsigned long RS_SLength_stage2; // Длина пакета длЯ посылки unsigned int time_wait_rs_out; unsigned int time_wait_rs_out_mpu; unsigned int time_wait_rs_lost; // слишком большая пауза между байтами - есть потеря!!! char RS_SendBlockMode; /* Режим передачи */ char RS_SendBlockMode_stage1; /* Режим передачи */ char RS_SendBlockMode_stage2; /* Режим передачи */ char RS_Flag9bit; /* длЯ RS485???????? */ int BS_LoadOK;/** Флаг успешности приема блока */ int RS_FlagBegin; int RS_HeaderCnt; int RS_FlagSkiping; int RS_DataReadyAnswer; // флаг, что мы получили ответ на свой запрос, если мы мастер int RS_DataReadyAnswerAnalyze; // флаг, что мы получили ответ на свой запрос, если мы мастер и обработали его int RS_DataSended; // флаг, что мы отправили свой запрос, ждем ответ и мы мастер int RS_DataWillSend; // флаг, что мы подготовили свой запрос и сейчас начнем его передавать и мы мастер int RS_DataReadyRequest; // флаг, что мы получили запрос, если мы слейв int RS_DataReadyFullUpdate; // флаг, что мы получили ответы и массив полностью обновился int RS_OnTransmitedData ; // флаг что мы еще передаем запрошенные данные int current_tx_stage; int cmd_tx_stage; unsigned int count_recive_ok; // принято посылок с валидным crc, unsigned int count_recive_error_crc; // ошибок crc unsigned int count_recive_dirty; // принято посылок до расчета crc, совпала только длина и код команды unsigned int count_recive_bad; // принято посылок c неправильным форматом unsigned int count_recive_bytes_all; // принято всего байт unsigned int count_recive_bytes_skipped; // пропущено всего байт unsigned int count_recive_cmd_skipped; // пропущено всего посылок unsigned int count_recive_rxerror; // ошибки по прерыванию unsigned int do_resetup_rs; // выполнить пересброс порта при ошибках. int RS_DataWillSend2; // флаг2, что мы подготовили свой запрос и сейчас начнем его передавать и мы мастер } RS_DATA_STRUCT; #define RS_DATA_STRUCT_DEFAULT {0,0,0,0,0,0,0,0,0,{0}, 0,0,0,{0},{0}, 0,0,0,0,0,0, 0,0, 0,0, 0,0,0,0, 0,0, 0,0,0, 0, 0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0} ////////////////////////////////////////////////////////// #define TMS_TO_TERMINAL_TEST_ALL_STRUCT_DEFAULT {{0}, {0}, {0}, 0, 0, 0} enum { CMD_RS232_LOAD = 51, CMD_RS232_UPLOAD, CMD_RS232_RUN, CMD_RS232_XFLASH, CMD_RS232_TFLASH, CMD_RS232_PEEK, CMD_RS232_POKE, CMD_RS232_INITLOAD, CMD_RS232_INIT,CMD_RS232_EXTEND, CMD_RS232_VECTOR = 61, CMD_RS232_IMPULSE, CMD_RS232_STD = 65, CMD_RS232_TEST_ALL, CMD_RS232_STD_ANS, CMD_RS232_LAST }; //enum { // false = 0, true // }; #define RS_LEN_CMD CMD_RS232_LAST //extern RS_DATA_STRUCT RS232_A, RS232_B; extern RS_DATA_STRUCT rs_a,rs_b; int RS_Send(RS_DATA_STRUCT *rs_arr,unsigned int *pBuf,unsigned long len); void RS232_WorkingWith(unsigned int enable_rs_a, unsigned int enable_rs_b, unsigned int enable_int_timeout); void RS232_TuneUp(unsigned long speed_baud_a, unsigned long speed_baud_b); void inc_RS_timeout_cicle(void); void resetup_rs_on_timeout_lost(int rsp); void resetup_rs(RS_DATA_STRUCT *rs_arr); void resetup_mpu_rs(RS_DATA_STRUCT *rs_arr); int test_rs_live(RS_DATA_STRUCT *rs_arr); void RS_SetControllerLeading(RS_DATA_STRUCT *RS232_Arr,int boool); void RS_SetAdrAnswerController(RS_DATA_STRUCT *RS232_Arr,int set_addr_answer); void SetCntrlAddr (int cntrl_addr,int cntrl_addr_for_all); extern float KmodTerm, freqTerm; extern unsigned int RS_Len[RS_LEN_CMD]; extern int flag_special_mode_rs, disable_flag_special_mode_rs; #endif