IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 第一次负责公司一个项目的开发,阶段性总结 -> 正文阅读

[网络协议]第一次负责公司一个项目的开发,阶段性总结

一 项目背景

? ? ? ? 项目名称是模拟盘,其中主控使用的是STM32F407ZGT6,使用W5300网卡,两种通信方式:tcp_modbus(ip协议) 和 CAN通信。

? ? ? ? 从机,就是主控的下属设备。使用的芯片相同,主要就是引脚的输入输出,和CAN实现与主控之间的通信。

二 问题分析

? ? ? ? 第一次负责一个项目的,有紧张,更多的还是欣喜。来公司半年,终于要单独负责一个项目的开发了,这应该是我成长的一个体现。之前干的是某个系统中的某一块功能。从接手这个项目到今天,已经快一个月了,主控的各个模块的功能已经实现,整个项目哦,包括驱动开发,应用开发还差最后的联通调试。

? ? ? ? 昨天下午,坐在电脑前冷静分析近段时间所遇到的问题,发现了许多不足之处。

? ? ? ? 1.在给整个系统做框架时,我虽然分析好了整体流程的大概框架,我以为框架的设计,只要主体流程的正确,就可以了,但是在后续的开发过程中发现,错了。

? ? ? ? 反思:我应该分析的更详细一些,把系统中具体的每一个功能模块的流程图也分析出来。

? ? ? ? 2.程序开发过程,没有顺序性,只是想到了哪一个模块,就完善哪一个模块的功能。没有系统性,会造成程序的重复开发,对开发进度不明确,浪费时间。

? ? ? ? 反思:程序开发之前,把整个系统的逻辑框图滤清,明确的分割出不同的功能模块,进行模块化开发,当某一模块的功能完成时,进行检验,测试后,完成闭环,就是模块功能,编程实现完毕。

三 系统开发

? ? ? ? 1.主控的逻辑框图。类似于流程图,相当于流程图的上位:

?2.下面是tcp/ip协议实现的逻辑框图,使用网卡W5300.

服务器端和客户端的区别

?

?四 程序概要

? ? ? ? 1.服务器端的程序实现,它是实现与CAN和与上位机的通信

/* ----------------------- System includes ----------------------------------*/
#include <stdio.h>
#include <string.h>

#include "port.h"
#include "wizsocket.h"
/* ----------------------- lwIP includes ------------------------------------*/
#include "lwip/api.h"
#include "lwip/tcp.h"

/* ----------------------- Modbus includes ----------------------------------*/
#include "mb.h"
#include "mbport.h"

/* ----------------------- MBAP Header --------------------------------------*/
#define MB_TCP_UID          6
#define MB_TCP_LEN          4
#define MB_TCP_FUNC         7

/* ----------------------- Defines  -----------------------------------------*/
#define MB_TCP_DEFAULT_PORT 502 /* TCP listening port. */
#define MB_TCP_BUF_SIZE     ( 256 + 7 ) /* Must hold a complete Modbus TCP frame. */

/* ----------------------- Prototypes ---------------------------------------*/
int W5300_TCPServer_Recv(void);
BOOL XMB_W5300_TCPServer_Send( const UCHAR * pucMBTCPFrame, USHORT usTCPLength );
volatile int sock;

/* ----------------------- Static variables ---------------------------------*/
static UCHAR    aucTCPBuf[MB_TCP_BUF_SIZE];
static USHORT   usTCPBufPos;

/* ----------------------- Static functions ---------------------------------*/



/* ----------------------- Begin implementation -----------------------------*/
/*******************************************************************************
* @brief       函数名:W5300s_TCPServer_Init
*功能:         W5300网卡通信流程初始化           
*
*param         参数:无
*
*return        初始化是否成功
*******************************************************************************/
BOOL W5300s_TCPServer_Init(USHORT usTCPPort)     // TCP Server 
{
  int ret;

  /*创建套接字*/
  int sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
  
  /*绑定本地IP*/
  struct sockaddr_in LocalAddr;
  memset(&LocalAddr, 0, sizeof(LocalAddr));  //每个字节都用0填充
  LocalAddr.sin_family = PF_INET;
  LocalAddr.sin_addr = inet_addr("192.168.1.6");
  LocalAddr.sin_port = usTCPPort;
  
  ret = bind(sock,(struct sockaddr *)&LocalAddr, sizeof(LocalAddr));    //绑定
  
  if(ret < 0)
    return FALSE;
  
   /*进入监听状态*/
  ret = listen(sock, 20);
  if(ret < 0)
    return FALSE;
  
  return TRUE;
}

/****************************************************************************************************************************************************/
/*
* @brief  tcp_sendto_can   接收tcp数据中的modbus
*
* @param  None
*
* @return int型数据
*/
/****************************************************************************************************************************************************/
int W5300_TCPServer_Recv(void)
{
  int ret = 0; //数据长度
  int reflag = FALSE;

  /*接收客户端请求*/
  int clntSock;
  struct sockaddr_in clntAddr;
  int nSize = sizeof(clntAddr);
  
  /*等待客户端链接,阻塞 */
  //vDebug("Waiting for client connection...\n");
  while(1)
  {
    clntSock = accept(sock, (struct sockaddr*)&clntAddr, &nSize);
    if(clntSock != -1)
      break;
  }
  /*接收客户端数据*/
  //vDebug("Waiting for client to send data...\n");
  while(1)
  {
    ret = recv(clntSock,aucTCPBuf,sizeof(aucTCPBuf), NULL);
    if(ret != -1)
    {
      reflag = TRUE;
      break;
    }
  }
  
  usTCPBufPos = (USHORT)ret;  //供modbus使用
  
  return reflag;
}

BOOL
xMBTCPPortGetRequest( UCHAR ** ppucMBTCPFrame, USHORT * usTCPLength )
{
    *ppucMBTCPFrame = &aucTCPBuf[0];
    *usTCPLength = usTCPBufPos;

    /* Reset the buffer. */
    usTCPBufPos = 0;
    
    return TRUE;
}

/*******************************************************************************
*                        XMBTCP_Can_Sendto_Tcp
*              接收虚拟寄存器中的数据,然后使用W5300发送出去
*
*******************************************************************************/
BOOL XMB_W5300_TCPServer_Send( const UCHAR * pucMBTCPFrame, USHORT usTCPLength )
{

  /*接收客户端请求*/
  int clntSock;
  struct sockaddr_in clntAddr;
  int nSize = sizeof(clntAddr);
  /*等待客户端链接*/
  //vDebug("Waiting for client connection...\n");
  while(1)
  {
    //应该增加连接超时处理机制
    clntSock = accept(sock, (struct sockaddr*)&clntAddr, &nSize);
    if(clntSock != -1)
      break;
  }
  /*向客户端发送数据*/;
  send(clntSock, pucMBTCPFrame, usTCPLength, 0);

  return TRUE;  
}

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-08-07 12:25:58  更:2021-08-07 12:28:12 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/3 10:05:12-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码