MFC程序+modbus协议+modebus poll测试

2024-09-01 18:18

本文主要是介绍MFC程序+modbus协议+modebus poll测试,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

##1. modebus poll和modbus slave决定收发帧格式
参考博客
https://blog.csdn.net/tt094534/article/details/54928878?locationNum=11&fps=1
《Modbus软件开发实战》第63页—4.2.4借助工具软件观察和理解

####首先定义从机的发送帧
打开model slave
这里写图片描述
具体修改是直接在编辑框输入,右击格式设置为Hex(16进制),注意这里每一行代表2个字节
编辑框右击设置属性,点击 slave defi…(F8)
这里写图片描述
address 起始地址 Quantity 代表从起始位置连续的个数 这里为从0-5
View 显示方式
以上设置后之后点击上方Connencton进行发送
这里写图片描述
串口设置那一栏代表从com1发送到com2
至此发送机完毕,然后MFC程序中的代码可参照上述去写

然后主机测试

打开modbus poll 编辑框设置和slave保持一致 设置Alias 不用设置后面的值,那是接受过来的数据
这里写图片描述
设置读取起始位置和长度
这里写图片描述
连接
这里写图片描述
就可以看到发过来的数据
这里写图片描述
##2.MFC程序设计

查看所要发送的格式

在modbus poll中打开display->Comm…然后可以看到收过来的数据
这里写图片描述
Rx是收过来的数据
具体为
这里写图片描述
回传帧解析
这里写图片描述

设计发送帧

根据上文可以知道发送的数据为
Rx:2798-01 03 0C 00 00 00 0D 00 18 00 09 00 45 00 02 1F F4
其中01为地址为 03为功能码 0C为数据位长度 后面至02都为数据位(每两组代表一个指示)
代码实现时,全部把这些都带上就行
例如

	CByteArray  arraySend;//设备地址(2)+摄像头(2)+小时(2)+分钟(2)+秒(2)+宽度(2)+高度(2)+校验(2) = 16个字节int datalen = 12;BYTE bytSend[17];//发送字符串 bytSend[0] = addr;bytSend[1] = 0x03;//功能位bytSend[2] = datalen;//数据长度//数据bytSend[3] = ((camera & 0xff00) >> 8);//发送高八位  摄像头bytSend[4] = (camera & 0xff);//发送低八位bytSend[5] = ((hour & 0xff00) >> 8);//发送高八位bytSend[6] = (hour & 0xff);//发送低八位bytSend[7] = ((minute & 0xff00) >> 8);bytSend[8] = (minute & 0xff);bytSend[9] = ((sceond & 0xff00) >> 8);bytSend[10] = (sceond & 0xff);bytSend[11] = ((width & 0xff00) >> 8);bytSend[12] = (width & 0xff);bytSend[13] = ((hight & 0xff00) >> 8);bytSend[14] = (hight & 0xff);USHORT CRC = MBCRC16((UCHAR *)bytSend, 15);//CRC校验bytSend[15] = (CHAR)(CRC & 0xFF);bytSend[16] = (CHAR)((CRC & 0xFF00) >> 8);arraySend.RemoveAll();arraySend.SetSize(17);for (int i = 0; i < 17; i++){arraySend.SetAt(i, bytSend[i]);   //数据存在arraySend里面了   }m_ctrlComm.put_Output(COleVariant(arraySend));

发送时改为自动发送
就完成了要求,即符合modbus的串口通信

第一个询问码说明:
01 03 00 00 00 06 C5 C8
01为设备地址,一个子节
03为功能码,一个字节
00 00 为寄存器起始地址,两个字节
00 06 为寄存器长度,两个字节
C5 C8为校检位
相应的
返回帧
01 03 0C 00 00 00 0D 00 19 00 09 00 49 00 02 A6 F6
01为设备地址,一个字节
03为功能码,一个字节
0C为有效字节为,12, 一个字节,表示后12位为有效数据
00 00为摄像头参数 两个字节
00 0D为小时 两个字节
00 19为分钟 两个字节
00 09为秒 两个字节
00 49为宽度 两个字节
00 02为高度两个字节
A6 F6为校检位

这篇关于MFC程序+modbus协议+modebus poll测试的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1127694

相关文章

性能测试介绍

性能测试是一种测试方法,旨在评估系统、应用程序或组件在现实场景中的性能表现和可靠性。它通常用于衡量系统在不同负载条件下的响应时间、吞吐量、资源利用率、稳定性和可扩展性等关键指标。 为什么要进行性能测试 通过性能测试,可以确定系统是否能够满足预期的性能要求,找出性能瓶颈和潜在的问题,并进行优化和调整。 发现性能瓶颈:性能测试可以帮助发现系统的性能瓶颈,即系统在高负载或高并发情况下可能出现的问题

字节面试 | 如何测试RocketMQ、RocketMQ?

字节面试:RocketMQ是怎么测试的呢? 答: 首先保证消息的消费正确、设计逆向用例,在验证消息内容为空等情况时的消费正确性; 推送大批量MQ,通过Admin控制台查看MQ消费的情况,是否出现消费假死、TPS是否正常等等问题。(上述都是临场发挥,但是RocketMQ真正的测试点,还真的需要探讨) 01 先了解RocketMQ 作为测试也是要简单了解RocketMQ。简单来说,就是一个分

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟&nbsp;开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚&nbsp;第一站:海量资源,应有尽有 走进“智听

【测试】输入正确用户名和密码,点击登录没有响应的可能性原因

目录 一、前端问题 1. 界面交互问题 2. 输入数据校验问题 二、网络问题 1. 网络连接中断 2. 代理设置问题 三、后端问题 1. 服务器故障 2. 数据库问题 3. 权限问题: 四、其他问题 1. 缓存问题 2. 第三方服务问题 3. 配置问题 一、前端问题 1. 界面交互问题 登录按钮的点击事件未正确绑定,导致点击后无法触发登录操作。 页面可能存在

业务中14个需要进行A/B测试的时刻[信息图]

在本指南中,我们将全面了解有关 A/B测试 的所有内容。 我们将介绍不同类型的A/B测试,如何有效地规划和启动测试,如何评估测试是否成功,您应该关注哪些指标,多年来我们发现的常见错误等等。 什么是A/B测试? A/B测试(有时称为“分割测试”)是一种实验类型,其中您创建两种或多种内容变体——如登录页面、电子邮件或广告——并将它们显示给不同的受众群体,以查看哪一种效果最好。 本质上,A/B测

EMLOG程序单页友链和标签增加美化

单页友联效果图: 标签页面效果图: 源码介绍 EMLOG单页友情链接和TAG标签,友链单页文件代码main{width: 58%;是设置宽度 自己把设置成与您的网站宽度一样,如果自适应就填写100%,TAG文件不用修改 安装方法:把Links.php和tag.php上传到网站根目录即可,访问 域名/Links.php、域名/tag.php 所有模板适用,代码就不粘贴出来,已经打

跨系统环境下LabVIEW程序稳定运行

在LabVIEW开发中,不同电脑的配置和操作系统(如Win11与Win7)可能对程序的稳定运行产生影响。为了确保程序在不同平台上都能正常且稳定运行,需要从兼容性、驱动、以及性能优化等多个方面入手。本文将详细介绍如何在不同系统环境下,使LabVIEW开发的程序保持稳定运行的有效策略。 LabVIEW版本兼容性 LabVIEW各版本对不同操作系统的支持存在差异。因此,在开发程序时,尽量使用

【Linux】应用层http协议

一、HTTP协议 1.1 简要介绍一下HTTP        我们在网络的应用层中可以自己定义协议,但是,已经有大佬定义了一些现成的,非常好用的应用层协议,供我们直接使用,HTTP(超文本传输协议)就是其中之一。        在互联网世界中,HTTP(超文本传输协议)是一个至关重要的协议,他定义了客户端(如浏览器)与服务器之间如何进行通信,以交换或者传输超文本(比如HTML文档)。

CSP 2023 提高级第一轮 CSP-S 2023初试题 完善程序第二题解析 未完

一、题目阅读 (最大值之和)给定整数序列 a0,⋯,an−1,求该序列所有非空连续子序列的最大值之和。上述参数满足 1≤n≤105 和 1≤ai≤108。 一个序列的非空连续子序列可以用两个下标 ll 和 rr(其中0≤l≤r<n0≤l≤r<n)表示,对应的序列为 al,al+1,⋯,ar​。两个非空连续子序列不同,当且仅当下标不同。 例如,当原序列为 [1,2,1,2] 时,要计算子序列 [

这些心智程序你安装了吗?

原文题目:《为什么聪明人也会做蠢事(四)》 心智程序 大脑有两个特征导致人类不够理性,一个是处理信息方面的缺陷,一个是心智程序出了问题。前者可以称为“认知吝啬鬼”,前几篇文章已经讨论了。本期主要讲心智程序这个方面。 心智程序这一概念由哈佛大学认知科学家大卫•帕金斯提出,指个体可以从记忆中提取出的规则、知识、程序和策略,以辅助我们决策判断和解决问题。如果把人脑比喻成计算机,那心智程序就是人脑的