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)-- 数据链 ...
随机推荐
- python:webbrowser
import webbrowser webbrowser.open_new_tab('www.baidu.com')
- hibernate 延迟加载和抓取策略
一.延迟加载 1.简单查询get,load 针对对象本身延迟或即时 当使用load方法来得到一个对象时,此时hibernate会使用延迟加载的机制来加载这个对象,即:当我们使用session.load ...
- Android Issue分析方法(用anr来说明)
Log的产生大家都知道 , 大家也都知道通过DDMS来看log , 但什么时候会产生log文件呢 ?一般在如下几种情况会产生log文件 . 1,程序异常退出 , uncaused exception ...
- C++中标准输入流cin与Ctrl+Z使用时的问题
今天使用C++编写了一段小程序,练习使用标准库的算法,代码如下: #include <iostream> #include <algorithm> #include <v ...
- 使用sessionStorage实现页面间传值与传对象
问题描述:业务从A页面跳转到B页面,需要由A页面向B页面传入一个对象.B页面解析对象中的值,然后根据这些值做具体的业务逻辑. 一般的传值方法如下: A页面跳转到B页面时: b.html?xxx=xxx ...
- Unity3d command line arguments
Options Many of these relate to Unity3d command line arguments Batch Mode - should be left enabled u ...
- phpcmsV9搜索分页数量
phpcmsV9搜索结果自定义控制分页条数,具体方法: 打开搜索模型文件夹phpcms/modules/search/index.php, 找到第85行: $result = $this->db ...
- 9.9 Python 文档字符串
9.9 Python 文档字符串. 进入 Python 标准库所在的目录. 检查每个 .py 文件看是否有__doc__ 字符串, 如果有, 对其格式进行适当的整理归类. 你的程序执行完毕后, 应该会 ...
- webpack新版本4.12应用九(配置文件之configuration)
配置 查看原文|编辑此页 webpack 是需要传入一个配置对象(configuration object).取决于你如何使用 webpack,可以通过两种方式之一:终端或 Node.js.下面指定了 ...
- WPF 自定义绕圈进度条(转)
在设计界面时,有时会遇到进度条,本次讲解如何设计自定义的绕圈进度条,直接上代码: 1.控件界面 <UserControl x:Class="ProgressBarControl&quo ...