STM32驱动驱动w5500移植移植FreeModbus实现实现ModbusTCP
首先我们下载FreeModbus源码,然后放到自己的工程中,新建一个MODBUS_TCP和PORT_TCP文件夹,然后将相关文件复
制到里面,如下图所示:
然后修改porttcp中的代码:
首先定义一个数组用于接收数据:
static UCHAR aucTCPBuf[MB_TCP_BUF_SIZE]; //接收缓冲区
然后在xMBTCPPortInit中初始化socket连接,然后监听端口。
BOOL
xMBTCPPortInit( USHORT usTCPPort )
{
BOOL bOkay = FALSE;
// 侦听端口 Modbus-TCP 端口
socket_init(SOCK_TCP_PORT,Sn_MR_TCP_TCP,local_tcp_port++,Sn_MR_ND_TCP);
listen_tcp_socket(SOCK_TCP_PORT);
bOkay = TRUE;
return bOkay;
}
然后在xMBTCPPortSendResponse函数中发送数据
BOOL
xMBTCPPortSendResponse(const UCHAR * pucMBTCPFrame, USHORT usTCPLength )
{
send_tcp_socket_data(SOCK_TCP_PORT,(UCHAR*)pucMBTCPFrame,usTCPLength);
return TRUE;
}
然后在xMBPortTCPPool执行接收和其他操作
BOOL
xMBPortTCPPool( void )
{
unsigned short int us_rlen;
unsigned char i;
i=get_tcp_socket_state(SOCK_TCP_PORT);
if(i==SOCK_ESTABLISHED_TCP)
{
if(get_tcp_socket_irq(SOCK_TCP_PORT) & Sn_IR_CON_TCP) //查看中断有没有发生
{
clear_tcp_socket_irq(SOCK_TCP_PORT, Sn_IR_CON_TCP); /*清除接收中断标志位*/
}
us_rlen=get_tcp_rx_buffer_size(SOCK_TCP_PORT); //获取接收到的数据字节 /*定义len为已接收数据的长度*/
if(us_rlen==0) //没有接收到数据
return FALSE; //返回
else