先看一下初始化函数,参数只有端口。

/* modbus协议栈初始化 */
eMBErrorCode eMBTCPInit(USHORT ucTCPPort);

在网络通信过程中,502端口是专门为modbus保留的,其它应用不得占用该端口。在缺省配置的情况下,强制使用502端口。

modbus协议栈的初始化,主要工作为tcp初始化,注册一些接口,设置节点号。

特别要注意节点号问题,由于网络中通过IP地址寻址,因此节点号对于本机来说就没什么用了,本机必须使用0xFF。

但是对于专门用于通过以太网TCP-IP网络和MODBUS串行链路之间的网关对MODBUS或MODBUS+串行链路从站的通信来说。网关转发数据包给串行链路时,节点号被用来寻址从节点。

modbus tcp端口初始化,主要就是创建modbus tcp服务器,监听端口,等待客户端连接。

/* modbus tcp端口初始化 */
BOOL xMBTCPPortInit(USHORT usTCPPort)
{struct tcp_pcb *pxPCBListenNew, *pxPCBListenOld;BOOL bOkay = FALSE;USHORT usPort;/* 默认端口502 */if(usTCPPort == 0){usPort = MB_TCP_DEFAULT_PORT;}else{usPort = (USHORT)usTCPPort;}/* 创建tcp控制块 */if((pxPCBListenNew = pxPCBListenOld = tcp_new()) == NULL){bOkay = FALSE;}/* 绑定端口 */else if(tcp_bind(pxPCBListenNew, IP_ADDR_ANY, (u16_t)usPort) != ERR_OK){(void)tcp_close(pxPCBListenOld);bOkay = FALSE;}/* 监听端口 */else if((pxPCBListenNew = tcp_listen(pxPCBListenNew)) == NULL){(void)tcp_close(pxPCBListenOld);bOkay = FALSE;}/* 注册连接回调函数 */else{tcp_accept(pxPCBListenNew, prvxMBTCPPortAccept);pxPCBListen = pxPCBListenNew;#ifdef MB_TCP_DEBUGvMBPortLog( MB_LOG_DEBUG, "MBTCP-ACCEPT", "Protocol stack ready.\r\n" );
#endif}bOkay = TRUE;return bOkay;
}

modbus tcp服务器同时只能接受一个客户端的连接。

/* 客户端连接回调函数 */
err_t prvxMBTCPPortAccept(void *pvArg, struct tcp_pcb *pxPCB, err_t xErr)
{err_t error;if(xErr != ERR_OK){return xErr;}/* 之前没有客户端连接 */if(pxPCBClient == NULL){pxPCBClient = pxPCB;/* 注册接收回调函数 */tcp_recv(pxPCB, prvxMBTCPPortReceive);/* 注册错误回调函数 */tcp_err(pxPCB, prvvMBTCPPortError);/* 回调函数参数 */tcp_arg(pxPCB, pxPCB);/* 接收字节数置0 */usTCPBufPos = 0;#ifdef MB_TCP_DEBUGvMBPortLog(MB_LOG_DEBUG, "MBTCP-ACCEPT", "Accepted new client %d.%d.%d.%d\r\n",ip4_addr1(&(pxPCB->remote_ip)), ip4_addr2(&(pxPCB->remote_ip)),ip4_addr3(&(pxPCB->remote_ip)), ip4_addr4(&(pxPCB->remote_ip)));
#endiferror = ERR_OK;}/* 已经有客户端连接,不允许第二个客户端连接 */else{prvvMBPortReleaseClient(pxPCB);error = ERR_OK;}return error;
}

FreeModbus TCP传输初始化相关推荐

  1. FreeModbus TCP传输

    首先,在使能modbus协议栈的时候,会调用pvMBFrameStartCur函数 /* 使能modbus */ eMBErrorCode eMBEnable(void) {eMBErrorCode ...

  2. Qt下Tcp传输文件

    Qt下Tcp传输文件 文章目录 Qt下Tcp传输文件 1.服务端 2.客户端 1.服务端 //ServerWidgets.h #ifndef SERVERWIDGET_H #define SERVER ...

  3. TCP传输连接建立与释放详解

    一直以来有许多读者朋友对TCP的传输连接建立和释放过程不是很理解,而这又是几乎网络认证中必考的知识点,包括软考.CCNA\CCNP.H3CNA\H3CNE等,为此再把笔者年度巨作,广受好评的--< ...

  4. 基于STM32F407+W5500的freemodbus tcp移植与实现

    环境:STM32CUBEMX6.6.1  MDK532 freemodbus1.6 首先是创建能驱动W5500的工程 主要用到硬件为SPI UART SPI速度建议不要太快,SPI1可以设置到40M, ...

  5. 利用TCP传输协议实现基于Socket的聊天程序(高级版_多线程)

    大家好,在上篇<利用TCP和UDP协议,实现基于Socket的小聊天程序(初级版)>博客中,所写程序只是实现简单的连接通信,基于控制台实现,运用了TCP和UDP两种传输协议.今天我和大家分 ...

  6. 【Java 网络编程】TCP 传输机制 ( 数据拆分 | 排序 | 顺序发送 | 顺序组装 | 超时重发 )

    文章目录 I TCP 传输过程 II TCP 传输示例 III TCP 传输特殊情况处理 I TCP 传输过程 1. TCP 传输过程 : 排序 , 顺序发送 , 顺序组装 ; ① 排序 : TCP ...

  7. TCP传输的单个报文最大字节(MSS和MTU)

    TCP和1448 1448字节是实际场景下,单个TCP包的实际运载能力.也就是说,实际场景下,上层调用send(1000KB),下层会把这1000KB封装成多个TCP包进行发送.单个TCP包每次打包1 ...

  8. s6-7 TCP 传输策略

    TCP 传输策略 防止黏包现象的出现 当窗口数为 0 时,发送者不能正常发送数据段,除非: -Urgent数据.比如,用户想杀掉远端机器上的进程的时候,可以发送数据 -发送者可以发送一个字节的数据段, ...

  9. java网络编程TCP传输—流操作—拿到源后的写入动作

    在网络编程中的TCP传输里,拿到Socket的源后,应该怎么进行读写操作呢,下面我列举了两种方法,希望大家帮忙补充···· 1.利用byte数组作为一个缓冲区进行读写 客户端上传 1 //获取sock ...

最新文章

  1. WPF ControlTemplate TemplateBinding
  2. 《那些年啊,那些事——一个程序员的奋斗史》——61
  3. 一篇文章看懂Git是什么以及如何简单的上手Git
  4. zookeeper中的ZAB协议理解
  5. mac m1搭建java opencv 环境(遇到的坑记录)
  6. 通过vb代码将多个excel合并成一个
  7. 阿里云大学双11特惠活动
  8. php 博饼 源代码,php实现中秋博饼小游戏
  9. Scrapy爬虫框架,入门案例(非常详细)
  10. rtx服务器限制文件传输,rtx 服务器 文件传输 配置
  11. 类神经网络训练不起来怎么办——机器学习模型训练指南
  12. IDEA与VsCode两种开发工具的比较
  13. Service starting has been prevented by iaware or trustsbase sInfo ServiceInfo 解决方法
  14. Java 第十一届 蓝桥杯 省模拟赛 小明的城堡
  15. 台达HMI触摸屏多语种切换
  16. 用java在控制台实现扫雷
  17. OpenLDAP+SSL+SSSD 实现Linux登录集中认证
  18. 【JavaSE】继承
  19. 西蒙说游戏 计算机,编程课不用电脑?因为芬兰教师将编程当做一种思想来教...
  20. RSA--维纳攻击--代码和题目分析

热门文章

  1. Qt学习笔记-http服务的初步认识(使用程序下载网站上的图片)
  2. C++工作笔记-多继承下的一个大坑
  3. 用php web编程作业,用PHP进行Web编程.ppt
  4. centos8 忘记root密码
  5. 前端基础-html-链接标签的介绍
  6. 前端基础-html-换行标签
  7. 操作系统之内存管理:6、页面分配策略、抖动、工作集
  8. 判断给定数字n是否为素数(质数)
  9. 钓鱼基础设施的应用分析(钓鱼邮件利用、Gophish)
  10. vmware的vmdk格式虚拟机转换为kvm的qcow2格式