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)-- 数据链 ...
随机推荐
- 在一个Activity中启动另一个Activity
一.新建一个空的工程 二.添加一个Activity并命名为BAty 三.在activity_main.xml中添加一个按钮,设置id号为btnStartB <Button android:lay ...
- 有了Docker的程序猿们就能开启“上帝视角”?
现在,如果有程序猿说不知道Docker,这将是难以想象的. 百科是这样描述Docker的."Docker是dotCloud开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植 ...
- 初识django框架
django框架 1.框架介绍 根据第一部分内容介绍,我们可以总结出一个web框架应该包含如下三部分:a.sockect服务.b.根据不同的url调用不同函数(包含逻辑).c.返回内容(模板渲染).常 ...
- 【MFC】断言(ASSERT)的用法
摘自:Moondark http://www.cnblogs.com/moondark/archive/2012/03/12/2392315.html 断言(ASSERT)的用法 我一直以为as ...
- phpcms V9二级目录下分页路径不正确问题的彻底解决方法
在用phpcms V9做二次开发的时候,我们有时候会把一个栏目生成到根目录下,而且这个栏目又有子栏目,我们生成静态的时候分页会出现问题,就是分页的路径的地址错误.有一种解决方法就是,把这个栏目生成动态 ...
- C++中继承关系中的同名隐藏和对策
在C++及其面向对象的理论中,有这样的场景:一个类继承自另外一个类,如果这两个类都有一个函数名和参数及其返回值一样的成员函数,那么子类的函数会自动将父类对应的函数隐藏.即同名隐藏.在有时的开发过程中, ...
- NOIP模拟题 序列
题目大意 给定长为$n$的序列$A$,定义长为$k$的区间中位数为从小到大排完序后第$\lfloor\frac{k}{2}\rfloor$个数的大小. 每次询问给定$l_1,r_1,l_2,r_2$有 ...
- sapconnector.dll download
Sapnoc30Demo_Yan.rar Sap30Server.rar SAPNCO_Sample_Code.zip sapcon3.0_X64.rar DbEntry.Net.4.1.Setup. ...
- 【JVM】JVM参数说明和分析
不管是YGC还是Full GC,GC过程中都会对导致程序运行中中断,正确的选择不同的GC策略, 调整JVM.GC的参数,可以极大的减少由于GC工作,而导致的程序运行中断方面的问题,进而适当的提高Jav ...
- WPF 自定义BarChartControl(可左右滑动的柱状图)(转)
自定义可左右滑动.拖拽滑动的平面柱状图 在做这种样式控件之前,可先浏览我之前预研的控件: A.自定义左右滑动ScrollViewer(可拖动滑动) B.自定义Bar柱状图 OK,现在说下控件具体设计过 ...