#include "DSP2833x_Device.h" // DSP2833x Headerfile Include File #include "package.h" #include "RS485.h" #include "crc16.h" #include "cntrl_adr.h" #include "bios_dsp.h" #include "message.h" #include "filter_bat2.h" #include "measure.h" #include "ADC.h" #include "peripher.h" #include "ecan.h" #include "pulto.h" #include "spise2p.h" #include "i2c.h" int modbus[ANSWER_LEN+1]; unsigned int param[ANSWER_LEN+1]; int archiv[ANSWER_LEN+1]; int county[ANSWER_LEN+1]; int espero[ANSWER_LEN+1]; unsigned int Maska[2][8]; void Default_params() { unsigned int i; int bright[][7] = {8,8,10,8,8,8,6, 10,8,8,8,0,0,0}; for(i=0;iRS_Header[2] << 8) |*/ rs_arr->RS_Header[3]; // получили количество слов данных Length_MB = (rs_arr->RS_Header[4] << 8) | rs_arr->RS_Header[5]; ///////////////////////////////////////////////// // Отсылка /* Посчитали контрольную сумму перед самой посылкой */ rs_arr->buffer[0] = CNTRL_ADDR; rs_arr->buffer[1] = CMD_MODBUS_3; rs_arr->buffer[2] = Length_MB*2; cal = rs_arr->RS_Header[2]; for (i=0;ibuffer[3+i*2 ]=HIBYTE(ADC_table[Address_MB+i-start_data]); rs_arr->buffer[3+i*2+1]=LOBYTE(ADC_table[Address_MB+i-start_data]); } else { rs_arr->buffer[3+i*2 ]=(Modbus[Address_MB+i-16].byt.byte_hi); rs_arr->buffer[3+i*2+1]=(Modbus[Address_MB+i-16].byt.byte_lo); } } else { rs_arr->buffer[3+i*2 ]=(Modbus[Address_MB+i].byt.byte_hi); rs_arr->buffer[3+i*2+1]=(Modbus[Address_MB+i].byt.byte_lo); } } crc = 0xffff; crc = get_crc_16(crc, rs_arr->buffer, Length_MB*2+3); rs_arr->buffer[Length_MB*2+3] = LOBYTE(crc); rs_arr->buffer[Length_MB*2+4] = HIBYTE(crc); rs_arr->buffer[Length_MB*2+5] = 0; rs_arr->buffer[Length_MB*2+6] = 0; rs_arr->buffer[Length_MB*2+7] = 0; rs_arr->buffer[Length_MB*2+8] = 0; rs_arr->flag_TIMEOUT_to_Send=true; RS_Send(rs_arr, rs_arr->buffer, Length_MB*2+8); return; } void ReceiveCommandModbus6(RS_DATA *rs_arr) { unsigned int Address_MB, Data_MB, i; ///////////////////////////////////////////////// // Отсылка /* Отправлаем назад то же самое */ for (i=0;i<8;i++) rs_arr->buffer[i] = rs_arr->RS_Header[i]; // получили начальный адрес записи Address_MB = (/*(rs_arr->RS_Header[2] << 8) | */rs_arr->RS_Header[3]); // получили слово данных Data_MB = (rs_arr->RS_Header[4] << 8) | rs_arr->RS_Header[5]; modbus[Address_MB] = Data_MB; rs_arr->flag_TIMEOUT_to_Send=true; RS_Send(rs_arr, rs_arr->buffer, 10); } void SendCorreoRS(RS_DATA *rs_arr) { unsigned int Data, CRC, i; if(!RSleng) return; rs_arr->buffer[0] = 0xAA; rs_arr->buffer[1] = 0x55; CRC = 0xAA + 0x55; for (i=0;i>8*(i&1)) & 0xFF; rs_arr->buffer[i+2] = Data; CRC+=Data; } rs_arr->buffer[RSleng*2+1] = ~CRC & 0xFF; rs_arr->flag_TIMEOUT_to_Send=true; RS_Send(rs_arr, rs_arr->buffer, RSleng*2+2); } //=========================================================================== // No more. //===========================================================================