| | |
| | | #include "modbus.h" |
| | | #include "Rcc_Nvic_Systick.h" |
| | | #include "global_param.h" |
| | | /////////////////////////////////////////////////////////// |
| | | //u32 RS485_Baudrate=9600;//é讯波ç¹ç |
| | | //u8 RS485_Parity=0;//0æ æ ¡éªï¼1奿 ¡éªï¼2å¶æ ¡éª |
| | | u8 RS485_Addr=1;//仿ºå°å |
| | | u8 RS485_Addr=2;//仿ºå°å |
| | | //u16 RS485_Frame_Distance=4;//æ°æ®å¸§æå°é´éï¼ms),è¶
è¿æ¤æ¶é´å认为æ¯ä¸ä¸å¸§ |
| | | |
| | | u8 cmd_mode = 0; |
| | |
| | | void Modbus_RegMap(void) |
| | | { |
| | | u16 i; |
| | | for(i=0;i<MODBUS_SIZE;i++) |
| | | //RS485_Addr=g_com_map[DEV_ID]; |
| | | for(i=0;i<MODBUS_SIZE/2;i++) |
| | | { |
| | | Modbus_HoldReg[i]=i; |
| | | Modbus_HoldReg[2*i]=1; |
| | | Modbus_HoldReg[2*i+1]=0xffff; |
| | | } |
| | | //è¾å
¥å¼å
³éå¯å卿éæå |
| | | // Modbus_InputIO[0]=(vu32*)&PEin(4);//KEY0 //&PEin(4)ï¼åPE4çå°åï¼(vu32*)&PEin(4)å°PE4å°å强å¶è½¬æ¢ä¸ºuw32ç±»åçå°åï¼Modbus_InputIO[0]=(vu32*)&PEin(4); å°è½¬æ¢å¥½çå°åéç»å°åæéModbus_InputIO[0]ï¼ |
| | |
| | | //åén个åèæ°æ® |
| | | //buff:åéåºé¦å°å |
| | | //lenï¼åéçåèæ° |
| | | void RS485_SendData(u8 *buff,u8 len) |
| | | { |
| | | RS485_TX_ON;//åæ¢ä¸ºå鿍¡å¼ |
| | | delay_us(100); |
| | | while(len--) |
| | | { |
| | | while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);//çå¾
åéåºä¸ºç©º |
| | | USART_SendData(USART1,*(buff++)); |
| | | } |
| | | while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET);//çå¾
åé宿 |
| | | RS485_TX_OFF;//å¼å¯æ¥æ¶æ¨¡å¼ |
| | | delay_us(100); |
| | | } |
| | | //void RS485_SendData(u8 *buff,u8 len) |
| | | //{ |
| | | // RS485_TX_ON;//åæ¢ä¸ºå鿍¡å¼ |
| | | // #ifdef BAUDRATE_19200 |
| | | // delay_ms(5); |
| | | // #else |
| | | // delay_ms(1); |
| | | // #endif |
| | | // while(len--) |
| | | // { |
| | | // while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);//çå¾
åéåºä¸ºç©º |
| | | // USART_SendData(USART1,*(buff++)); |
| | | // } |
| | | // while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET);//çå¾
åé宿 |
| | | // RS485_TX_OFF;//å¼å¯æ¥æ¶æ¨¡å¼ |
| | | //} |
| | | |
| | | |
| | | ///////////////////////////////////////////////////////////////////////////////////// |
| | |
| | | RS485_TX_BUFF[0]=RS485_RX_BUFF[0]; |
| | | RS485_TX_BUFF[1]=RS485_RX_BUFF[1]|0x80; |
| | | RS485_TX_BUFF[2]=0x04; //å¼å¸¸ç |
| | | RS485_SendData(RS485_TX_BUFF,3); |
| | | UART_PushFrame(RS485_TX_BUFF,3); |
| | | cmd_mode = 0;//åè®®å¤ç宿 |
| | | } |
| | | } |
| | |
| | | RS485_TX_BUFF[0]=RS485_RX_BUFF[0]; |
| | | RS485_TX_BUFF[1]=RS485_RX_BUFF[1]|0x80; |
| | | RS485_TX_BUFF[2]=0x02; //å¼å¸¸ç |
| | | RS485_SendData(RS485_TX_BUFF,3); |
| | | UART_PushFrame(RS485_TX_BUFF,3); |
| | | cmd_mode = 0;//åè®®å¤ç宿 |
| | | } |
| | | } |
| | |
| | | RS485_TX_BUFF[0]=RS485_RX_BUFF[0]; |
| | | RS485_TX_BUFF[1]=RS485_RX_BUFF[1]|0x80; |
| | | RS485_TX_BUFF[2]=0x01; //å¼å¸¸ç |
| | | RS485_SendData(RS485_TX_BUFF,3); |
| | | UART_PushFrame(RS485_TX_BUFF,3); |
| | | cmd_mode = 0;//åè®®å¤ç宿 |
| | | } |
| | | } |
| | |
| | | calCRC=CRC_Compute(RS485_TX_BUFF,ByteNum+3); |
| | | RS485_TX_BUFF[ByteNum+3]=(calCRC>>8)&0xFF; |
| | | RS485_TX_BUFF[ByteNum+4]=(calCRC)&0xFF; |
| | | RS485_SendData(RS485_TX_BUFF,ByteNum+5); |
| | | UART_PushFrame(RS485_TX_BUFF,ByteNum+5); |
| | | } |
| | | else//å¯åå¨å°å+æ°éè¶
åºèå´ |
| | | { |
| | | RS485_TX_BUFF[0]=RS485_RX_BUFF[0]; |
| | | RS485_TX_BUFF[1]=RS485_RX_BUFF[1]|0x80; |
| | | RS485_TX_BUFF[2]=0x02; //å¼å¸¸ç |
| | | RS485_SendData(RS485_TX_BUFF,3); |
| | | UART_PushFrame(RS485_TX_BUFF,3); |
| | | } |
| | | } |
| | | |
| | |
| | | calCRC=CRC_Compute(RS485_TX_BUFF,ByteNum+3); |
| | | RS485_TX_BUFF[ByteNum+3]=(calCRC>>8)&0xFF; |
| | | RS485_TX_BUFF[ByteNum+4]=(calCRC)&0xFF; |
| | | RS485_SendData(RS485_TX_BUFF,ByteNum+5); |
| | | UART_PushFrame(RS485_TX_BUFF,ByteNum+5); |
| | | } |
| | | else//å¯åå¨å°å+æ°éè¶
åºèå´ |
| | | { |
| | | RS485_TX_BUFF[0]=RS485_RX_BUFF[0]; |
| | | RS485_TX_BUFF[1]=RS485_RX_BUFF[1]|0x80; |
| | | RS485_TX_BUFF[2]=0x02; //å¼å¸¸ç |
| | | RS485_SendData(RS485_TX_BUFF,3); |
| | | UART_PushFrame(RS485_TX_BUFF,3); |
| | | } |
| | | } |
| | | |
| | |
| | | calCRC=CRC_Compute(RS485_TX_BUFF,6); |
| | | RS485_TX_BUFF[6]=(calCRC>>8)&0xFF; |
| | | RS485_TX_BUFF[7]=(calCRC)&0xFF; |
| | | RS485_SendData(RS485_TX_BUFF,8); |
| | | UART_PushFrame(RS485_TX_BUFF,8); |
| | | } |
| | | else//å¯åå¨å°åè¶
åºèå´ |
| | | { |
| | | RS485_TX_BUFF[0]=RS485_RX_BUFF[0]; |
| | | RS485_TX_BUFF[1]=RS485_RX_BUFF[1]|0x80; |
| | | RS485_TX_BUFF[2]=0x02; //å¼å¸¸ç |
| | | RS485_SendData(RS485_TX_BUFF,3); |
| | | UART_PushFrame(RS485_TX_BUFF,3); |
| | | } |
| | | } |
| | | |
| | |
| | | calCRC=CRC_Compute(RS485_TX_BUFF,6); |
| | | RS485_TX_BUFF[6]=(calCRC>>8)&0xFF; |
| | | RS485_TX_BUFF[7]=(calCRC)&0xFF; |
| | | RS485_SendData(RS485_TX_BUFF,8); |
| | | UART_PushFrame(RS485_TX_BUFF,8); |
| | | } |
| | | else//å¯åå¨å°å+æ°éè¶
åºèå´ |
| | | { |
| | | RS485_TX_BUFF[0]=RS485_RX_BUFF[0]; |
| | | RS485_TX_BUFF[1]=RS485_RX_BUFF[1]|0x80; |
| | | RS485_TX_BUFF[2]=0x02; //å¼å¸¸ç |
| | | RS485_SendData(RS485_TX_BUFF,3); |
| | | UART_PushFrame(RS485_TX_BUFF,3); |
| | | } |
| | | } |
| | | |
| | |
| | | calCRC=CRC_Compute(RS485_TX_BUFF,RegNum*2+3); |
| | | RS485_TX_BUFF[RegNum*2+3]=(calCRC>>8)&0xFF; //CRCé«å°ä½ä¸å¯¹åï¼ // å
é«åä½ |
| | | RS485_TX_BUFF[RegNum*2+4]=(calCRC)&0xFF; |
| | | RS485_SendData(RS485_TX_BUFF,RegNum*2+5); |
| | | UART_PushFrame(RS485_TX_BUFF,RegNum*2+5); |
| | | } |
| | | else//å¯åå¨å°å+æ°éè¶
åºèå´ |
| | | { |
| | | RS485_TX_BUFF[0]=RS485_RX_BUFF[0]; |
| | | RS485_TX_BUFF[1]=RS485_RX_BUFF[1]|0x80; |
| | | RS485_TX_BUFF[2]=0x02; //å¼å¸¸ç |
| | | RS485_SendData(RS485_TX_BUFF,3); |
| | | UART_PushFrame(RS485_TX_BUFF,3); |
| | | } |
| | | } |
| | | |
| | |
| | | calCRC=CRC_Compute(RS485_TX_BUFF,6); |
| | | RS485_TX_BUFF[6]=(calCRC>>8)&0xFF; |
| | | RS485_TX_BUFF[7]=(calCRC)&0xFF; |
| | | RS485_SendData(RS485_TX_BUFF,8); |
| | | UART_PushFrame(RS485_TX_BUFF,8); |
| | | } |
| | | |
| | | //Modbusåè½ç 16å¤çç¨åº /////////////////////////////////////////////////////////////////////////////////////////////////å·²éªè¯ç¨åºOK |
| | |
| | | calCRC=CRC_Compute(RS485_TX_BUFF,6); |
| | | RS485_TX_BUFF[6]=(calCRC>>8)&0xFF; |
| | | RS485_TX_BUFF[7]=(calCRC)&0xFF; |
| | | RS485_SendData(RS485_TX_BUFF,8); |
| | | UART_PushFrame(RS485_TX_BUFF,8); |
| | | } |
| | | else//å¯åå¨å°å+æ°éè¶
åºèå´ |
| | | { |
| | | RS485_TX_BUFF[0]=RS485_RX_BUFF[0]; |
| | | RS485_TX_BUFF[1]=RS485_RX_BUFF[1]|0x80; |
| | | RS485_TX_BUFF[2]=0x02; //å¼å¸¸ç |
| | | RS485_SendData(RS485_TX_BUFF,3); |
| | | UART_PushFrame(RS485_TX_BUFF,3); |
| | | } |
| | | } |
| | | |