97 lines
2.6 KiB
C
97 lines
2.6 KiB
C
#include "modbus_485.h"
|
||
|
||
//static void scom_485_send(UART_HandleTypeDef *huart, char *str)
|
||
//{
|
||
// RS485_RW(RS485_WR);
|
||
// vTaskDelay(10);
|
||
// printf("\r\n");
|
||
// usart_printf(huart, "rs485 receive:[%s]\r\n", str);
|
||
// printf("printf test_data:[%s]\r\n", str);
|
||
// RS485_RW(RS485_RD);
|
||
//}
|
||
|
||
void parse_scom_485(st_scom *scom)
|
||
{
|
||
if ((scom == &scom2_rs485) && (scom->rx_flag == TRUE))
|
||
{
|
||
scom->rx_flag = FALSE;
|
||
if ((scom->rx_buff[0] == 0xff) && (scom->rx_buff[1] == 0xff) && (scom->rx_buff[scom->rx_len - 1] == 0xaa))
|
||
{
|
||
// scom_485_send(&huart2, scom->rx_buff);
|
||
//RS485_RW(RS485_WR);
|
||
vTaskDelay(10);
|
||
HAL_UART_Transmit(&huart2, scom->rx_buff, scom->rx_len, 0xFFFF);
|
||
//RS485_RW(RS485_RD);
|
||
}
|
||
scom->rx_len = 0;
|
||
}
|
||
}
|
||
|
||
void transparent_485(st_scom *scom)
|
||
{
|
||
if(scom != &scom2_rs485) return;
|
||
|
||
//来自上位机的数据是否接收完成
|
||
if(scom->rx_flag == TRUE)
|
||
{
|
||
scom->rx_flag = FALSE;
|
||
|
||
switch (sig_trans)
|
||
{
|
||
case TRANS_HART:
|
||
{
|
||
if ((scom->rx_buff[0] == 0xff) && (scom->rx_buff[1] == 0xff) && (scom->rx_buff[scom->rx_len - 1] == 0xaa))
|
||
{
|
||
//接收到的数据是否符合HART数据报,符合则写入HART的tx,准备发送至HART设备
|
||
memcpy(scom1_hart.tx_buff, scom->rx_buff, sizeof(scom->rx_buff));
|
||
scom1_hart.tx_flag = TRUE;
|
||
}
|
||
}
|
||
break;
|
||
|
||
case TRANS_BLUETOOTH:
|
||
{
|
||
//将接收到的数据存入BLE的tx,准备发送至蓝牙设备
|
||
memcpy(scom6_ble.tx_buff, scom->rx_buff, sizeof(scom->rx_buff));
|
||
scom6_ble.tx_flag = TRUE;
|
||
}
|
||
break;
|
||
|
||
case TRANS_MODBUS:
|
||
{
|
||
modbus_process_rtu();
|
||
}
|
||
break;
|
||
|
||
case TRANS_NONE:
|
||
{}
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
|
||
//清空缓存区,等待新的数据
|
||
memset(scom->rx_buff, 0, sizeof(scom->rx_buff));
|
||
scom->rx_len = 0;
|
||
}
|
||
|
||
//数据是否准备完成
|
||
if( (scom->tx_flag == TRUE) && (sig_trans != TRANS_NONE) )
|
||
{
|
||
scom->tx_flag = FALSE;
|
||
|
||
vTaskDelay(10);
|
||
|
||
//将数据发送至上位机
|
||
HAL_UART_Transmit(&huart2, scom->tx_buff, scom->tx_len, 0xFFFF);
|
||
|
||
//清空缓存区,等待新的数据
|
||
memset(scom->tx_buff, 0, sizeof(scom->tx_buff));
|
||
scom->tx_len = 0;
|
||
}
|
||
|
||
}
|
||
|
||
|