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

相关文章

如何测试计算机的内存是否存在问题? 判断电脑内存故障的多种方法

《如何测试计算机的内存是否存在问题?判断电脑内存故障的多种方法》内存是电脑中非常重要的组件之一,如果内存出现故障,可能会导致电脑出现各种问题,如蓝屏、死机、程序崩溃等,如何判断内存是否出现故障呢?下... 如果你的电脑是崩溃、冻结还是不稳定,那么它的内存可能有问题。要进行检查,你可以使用Windows 11

Java如何接收并解析HL7协议数据

《Java如何接收并解析HL7协议数据》文章主要介绍了HL7协议及其在医疗行业中的应用,详细描述了如何配置环境、接收和解析数据,以及与前端进行交互的实现方法,文章还分享了使用7Edit工具进行调试的经... 目录一、前言二、正文1、环境配置2、数据接收:HL7Monitor3、数据解析:HL7Busines

性能测试介绍

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

字节面试 | 如何测试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文档)。