Skip to content

Ruodeler/Modbus-ASCII-

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 

Repository files navigation

Modbus-ASCII-

MODBUS ASCII lrc8 #include "stm32f10x.h"

u8 Rcv_Buffer[131]={0};
u8 Send_Buffer[131]={0}; u16 Rcv_Index=0; u16 Send_Index=0; u8 Comu_Busy=0; u8 Sendcount=0; u8 Recivecount=0; u16 KAIGUANLIANG=0; extern u16 DLBJ,dlBJ,DWBJ,BJBZ,BJBZ1,BJBZ2,BJBZ3,BJBZ4,BJBZ5; //¶Ï·±¨¾¯

extern u16 DL1,DL2,DL3,DL4,DL5,DL6,DL7,DL8,DL9,DL10,DL11,DL12; u16 DL=0; u16 SendFlag=0; extern u16 Rcv_For_User[80];//Õâ¸öÊý×éÊÇÒ»¸ö¶ÔÍâ½Ó¿Ú£¬Ö÷³ÌÐòÖдÓÕâ¸öÊý×éÖÐÈ¡³ö¿ÉÓõÄÊý¾Ý¡£µÚÒ»¸öÔªËØÖ»ÓÐ0ºÍ1Á½¸ö¿ÉÄÜÖµ£¬ÓÃÓÚ±íʾÊý×éÄÚÈÝÊÇ·ñÒѾ­¸úйý¡£ extern u16 Send_For_User[80];//Õâ¸öÊý×éÊÇÒ»¸ö¶ÔÍâ½Ó¿Ú£¬Ö÷³ÌÐò½«Òª·¢Ë͵ÄÊý¾Ý·ÅÖÃÔÚÕâ¸öÊý×éÖС£µÚÒ»¸öÔªËØÖ»ÓÐ0ºÍ1Á½¸ö¿ÉÄÜÖµ£¬ÓÃÓÚ±íʾÊý×éÄÚÈÝÊÇ·ñÒѾ­¸úйý¡£ extern u16 XH1; extern u16 I1_1,IC_1,LIM_1,D_1,C_1; //ÄǼ¸Â·µÄÄ£ÄâÖµ extern u16 I1_2,IC_2,LIM_2,D_2,C_2; extern u16 I1_3,IC_3,LIM_3,D_3,C_3; extern u16 I1_4,IC_4,LIM_4,D_4,C_4; extern u16 I1_5,IC_5,LIM_5,D_5,C_5; extern u16 I1_6,IC_6,LIM_6,D_6,C_6; extern u16 I1_7,IC_7,LIM_7,D_7,C_7; extern u16 I1_8,IC_8,LIM_8,D_8,C_8; extern u8 LINEAR1,LINEAR2,LINEAR3,LINEAR4; extern u16 YALI,XIEHE,ZUOYI;//ѹÁ¦¿ª¹Ø£¬Ð¶ºÉ¿ª¹Ø£¬×ùÒοª¹Ø extern u16 T1_1,T1_2,T2_1,T2_2,T3_1,T3_2,T4_1,T4_2;
extern u32 I_FEEDBACK1,I_FEEDBACK2,I_FEEDBACK3,I_FEEDBACK4,I_FEEDBACK5,I_FEEDBACK6,I_FEEDBACK7,I_FEEDBACK8; extern u32 I_FEEDBACK9,I_FEEDBACK10,I_FEEDBACK11,I_FEEDBACK12; extern u32 V_DONGBI, V_ZONG, V_DONGBI,V_FANDOU,V_FUZHU1,V_FUZHU2; ////#define YX1 GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_11); //#define YX2 GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_11); //#define YX3 GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_12); //#define YX4 GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_0); //#define YL GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_4); //#define ZW GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_3); //#define XH GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_7); extern u8 YX1,YX2,YX3,YX4,YL,ZW,XH; void MODBUS_Rcv(void); //£¨½ÓÊÜ£© void MODBUS_Send(void); //£¨·¢ËÍ£© void LRC_Cal(u8 *buffer1,u8 len,u8 *buffer2);//LRCУÑéÂë void response_handle(void); //µ±½ÓÊÜÍêÖ÷»úµÄÐÅÏ¢ºó£¬½øÐд¦Àí void Respond_Read(void);//ÉèÖÃģʽÏ£¬ÎҵĻØÓ¦ void Respond_Write(void); //¼à¿ØÉèÖÃģʽÏ£¬ÎҵĻØÓ¦ void Sendvalue_Init(void); //·¢ËÍÖµµÄ³õʼ»¯ void HexToAscii(u8 val); //Ê®Áù½øÖÆ×ªÎªASCIIÂë u8 AsciiToHex(u8 val); //ASCIIÂëת»»Îª16½øÖÆ extern u16 DBJ(u16 n); //¶Ï·±¨¾¯¼ì²â extern u16 dBJ(u16 n); //¶Ì·±¨¾¯¼ì²â extern u16 DDBJ(u16 n); //µçλÆ÷¶Ï·±¨¾¯¼ì²â¡£ extern u16 XBJ(u16 n); //ϵͳ±¨¾¯¹ýѹ¼ì²â extern u16 XBJ1(u16 n); //ϵͳ±¨¾¯Ç·Ñ¹¼ì²â extern u16 get_temperature(void); //ζȼì²â / º¯Êý¹¦ÄÜ£ºÓÃÓÚMODBUSeÐÅÏ¢½ÓÊÕ º¯ÊýÊäÈ룺ÎÞ¡£
º¯ÊýÊä³ö£ºÎÞ¡£ / void MODBUS_Rcv(void) { u8 Rcv_Data; if(Comu_Busy==0)//Èç¹û±¾»ú²»Ã¦£¬¿ÉÒÔ½ÓÊÕеÄÖ¡ { Rcv_Data = USART_ReceiveData(USART3); //´ó¸ç£¬ÎÒÃÇÄǶùÊÇ3 if(Rcv_Data == ':')//Ö¡Æðʼ±êÖ¾,±ê־еÄÖ¡¿ªÊ¼ { Rcv_Index = 0;//½«Ö¡¶¨Î»µ½Rcv_Buffer´æ·ÅµÚÒ»¸öÓÐЧ×Ö½ÚµÄλ//ÓпÉÄÜÒª¸ÄΪ0£¨Ã²ËÆÓÖ²»ÓøÄÁË£©£¨Æäʵ»¹ÊǸÄΪ0ÁË£© Rcv_Buffer[Rcv_Index] = ':'; Rcv_Index++;//ÒÆµ½ÏÂÒ»¸öλÖà Recivecount++;//½ÓÊÕµÄÓÐЧ×Ö½ÚÊý¼ÓÒ» } else if(Rcv_Data == '\n')//Èç¹ûÊÇ0x13£¬×îºóÒ»¸öÊý //ԭΪ'\r' { Rcv_Buffer[Rcv_Index] = Rcv_Data;//´æ·Å½ÓÊÕµ½µÄ×Ö½Ú Recivecount++;//½ÓÊÕµÄÓÐЧ×Ö½ÚÊý¼ÓÒ» if(Rcv_Index>=1&&Rcv_Buffer[Rcv_Index-1]=='\r')//±êÖ¾Ö¡½áÊø ԭΪ'' { Comu_Busy=1;//¿ªÊ¼´¦Àí»Ø¸´µÄÖ¡ÐÅÏ¢£¬½øÈëæ״̬ response_handle(); //´¦ÀíÊý¾Ý Recivecount=0;//Êý×éÇåÁã Comu_Busy=0;//»Ö¸´¿ÕÏÐ״̬ } } else//Èç¹ûÊDZðµÄ×Ö·û(Èç¹û½ÓÊÕµ½µÄÊÇÒ»¸öÊý×é) { Rcv_Buffer[Rcv_Index] = Rcv_Data;//´æ·Å½ÓÊÕµ½µÄ×Ö½Ú Rcv_Index++;//ÒÆµ½ÏÂÒ»¸öλÖà Recivecount++;//½ÓÊÕµÄÓÐЧ×Ö½ÚÊý¼ÓÒ» } } }

/* º¯Êý¹¦ÄÜ£ºÓÃÓÚModbusÐÅÏ¢·¢ËÍ º¯ÊýÊäÈ룺ÎÞ¡£
º¯ÊýÊä³ö£ºÎÞ¡£ */ void MODBUS_Send(void) { u8 Send_Data; Send_Data = Send_Buffer[Send_Index]; // USART_SendData(USART3,Send_Data); //ÒòΪÎÒÃÇÓõÄÊÇ3 Send_Index++;
if(Send_Index>=Sendcount)//Èç¹û·¢ËÍÍêÖ¸¶¨µÄÊý¾ÝÒÔºó { USART_ITConfig(USART3, USART_IT_TC, DISABLE);//¹Ø±ÕÊý¾Ý·¢ËÍÖÐ¶Ï Send_For_User[0]=0;//±íʾÊý¾ÝÒѾ­Ê¹ÓÃÍ꣬´ý¸úР}

}

/* º¯Êý¹¦ÄÜ£ºASCII¼ÆËãÓú¯Êý º¯ÊýÊäÈ룺buffer1ÊÇÒª½øÐÐLRC¼ÆËãµÄÐÅÏ¢Ê×µØÖ·£¬lenÊÇÐÅÏ¢ÖÐ×Ö½ÚÊý£¬buffer2ÊǽÓÊÕLRCУÑé½á¹ûµÄ´æ´¢¿Õ¼äÊ×µØÖ·
º¯ÊýÊä³ö£ºÎÞ */

void LRC_Cal(u8 * buffer1, u8 len, u8 * buffer2) //??????16???ASCII? { u8 i = 0; u8 temp = 0; u8 buffer[80] = { 0 };

while (i <(len/2)) { buffer[i] = AsciiToHex(*(buffer1 + 2 * i))16 +( AsciiToHex((buffer1 + 2 * i + 1))); temp += buffer[i]; i++; }

temp = temp % 0X100;
temp =255-temp;
temp= temp + 1;
*buffer2 = temp/16;
*(buffer2 + 1) = (temp % 16);
HexToAscii(buffer2);
HexToAscii(buffer2 + 1);

}

void HexToAscii(u8 *val) //Ê®Áù½øÖÆ×ª»»ÎªASCIIÂë { if(*val>9) *val += 'A'-10;//ת»»³É×ÖĸµÄasciiÂë else *val += '0';//ת»»³ÉÊý×ÖµÄasciiÂë return; }

u8 AsciiToHex(u8 val) //ASCIIת»¯Îª16½øÖÆ { if(val>='0'&&val<='9')
{ val -= '0'; return val; } if(val>='A'&&val<='F') { val -= 'A'-10; return val; } return val; } /* º¯Êý¹¦ÄÜ£º¶Ô½ÓÊյĻظ´ÐÅÏ¢½øÐд¦Àí,´Ó»Ø¸´ÐÅÏ¢»ñµÃÐèÒªµÄÊý¾Ý º¯ÊýÊäÈ룺ÎÞ¡£
º¯ÊýÊä³ö£ºÎÞ¡£ / void response_handle(void) //»Ø¸´µÄÊÇRDµÄÃüÁWDµÄÃüÁîûÓÐʵ¼ÊÊý¾Ý
{ u8 CalKey[2]={0};//¼ÆËã³öÀ´µÄУÑéÖµ u8 i=0; u16 cnt=0; u16 dizhi=0; LRC_Cal(&Rcv_Buffer[1],Recivecount-5, CalKey);//×îºóËÄλÊÇLRCºÍ if(CalKey[0]==Rcv_Buffer[Recivecount-4]&& CalKey[1]==Rcv_Buffer[Recivecount-3]//¼ÆËã³öµÄУÑéÓë½ÓÊÕµ½µÄLRC±È½ÏÕýºÃÔÚµ¹ÊýµÚ3¸ö &&Rcv_Buffer[1]==(0 + '0')&&Rcv_Buffer[2]==(1 + '0'))//Èç¹ûУÑéÕýÈ·,ͬʱµ¥ÔªºÅÕýÈ· { dizhi=AsciiToHex(Rcv_Buffer[5])1616
16+AsciiToHex(Rcv_Buffer[6])1616 +AsciiToHex(Rcv_Buffer[7])16+AsciiToHex(Rcv_Buffer[8]); cnt=AsciiToHex(Rcv_Buffer[9])161616+AsciiToHex(Rcv_Buffer[10])1616 +AsciiToHex(Rcv_Buffer[11])16+AsciiToHex(Rcv_Buffer[12]); if(Rcv_Buffer[3]==(1+'0') && Rcv_Buffer[4]==(0+'0'))//ÊǸøÎÒдÊý¾Ý { //Ö÷»ú¸øÎÒÊý¾Ý£¬ÎÒÏìÓ¦Ëû if(dizhi==1000)//×ÜÌåÉèÖ㬴«µ¥ÏßÐÔÒÔ¼°Ë«ÏßÐÔ { Rcv_For_User[1]=AsciiToHex(Rcv_Buffer[15])161616+AsciiToHex(Rcv_Buffer[16])1616 +AsciiToHex(Rcv_Buffer[17])16+AsciiToHex(Rcv_Buffer[18+i4]); } if(dizhi>=1100 && dizhi<=1109) { for(i=0;i<cnt;i++)//½«Êý¾Ýת´æµ½Rcv_For_UserÊý×éÄÚ¹©Óû§Ê¹Óà { //°Ñ×Ö·ûת»»³ÉÊý×Ö Rcv_For_User[i+dizhi-1098]=AsciiToHex(Rcv_Buffer[15+i4])161616+AsciiToHex(Rcv_Buffer[16+i4])1616 +AsciiToHex(Rcv_Buffer[17+i4])16+AsciiToHex(Rcv_Buffer[18+i4]); //·µ»ØÖµÓ¦¸ÃÊÇ´ÓµÚ8¸ö¿ªÊ¼8161616+91616+1016+11 } } if(dizhi>=1200 && dizhi<=1209) { for(i=0;i<cnt;i++)//½«Êý¾Ýת´æµ½Rcv_For_UserÊý×éÄÚ¹©Óû§Ê¹Óà { //°Ñ×Ö·ûת»»³ÉÊý×Ö Rcv_For_User[i+dizhi-1188]=AsciiToHex(Rcv_Buffer[15+i4])161616+AsciiToHex(Rcv_Buffer[16+i4])1616 +AsciiToHex(Rcv_Buffer[17+i4])16+AsciiToHex(Rcv_Buffer[18+i4]); } } if(dizhi>=1300 && dizhi<=1309) { for(i=0;i<cnt;i++)//½«Êý¾Ýת´æµ½Rcv_For_UserÊý×éÄÚ¹©Óû§Ê¹Óà { //°Ñ×Ö·ûת»»³ÉÊý×Ö Rcv_For_User[i+dizhi-1278]=AsciiToHex(Rcv_Buffer[15+i4])161616+AsciiToHex(Rcv_Buffer[16+i4])1616 +AsciiToHex(Rcv_Buffer[17+i4])16+AsciiToHex(Rcv_Buffer[18+i4]); } } if(dizhi>=1400 && dizhi<=1409) { for(i=0;i<cnt;i++)//½«Êý¾Ýת´æµ½Rcv_For_UserÊý×éÄÚ¹©Óû§Ê¹Óà { //°Ñ×Ö·ûת»»³ÉÊý×Ö Rcv_For_User[i+dizhi-1368]=AsciiToHex(Rcv_Buffer[15+i4])161616+AsciiToHex(Rcv_Buffer[16+i4])1616 +AsciiToHex(Rcv_Buffer[17+i4])16+AsciiToHex(Rcv_Buffer[18+i4]); } } if(dizhi>=2011 && dizhi<=2012) { for(i=0;i<cnt;i++)//½«Êý¾Ýת´æµ½Rcv_For_UserÊý×éÄÚ¹©Óû§Ê¹Óà { //°Ñ×Ö·ûת»»³ÉÊý×Ö Rcv_For_User[i+dizhi-1969]=AsciiToHex(Rcv_Buffer[15+i4])161616+AsciiToHex(Rcv_Buffer[16+i4])1616 +AsciiToHex(Rcv_Buffer[17+i4])16+AsciiToHex(Rcv_Buffer[18+i4]); } } if(dizhi>=2021 && dizhi<=2022) { for(i=0;i<cnt;i++)//½«Êý¾Ýת´æµ½Rcv_For_UserÊý×éÄÚ¹©Óû§Ê¹Óà { //°Ñ×Ö·ûת»»³ÉÊý×Ö Rcv_For_User[i+dizhi-1977]=AsciiToHex(Rcv_Buffer[15+i4])161616+AsciiToHex(Rcv_Buffer[16+i4])1616 +AsciiToHex(Rcv_Buffer[17+i4])16+AsciiToHex(Rcv_Buffer[18+i4]); } } if(dizhi>=2031 && dizhi <=2032) { for(i=0;i<cnt;i++)//½«Êý¾Ýת´æµ½Rcv_For_UserÊý×éÄÚ¹©Óû§Ê¹Óà { //°Ñ×Ö·ûת»»³ÉÊý×Ö Rcv_For_User[i+dizhi-1985]=AsciiToHex(Rcv_Buffer[15+i4])161616+AsciiToHex(Rcv_Buffer[16+i4])1616 +AsciiToHex(Rcv_Buffer[17+i4])16+AsciiToHex(Rcv_Buffer[18+i4]); } } if(dizhi>=2041 && dizhi<=2042) { for(i=0;i<cnt;i++)//½«Êý¾Ýת´æµ½Rcv_For_UserÊý×éÄÚ¹©Óû§Ê¹Óà { //°Ñ×Ö·ûת»»³ÉÊý×Ö Rcv_For_User[i+dizhi-1993]=AsciiToHex(Rcv_Buffer[15+i4])161616+AsciiToHex(Rcv_Buffer[16+i4])1616 +AsciiToHex(Rcv_Buffer[17+i4])16+AsciiToHex(Rcv_Buffer[18+i4]); } } if(dizhi==2100) { Rcv_For_User[50]=AsciiToHex(Rcv_Buffer[18]);//EEPROM } SendFlag=0; //ÏÈÔÝʱ·ÅÔÚÕâ¶ù Rcv_For_User[0]=1;//±íʾÊý¾ÝÒѾ­¸úУ¬¿ÉÒÔʹÓÃ

		}
	  if(Rcv_Buffer[3]==(0+'0') &&Rcv_Buffer[4]==(3+'0'))
		{
			SendFlag=1;      //Èç¹ûÖ÷»úÒª¿´ÎÒµÄÊý¾Ý£¬ÎÒ¾ÍÖ±½Óд¸øËü
		}
		
}		

}

void Respond_Read(void) //Ö÷»úÏòÎÒдÊý¾Ý£¬ÎÒÒª·¢17¸öASCIIÂë { u8 CalKey[2]={0}; //¼ÆËã³öÀ´µÄУÑéÖµ ÎÒÕâ¸öµ±µÄУÑéÖµÖ»ÓÐһλ
Sendcount= 17; Send_Buffer[0]=':';//´æ·ÅÖ¡¿ªÊ¼±êÖ¾£¨ÎÒÃÇÕâ¶ùÓ¦¸ÃÊÇ':') //modified Send_Buffer[1]=0 + '0';//Õ¾ºÅ Send_Buffer[2]=1 + '0'; Send_Buffer[3]=1+'0'; //¹¦ÄÜÂëΪ10 Send_Buffer[4]=0+'0';

//ÏÈÌîдÊ×µØÖ·
Send_Buffer[5]=Rcv_Buffer[5];   
Send_Buffer[6]=Rcv_Buffer[6];
Send_Buffer[7]=Rcv_Buffer[7];
Send_Buffer[8]=Rcv_Buffer[8];

//ÔÙÌîдҪ¶ÁµÄ×ÖÊý
Send_Buffer[9]=Rcv_Buffer[9];
Send_Buffer[10]=Rcv_Buffer[10];
Send_Buffer[11]=Rcv_Buffer[11]; 
Send_Buffer[12]=Rcv_Buffer[12];	
LRC_Cal(&Send_Buffer[1],Sendcount-4,CalKey);// i just minus 1
Send_Buffer[13]=CalKey[0];                 
Send_Buffer[14]=CalKey[1];
//Ìîд½áÊø·û
Send_Buffer[15]='\r';
Send_Buffer[16]='\n';

//Send_Buffer[0]=0; //Send_Buffer[1]=1; //Send_Buffer[2]=2; //Send_Buffer[3]=3; //Send_Buffer[4]=4; Send_Index = 0; USART_ITConfig(USART3, USART_IT_TC, ENABLE);//¿ªÆôÊý¾Ý·¢ËÍÖÐ¶Ï }

/* º¯Êý¹¦ÄÜ£º¶ÁÈ¡ÉèÖÃģʽÏÂÎҵķ´À¡() */ void Respond_Write(void)// {

u8 CalKey[2]={0};//¼ÆËã³öÀ´µÄУÑéÖµ
u16 temp = 0;//ÁÙʱ¼ÆËãÓÃ
u16 cnt=0;   //¼ÆËã´«ÊäÊý¾ÝËùÓÃ
u8 cnt1,cnt2=0;
u16 dizhi=0;
u8 i = 0;//Ñ­»·×¨ÓÃ
dizhi=AsciiToHex(Rcv_Buffer[5])*16*16*16+AsciiToHex(Rcv_Buffer[6])*16*16
									+AsciiToHex(Rcv_Buffer[7])*16+AsciiToHex(Rcv_Buffer[8]);
cnt=AsciiToHex(Rcv_Buffer[9])*16*16*16+AsciiToHex(Rcv_Buffer[10])*16*16
									+AsciiToHex(Rcv_Buffer[11])*16+AsciiToHex(Rcv_Buffer[12]);
//ÌîдҪдÈëµÄ×ÖÄÚÈÝ
Sendvalue_Init();
if(Send_For_User[0]==1)//Èç¹û·¢ËÍÊý×éµÄÄÚÈÝÒѾ­¸úйý
{

	Sendcount=11+4*cnt;//
	Send_Buffer[0]=':';//´æ·ÅÖ¡¿ªÊ¼±êÖ¾£¨ÎÒÃÇÕâ¶ùÓ¦¸ÃÊÇ':')   //modified
	Send_Buffer[1]=0 + '0';//Õ¾ºÅ
	Send_Buffer[2]=1 + '0';
 	Send_Buffer[3]=0+'0';	//	
	Send_Buffer[4]=3+'0';


	//ÏÈÌîд×Ö½ÚÊý·
		cnt1=(cnt*2)/16;
		cnt2=(cnt*2)%16;
	  HexToAscii(&cnt1);
		HexToAscii(&cnt2);
		Send_Buffer[5]=cnt1; 
		Send_Buffer[6]=cnt2;
	

	for(i=0;i<cnt;i++)//½«Êý¾Ýת´æµ½Rcv_For_UserÊý×éÄÚ¹©Óû§Ê¹ÓÃ
	{
		if(dizhi==1000)//Òª¿´Ä£ÄâͨµÀÇúÏßģʽ
		{
			temp = Send_For_User[69];
			Send_Buffer[7+i*4] = temp/(16*16*16);
			HexToAscii(&Send_Buffer[7+i*4]);
			temp %= 16*16*16;
			
			Send_Buffer[8+i*4] = temp/(16*16);
			HexToAscii(&Send_Buffer[8+i*4]);
			temp %= 16*16;
			Send_Buffer[9+i*4] = temp/(16);
			HexToAscii(&Send_Buffer[9+i*4]);
			temp %= 16;
			Send_Buffer[10+i*4] = temp;
			HexToAscii(&Send_Buffer[10+i*4]);
		}
		else if(dizhi>=1100 && dizhi<=1109)
		{
			temp = Send_For_User[dizhi-1099+i];
			Send_Buffer[7+i*4] = temp/(16*16*16);
			HexToAscii(&Send_Buffer[7+i*4]);
			temp %= 16*16*16;
			
			Send_Buffer[8+i*4] = temp/(16*16);
			HexToAscii(&Send_Buffer[8+i*4]);
			temp %= 16*16;
			Send_Buffer[9+i*4] = temp/(16);
			HexToAscii(&Send_Buffer[9+i*4]);
			temp %= 16;
			Send_Buffer[10+i*4] = temp;
			HexToAscii(&Send_Buffer[10+i*4]);
		}
			else if(dizhi>=1200 && dizhi<=1209)
			{
				temp = Send_For_User[dizhi-1189+i];
				Send_Buffer[7+i*4] = temp/(16*16*16);
				HexToAscii(&Send_Buffer[7+i*4]);
				temp %= 16*16*16;
				
				Send_Buffer[8+i*4] = temp/(16*16);
				HexToAscii(&Send_Buffer[8+i*4]);
				temp %= 16*16;
				Send_Buffer[9+i*4] = temp/(16);
				HexToAscii(&Send_Buffer[9+i*4]);
				temp %= 16;
				Send_Buffer[10+i*4] = temp;
				HexToAscii(&Send_Buffer[10+i*4]);
			}
			else if(dizhi>=1300 && dizhi<=1309)
			{
				temp = Send_For_User[dizhi-1279+i];
				Send_Buffer[7+i*4] = temp/(16*16*16);
				HexToAscii(&Send_Buffer[7+i*4]);
				temp %= 16*16*16;
				
				Send_Buffer[8+i*4] = temp/(16*16);
				HexToAscii(&Send_Buffer[8+i*4]);
				temp %= 16*16;
				Send_Buffer[9+i*4] = temp/(16);
				HexToAscii(&Send_Buffer[9+i*4]);
				temp %= 16;
				Send_Buffer[10+i*4] = temp;
				HexToAscii(&Send_Buffer[10+i*4]);
			}
			else if(dizhi>=1400 && dizhi<=1409)
			{
				temp = Send_For_User[dizhi-1369+i];
				Send_Buffer[7+i*4] = temp/(16*16*16);
				HexToAscii(&Send_Buffer[7+i*4]);
				temp %= 16*16*16;
				
				Send_Buffer[8+i*4] = temp/(16*16);
				HexToAscii(&Send_Buffer[8+i*4]);
				temp %= 16*16;
				Send_Buffer[9+i*4] = temp/(16);
				HexToAscii(&Send_Buffer[9+i*4]);
				temp %= 16;
				Send_Buffer[10+i*4] = temp;
				HexToAscii(&Send_Buffer[10+i*4]);
			}
			else if(dizhi>=2011 && dizhi<=2012)
			{
				temp = Send_For_User[dizhi-1970+i];
				Send_Buffer[7+i*4] = temp/(16*16*16);
				HexToAscii(&Send_Buffer[7+i*4]);
				temp %= 16*16*16;
				
				Send_Buffer[8+i*4] = temp/(16*16);
				HexToAscii(&Send_Buffer[8+i*4]);
				temp %= 16*16;
				Send_Buffer[9+i*4] = temp/(16);
				HexToAscii(&Send_Buffer[9+i*4]);
				temp %= 16;
				Send_Buffer[10+i*4] = temp;
				HexToAscii(&Send_Buffer[10+i*4]);
			}
				else if(dizhi>=2021 && dizhi<=2022)
			{
				temp = Send_For_User[dizhi-1978+i];
				Send_Buffer[7+i*4] = temp/(16*16*16);
				HexToAscii(&Send_Buffer[7+i*4]);
				temp %= 16*16*16;
				
				Send_Buffer[8+i*4] = temp/(16*16);
				HexToAscii(&Send_Buffer[8+i*4]);
				temp %= 16*16;
				Send_Buffer[9+i*4] = temp/(16);
				HexToAscii(&Send_Buffer[9+i*4]);
				temp %= 16;
				Send_Buffer[10+i*4] = temp;
				HexToAscii(&Send_Buffer[10+i*4]);
			}
				else if(dizhi>=2031 && dizhi<=2032)
			{
				temp = Send_For_User[dizhi-1986+i];
				Send_Buffer[7+i*4] = temp/(16*16*16);
				HexToAscii(&Send_Buffer[7+i*4]);
				temp %= 16*16*16;
				
				Send_Buffer[8+i*4] = temp/(16*16);
				HexToAscii(&Send_Buffer[8+i*4]);
				temp %= 16*16;
				Send_Buffer[9+i*4] = temp/(16);
				HexToAscii(&Send_Buffer[9+i*4]);
				temp %= 16;
				Send_Buffer[10+i*4] = temp;
				HexToAscii(&Send_Buffer[10+i*4]);
			}
			else if(dizhi>=2041 && dizhi<=2042)
			{
				temp = Send_For_User[dizhi-1994+i];
				Send_Buffer[7+i*4] = temp/(16*16*16);
				HexToAscii(&Send_Buffer[7+i*4]);
				temp %= 16*16*16;
				
				Send_Buffer[8+i*4] = temp/(16*16);
				HexToAscii(&Send_Buffer[8+i*4]);
				temp %= 16*16;
				Send_Buffer[9+i*4] = temp/(16);
				HexToAscii(&Send_Buffer[9+i*4]);
				temp %= 16;
				Send_Buffer[10+i*4] = temp;
				HexToAscii(&Send_Buffer[10+i*4]);
			}
			
				else if(dizhi>=3000&& dizhi<=3019)
			{
				temp = Send_For_User[dizhi-2951+i];
				Send_Buffer[7+i*4] = temp/(16*16*16);
				HexToAscii(&Send_Buffer[7+i*4]);
				temp %= 16*16*16;
				
				Send_Buffer[8+i*4] = temp/(16*16);
				HexToAscii(&Send_Buffer[8+i*4]);
				temp %= 16*16;
				Send_Buffer[9+i*4] = temp/(16);
				HexToAscii(&Send_Buffer[9+i*4]);
				temp %= 16;
				Send_Buffer[10+i*4] = temp;
				HexToAscii(&Send_Buffer[10+i*4]);
			}
		
	}	
//	Send_For_User[0]=0;
	LRC_Cal(&Send_Buffer[1],Sendcount-4,CalKey);  //¼ÆËãLRCУÑéÂë
	Send_Buffer[7+4*cnt]=CalKey[0];
	Send_Buffer[8+4*cnt]=CalKey[1];
	
	//Ìîд½áÊø·û
	Send_Buffer[9+4*cnt]='\r';
	Send_Buffer[10+4*cnt]='\n';

	Send_Index = 0;
	USART_ITConfig(USART3, USART_IT_TC, ENABLE);//¿ªÆôÊý¾Ý·¢ËÍÖжÏ
}		    

}

void Sendvalue_Init(void) {

if(Send_For_User[0]==0)
{
	Send_For_User[1]=(u16)(I1_1);    //µÚһ·ͨµÀÕýÏò¼«ÏÞµçÁ÷
	Send_For_User[2]=(u16)(LIM_1);   //µÚһ·ͨµÀÕýÏò¼«ÏÞLIM+
	Send_For_User[3]=(u16)(IC_1);    //ͨµÀÕýÏòÇл»µçÁ÷IC+
	Send_For_User[4]=(u16)(C_1);     //ͨµÀÕýÏòÇл»µãC+
	Send_For_User[5]=(u16)(D_1);     //ͨµÀÕýÏòËÀÇøD+
	
	Send_For_User[6]=(u16)(I1_2);
	Send_For_User[7]=(u16)(LIM_2);
	Send_For_User[8]=(u16)(IC_2);
	Send_For_User[9]=(u16)(C_2);
	Send_For_User[10]=(u16)(D_2);
	
	Send_For_User[11]=(u16)(I1_3);
	Send_For_User[12]=(u16)(LIM_3);
	Send_For_User[13]=(u16)(IC_3);
	Send_For_User[14]=(u16)(C_3);
	Send_For_User[15]=(u16)(D_3);
	
	Send_For_User[16]=(u16)(I1_4);
	Send_For_User[17]=(u16)(LIM_4);
	Send_For_User[18]=(u16)(IC_4);
	Send_For_User[19]=(u16)(C_4);
	Send_For_User[20]=(u16)(D_4);
	
	Send_For_User[21]=(u16)(I1_5);
	Send_For_User[22]=(u16)(LIM_5);
	Send_For_User[23]=(u16)(IC_5);
	Send_For_User[24]=(u16)(C_5);
	Send_For_User[25]=(u16)(D_5);
	
	Send_For_User[26]=(u16)(I1_6);
	Send_For_User[27]=(u16)(LIM_6);
	Send_For_User[28]=(u16)(IC_6);
	Send_For_User[29]=(u16)(C_6);
	Send_For_User[30]=(u16)(D_6);
	
	Send_For_User[31]=(u16)(I1_7);
	Send_For_User[32]=(u16)(LIM_7);
	Send_For_User[33]=(u16)(IC_7);
	Send_For_User[34]=(u16)(C_7);
	Send_For_User[35]=(u16)(D_7);
	
	Send_For_User[36]=(u16)(I1_8);
	Send_For_User[37]=(u16)(LIM_8);
	Send_For_User[38]=(u16)(IC_8);
	Send_For_User[39]=(u16)(C_8);
	Send_For_User[40]=(u16)(D_8);
	
	Send_For_User[41]=(u16)(T1_1);   
	Send_For_User[42]=(u16)(T1_2);
	Send_For_User[43]=(u16)(T2_1);
	Send_For_User[44]=(u16)(T2_2);
	Send_For_User[45]=(u16)(T3_1);   //²Ù×Ý¿ª¹Ø¼ÓËÙʱ¼ä
	Send_For_User[46]=(u16)(T3_2);
	Send_For_User[47]=(u16)(T4_1);
	Send_For_User[48]=(u16)(T4_2);
	KAIGUANLIANG=GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_11)+GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_11)*2+
	            GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_12)*4+GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_0)*8+
							GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_4)*16+GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_3)*32+
						  XH1*64;
	Send_For_User[49]=(u16)(KAIGUANLIANG);//¿ª¹ØÁ¿×´Ì¬
	Send_For_User[50]=(u16)(I_FEEDBACK1);  //±ÈÀýµç´ÅÌúµç1
	Send_For_User[51]=(u16)(I_FEEDBACK2);  //±ÈÀýµç´ÅÌúµç2
	Send_For_User[52]=(u16)(I_FEEDBACK3);  //±ÈÀýµç´ÅÌúµç3
	Send_For_User[53]=(u16)(I_FEEDBACK4);  //±ÈÀýµç´ÅÌúµç4
	Send_For_User[54]=(u16)(I_FEEDBACK5);  //±ÈÀýµç´ÅÌúµç5
	Send_For_User[55]=(u16)(I_FEEDBACK6);  //±ÈÀýµç´ÅÌúµç6
	Send_For_User[56]=(u16)(I_FEEDBACK7);  //±ÈÀýµç´ÅÌúµç7
	Send_For_User[57]=(u16)(I_FEEDBACK8);  //±ÈÀýµç´ÅÌúµç8
	Send_For_User[58]=(u16)(I_FEEDBACK9);  //¿ª¹Øµç´ÅÌú1
	Send_For_User[59]=(u16)(I_FEEDBACK10);  //¿ª¹Øµç´ÅÌú2
	Send_For_User[60]=(u16)(I_FEEDBACK11);  //¿ª¹Øµç´ÅÌú3
	Send_For_User[61]=(u16)(I_FEEDBACK12);  //¿ª¹Øµç´ÅÌú4
	

	Send_For_User[62]=(u16)(V_DONGBI/10);      //µçλÆ÷µçѹ1
	Send_For_User[63]=(u16)(V_FANDOU/10);      //µçλÆ÷µçѹ2
	Send_For_User[64]=(u16)(V_FUZHU1/10);      //µçλÆ÷µçѹ3
	Send_For_User[65]=(u16)(V_FUZHU2/10);      //µçλÆ÷µçѹ4
	DLBJ=DL1| (DL2<<1) | (DL3<<2)|(DL4<<3) |(DL5<<4) | (DL6<<5)	
	|(DL7<<6)| (DL8<<7) | (DL9<<8)|(DL10<<9) |(DL11<<10) | (DL12<<11);	
	Send_For_User[66]=(u16)(DLBJ);
	dlBJ=dBJ(I_FEEDBACK1)| (dBJ(I_FEEDBACK2)<<1) | (dBJ(I_FEEDBACK3)<<2)|(dBJ(I_FEEDBACK4)<<3) |(dBJ(I_FEEDBACK5)<<4) | (dBJ(I_FEEDBACK6)<<5)	
	|(dBJ(I_FEEDBACK7)<<6)| (dBJ(I_FEEDBACK8)<<7) | (dBJ(I_FEEDBACK9)<<8)|(dBJ(I_FEEDBACK10)<<9) |(dBJ(I_FEEDBACK11)<<10) | (dBJ(I_FEEDBACK12)<<11);	
	if(dlBJ>0)
		BJBZ2=1;
	else if(dlBJ==0)
		BJBZ2=0;
	Send_For_User[67]=(u16)(dlBJ);
	if(DWBJ % 8 >0 || DLBJ>0 )
		BJBZ1=1;
	else
		BJBZ1=0;
	DWBJ=DDBJ(V_DONGBI)| (DDBJ(V_FANDOU)<<1) | (DDBJ(V_FUZHU1)<<2)|(DDBJ(V_FUZHU2)<<3) |(XBJ(V_ZONG)<<4) |(XBJ1(V_ZONG)<<5) |(get_temperature()<<6);
	Send_For_User[68]=(u16)(DWBJ);
	Send_For_User[69]=(u16)(LINEAR1+LINEAR2*2+LINEAR3*4+LINEAR4*8+ZUOYI*256+XIEHE*512+YALI*1024);  //Ä£ÄâͨµÀÇúÏß״̬
	Send_For_User[0]=1;


}

}

About

MODBUS ASCII lrc8

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published