freemodbus modbus TCP 学习笔记
| 区域 |
长度
|
描述
|
客户端
|
服务器
|
|
传输标志
|
2字节
|
MODBUS 请求和响应传输过程中
序列号
|
客户端生成 |
应答时复制该值
|
| 协议标志 |
2字节
|
Modbus协议默认为0
|
客户端生成
|
应答时复制该值
|
|
长度
|
2字节
|
剩余部分的长度 |
客户端生成
|
应答时由服务器端生成
|
|
单元标志
|
1字节
|
从机标志(从机地址) |
客户端生成
|
应答时复制该值
|
【注意】
- BOOL
- xMBTCPPortInit( USHORT usTCPPort )
- {
- BOOL bOkay = FALSE;
- USHORT usPort;
- if( usTCPPort == 0 )
- {
- usPort = MB_TCP_DEFAULT_PORT;
- }
- else
- {
- usPort = (USHORT)usTCPPort;
- }
- // 侦听端口 502端口
- uip_listen(HTONS(usPort));
- bOkay = TRUE;
- return bOkay;
- }
- void uip_modbus_appcall(void)
- {
- if(uip_connected())
- {
- PRINTF("connected!\r\n");
- }
- if(uip_closed())
- {
- PRINTF("closed\r\n");
- }
- if(uip_newdata())
- {
- PRINTF("request!\r\n");
- // 获得modbus请求
- memcpy(ucTCPRequestFrame, uip_appdata, uip_len );
- ucTCPRequestLen = uip_len;
- // 向 modbus poll发送消息
- xMBPortEventPost( EV_FRAME_RECEIVED );
- }
- if(uip_poll())
- {
- if(bFrameSent)
- {
- bFrameSent = FALSE;
- // uIP发送Modbus应答数据包
- uip_send( ucTCPResponseFrame , ucTCPResponseLen );
- }
- }
- }
static UCHAR ucTCPRequestFrame[MB_TCP_BUF_SIZE];static USHORT ucTCPRequestLen;static UCHAR ucTCPResponseFrame[MB_TCP_BUF_SIZE];static USHORT ucTCPResponseLen;
- BOOL
- xMBTCPPortGetRequest( UCHAR ** ppucMBTCPFrame, USHORT * usTCPLength )
- {
- *ppucMBTCPFrame = &ucTCPRequestFrame[0];
- *usTCPLength = ucTCPRequestLen;
- /* Reset the buffer. */
- ucTCPRequestLen = 0;
- return TRUE;
- }
- BOOL
- xMBTCPPortSendResponse( const UCHAR * pucMBTCPFrame, USHORT usTCPLength )
- {
- memcpy( ucTCPResponseFrame , pucMBTCPFrame , usTCPLength);
- ucTCPResponseLen = usTCPLength;
- bFrameSent = TRUE; // 通过uip_poll发送数据
- return bFrameSent;
- }
freemodbus modbus TCP 学习笔记的更多相关文章
- 毕向东tcp学习笔记1
项目功能: 实现一次发送和接收,服务器接收客户端发送的内容并打印出来 用最通俗的语言讲解下,上图中大椭圆是服务器,A.C是客户端,当客户端和服务器通过socket建立连接后 1.两者之间形成一个通道, ...
- [原创]Modbus协议学习笔记
一.参考资料 1.老罗传奇的2篇博文,写的不错,通俗易懂.链接地址为:http://www.cnblogs.com/luomingui/tag/Modbus/ 2.阿莫论坛精华资料:http://ww ...
- Modbus协议学习笔记
之前也有写过基于 Modbus 通讯协议的控制远程监控程序,但是由于当时时间赶.人手少(软硬件前后台都是在下一人
- TCP学习笔记
TCP/IP 协议分层模型 TCP/IP 协议族按层次分别分为以下 4 层:应用层.传输层.网络层和数据链路层.层次化之后,每个层级只需要考虑自己的任务就可以了,不再需要弄清其他层级的功能了. TCP ...
- EasyARM i.mx287学习笔记——通过modbus tcp控制GPIO
0 前言 本文使用freemodbus协议栈,在EasyARM i.mx287上实现了modbus tcp从机. 在该从机中定义了线圈寄存器.当中线圈寄存器地址较低的4位和EasyARM的P2 ...
- uIP学习笔记
uIP学习笔记 从零开始使用uIP freemodbus modbus TCP 学习笔记
- C#ModBus Tcp的学习及Master的实现
Modbus已经成为工业领域通信协议的业界标准(De facto),并且现在是工业电子设备之间常用的连接方式. 所以这也是我们工控领域软件开发的所必懂的通讯协议,我也是初次学习,先贴上我的学习笔记 一 ...
- TCP/IP详解学习笔记
TCP/IP详解学习笔记(1)-基本概念 TCP/IP详解学习笔记(2)-数据链路层 TCP/IP详解学习笔记(3)-IP协议,ARP协议,RARP协议 TCP/IP详解学习笔记(4)-ICMP协议, ...
- TCP/IP协议学习笔记
计算机网络基础知识复习汇总:计算机网络基础知识复习 HTTP协议的解析:剖析 HTTP 协议 一个系列的解析文章: TCP/IP详解学习笔记(1)-- 概述 TCP/IP详解学习笔记(2)-- 数据链 ...
随机推荐
- QT中给程序加上主界面的图标
首先在源码目录下面新建一个 myapp.rc的文件,在里面填写如下: IDI_ICON1 ICON DISCARDABLE "myappico.ico" (名字看自己的图片,注意图 ...
- 网络之Call Phone、Web、SMS、Email
1. 准备工作:导入信息UI库 #import <MessageUI/MessageUI.h>2. Call Phone 方式一: 拼接字符串 注意开头是tel: 这种方式打电话回不到原来 ...
- New Concept English three (28)
27w/m 87 Small boats loaded with wares sped to the great liner as she was entering the harbour. Befo ...
- [置顶] php检测输入数据是否合法常用的类
<?php class Fun{ function isEmpty($val) { if (!is_string($val)) return false; //是否是字符串类型 if (empt ...
- 微信小程序调微信支付
今天写小程序的支付接口,参照的当然是微信支付API了.(结尾附上第二步全部代码php版) 另外,我也参照了简书上的这篇文章,浅显易懂:https://www.jianshu.com/p/72f5c1e ...
- MySQL 5.7.18 在centos下安装记录
一个朋友找我如何在linux下安装mysql5.7.18,我稍微整理下了下记录,如下: 下载地址: MySQL5.7.18参数官方网址:https://dev.mysql.com/doc/refman ...
- iOS开发之谈谈App应用的架构搭建(推荐给大家看)
1.iOS应用架构谈 开篇: 2.iOS应用架构谈 view层的组织和调用方案: 3.iOS应用架构谈 网络层设计方案: 4.iOS应用架构谈 本地持久化方案及动态部署: 5.iOS应用架构谈 组件化 ...
- HDU - 6129 :Just do it (杨辉三角)
There is a nonnegative integer sequence a 1...n a1...n of length n n . HazelFan wants to do a type ...
- Redis设计与实现 (一): 简单动态字符串
1.定义 Redis没有使用C语言的字符串, C语言的字符串只会用在不需要对字符串修改而只使用其值地方. Redis使用SDS表示字符串, 结构定义 : typedef char *sds; str ...
- 1080. MOOC期终成绩 (25)
对于在中国大学MOOC(http://www.icourse163.org/)学习“数据结构”课程的学生,想要获得一张合格证书,必须首先获得不少于200分的在线编程作业分,然后总评获得不少于60分(满 ...