当前位置: 首页 > news >正文

怎样注册一个自己的网站网易云企业网站建设模板

怎样注册一个自己的网站,网易云企业网站建设模板,潍坊网站建设哪家好,网页源代码搜索前面我们已经对Modbus的基本事务作了说明#xff0c;也据此设计了我们将要实现的主从站的操作流程。这其中与Modbus直接相关的就是Modbus消息帧的生成。Modbus消息帧也是实现Modbus通讯协议的根本。 1、Modbus消息帧分析 MODBUS协议在不同的物理链路上的消息帧有一些差异也据此设计了我们将要实现的主从站的操作流程。这其中与Modbus直接相关的就是Modbus消息帧的生成。Modbus消息帧也是实现Modbus通讯协议的根本。 1、Modbus消息帧分析 MODBUS协议在不同的物理链路上的消息帧有一些差异但我们分析一下就会发现在这些不同的消息帧中具有一下相同的部分这对我们实现统一的数据操作非常重要具体描述如下 1、简单协议数据单元 MODBUS协议定义了一个与基础通信层无关的简单协议数据单元PDU。简单协议数据单元的结构如下 PDU是一个与具体的传输网络无关的部分包含功能码和数据。对于特定总线或网络上的 MODBUS 协议只是在PDU的基础上在应用数据单元ADU上引入一些附加域。 数据单元部分的开发是最基本的部分主要是2各方面的类容一是生成客户端主站访问服务器从站的命令部分二是生成服务器从站响应客户端主站回复部分。 2、RTU的应用数据单元 对于在串行链路上运行的Modbus协议其应用数据单元ADU是在PDU的基础上在前面加上地址域后面加上数据校验。格式如下图所示 地址域就是所访问从站的地址为一个8位无符号数取值0-255但0和255有固定含义不能使用。CRC校验采用的是CRC16校验方式。 3、TCP的应用数据单元 在以太网链路上运行的Modbus协议其应用数据单元ADU是在PDU的基础上添加上MBAP报文头形成的具体格式如下图 对于MBAP 报文头包括下列域 域 长度 描述 客户机 服务器 事务元标识符 2 个字节 MODBUS 请求/响应事务处理的识别码 客户机启动 服务器从接收的请求中重新复制 协议标识符 2 个字节 0MODBUS 协议 客户机启动 服务器从接收的请求中重新复制 长度 2 个字节 以下字节的数量 客户机启动请求 服务器响应启动 单元标识符 1 个字节 串行链路或其它总线上连接的远程从站的识别码 客户机启动 服务器从接收的请求中重新复制 从上表中可知报文头为 7 个字节长 事务处理标识符用于事务处理配对。在响应中MODBUS 服务器复制请求的事务处理标识符。 协议标识符用于系统内的多路复用。通过值 0 识别 MODBUS 协议。 长度长度域是下一个域的字节数包括单元标识符和数据域。 单元标识符为了系统内路由使用这个域。专门用于通过以太网TCP-IP 网络和MODBUS串行链路之间的网关对MODBUS或MODBUS串行链路从站的通信。说的简单点就是串行链路中的地址域。MODBUS客户机在请求中设置这个域在响应中服务器必须利用相同的值返回这个域。 2、数据帧的具体组成分析 从以上对简单协议基本数据元、RTU应用数据单元和TCP应用数据单元报文格式的分析我们发现对于基本数据单元部分已一致的所以我们可以考虑来分层封装协议操作部分 最开始实现Modbus基本数据单元这是数据公用部分与具体的应用无关只需要封装一次对于这部分的开发只需要按照Modbus的标准协议来开发就好本次我们计划实现的功能有8个 功能码 名称 实现 描述 0x01 读线圈 是 对可读写型的状态量进行读取 0x02 读离散输入 是 对只读型的状态量进行读取 0x03 读保持寄存器 是 对可读写型的寄存器量进行读取 0x04 读输入寄存器 是 对只读型的寄存器量进行读取 0x05 写单个线圈 是 对单个的读写型的状态量进行写入 0x06 写单个寄存器 是 对单个的读写型的寄存器量进行写入 0x0F 写多个线圈 是 对多个的读写型的状态量进行写入 0x10 写多个寄存器 是 对多个的读写型的寄存器量进行写入 这8个也是Modbus协议所定义的最主要的功能现在对这几种功能码的报文格式描述如下 1读线圈0x01 读线圈就是都一种可以写的开关量因为Modbus协议起源于PLC应用而线圈是对PLC的DO输出的称呼一般适用于主站对从站下达操作命令。读这种具有读写功能的状态量的数据格式如下 其下发的命令格式为域名功能码起始地址数量。 2读离散输入0x02 读状态输入是读取一种只读开关量信号对应于PLC中的数字输入量。读取这种只读型开关输入量的格式如下 其下发的命令格式为域名功能码起始地址数量。 3读保持寄存器0x03 保持寄存器就是指可以读写的16位数据通过单个或多个保持寄存器可以用来表示各种数据如8位整数、16为整数、32位整数、64位整数以及单双精度浮点数等。读取保持寄存器的报文格式如下 其下发的命令格式为域名功能码起始地址数量。 4读输入寄存器0x04 输入寄存器是一种只读形式的16位数据。通过单个或多个输入寄存器可以表示8位整数、16为整数、32位整数、64位整数以及单双精度浮点数等。读取输入寄存器的报文格式如下 其下发的命令格式为域名功能码起始地址数量。 5写单个线圈0x05 写单个线圈量就是对单个的可读写的开关量进行操作但是其并非是直接写“0”或者“1”而是在需要写“1”时发送0xFF00而在需要写“0”时发送0x0000其具体的报文格式如下 其下发的命令格式为域名功能码输出地址输出值。命令的具体内容与读操作有区别但格式却是完全一样在编程时实际读和写可以封装在一起。 6写单个寄存器0x06 写单个寄存器就是对单个的保持寄存器进行操作数据的格式依然是一样的实际应用中只适用于对16位整型数据的操作对于浮点数等则不可以。 其下发的命令格式为域名功能码输出地址输出值。命令的具体内容与读操作有区别但格式却是完全一样在编程时实际读和写可以封装在一起。 7写多个线圈0x0F 写多个线圈的操作对象与写单个线圈是完全一样的不同的是数量和操作值特别是值写“1”就是“1”写“0”就是 “0”这是与写单个线圈的区别。 其下发的命令格式为域名功能码起始地址输出数量字节数输出值。命令报文与前面的几种读写操作有较大的区别必须要单独处理。 8写多个寄存器0x10 写多个寄存器的就是对多个可读写寄存器同时进行操作数据报文的格式与写多个线圈是一致的。 其下发的命令格式为域名功能码起始地址输出数量字节数输出值。 3、基本数据单元的编程 经过上面的分析我们发现不论是在什么样的物理链路上实现的应用数据器基本数据段都是相同的。其实加上域名段的格式也是相同的所以我们就将 域名PDU一起作为最基本的数据单元来实现。 对于基本数据单元的实现由分为2种情况一是作为主站客户端时对从站服务器的下发命令二是作为从站服务器时对主站客户端命令的响应。所以我们将这两种情况分别封装为2个基础函数 1、作为RTU主站TCP客户端时生成读写RTU从站TCP服务器对象的命令 uint16_t GenerateReadWriteCommand(ObjAccessInfo objInfo,bool *statusList,uint16_t *registerList,uint8_t *commandBytes) 参数分别是PDU单元的基本信息写对象的对应数据以及生成的命令字节。而返回值则是生成的命令的长度。 2、作为从站(服务器)时生成主站读访问的响应。对于响应因为写操作的响应实际上就是复制主站客户端的命令的一部分所以我们实际需要生成的响应是包括0x01、0x02、0x03、0x04功能码的情形。 uint16_t GenerateMasterAccessRespond(uint8_t *receivedMessage,bool *statusList,uint16_t *registerList,uint8_t *respondBytes) 参数分别是接收到的信息读取的对象的数据以及返回的响应消息。而返回值则是返回的响应消息的长度。 4、RTU应用数据单元的编程 对于RTU应用数据单元来说其报文格式就是“域名PDUCRC”而域名PDU我们在上一节中已经实现了所以要实现RTU的数据单元实际上我们只需要加上CRC校验就已经完成了。 对于RTU数据单元的实现由分为2种情况一是作为主站时对从站的下发命令二是作为从站时对主站命令的响应。所以我们将这两种情况分别封装为2个基础函数 1、作为RTU主站时生成读写RTU从站对象的命令 /*生成读写从站数据对象的命令,命令长度包括2个校验字节*/ uint16_t SyntheticReadWriteSlaveCommand(ObjAccessInfo slaveInfo,bool *statusList,uint16_t *registerList,uint8_t *commandBytes) 参数分别是从站基本信息下发的数据列表以及最终生成的命令数组。返回值是是命令的长度。 2、作为从站时生成主站读访问的响应 /*生成从站应答主站的响应*/ uint16_t SyntheticSlaveAccessRespond(uint8_t *receivedMessage,bool *statusList,uint16_t *registerList,uint8_t *respondBytes) 参数分别是接收到的信息返回的数据列表生成的响应信息列表。返回值是响应信息列表的长度。 5、TCP应用数据单元的编程 而对于TCP应用数据单元来说与RTU类式起报文格式是“MBAP头PDU”而PDU单元就是前面定义的所以只需要加上MBAP头部就可以了事实上MBAP头部的实现格式是固定的。 对于TCP应用数据单元的实现同样分为2中情况一是作为客户端时对服务器的下发命令二是作为服务器时对客户端命令的响应。所以我们将这两种情况分别封装为2个基础函数 1、作为TCP客户端时生成读写TCP服务器对象的命令 /*生成读写服务器对象的命令*/ uint16_t SyntheticReadWriteTCPServerCommand(ObjAccessInfo objInfo,bool *statusList,uint16_t *registerList,uint8_t *commandBytes) 2、作为(服务器时生成客户端读写访问的响应 /*合成对服务器访问的响应,返回值为命令长度*/ uint16_t SyntheticServerAccessRespond(uint8_t *receivedMessage,bool *statusList,uint16_t *registerList,uint8_t *respondBytes) 6、结束语 其实到这里我们对Modbus基本协议已经基本实现甚至使用这些基本操作也能实现Modbus的通讯。事实上很多人在应用写的Modbus通讯协议比这还要简单也能实现部分的Modbus通讯功能。当然这不是我们的目标否则就不需要专门开发库了我们要进一步封装让其更通用也更易用才是我们需要的。 源码网址是https://github.com/foxclever/Modbus 欢迎关注
http://www.zqtcl.cn/news/761541/

相关文章:

  • 网站路径wordpress制作电商网站
  • 江西网站开发哪家专业装饰设计公司网站
  • 企业网站策划实训Wordpress 主题简化
  • 做网站点击挣钱不兰州工程建设信息网站
  • 网站说服力 营销...免费看片网站
  • 深圳招聘网站大全制作网站软件下载
  • 网站建设说明哈尔滨网站建设渠道
  • 一 网站建设管理基本情况设计类的网站
  • wordpress产品编辑如何优化wordpress
  • 网站后台更新缓存失败网站平台规划方案
  • 网站开发需求分析主要内容saas建站系统是怎么实现的
  • 做qq头像的网站有哪些wordpress怎么部署到虚拟linux服务器
  • 征求网站建设企业网站建设word
  • 市民服务中心网站建设小型公众号开发
  • 服装网站建设策划书论文基层建设刊物网站
  • 网站建设合同技术开发合同范本wordpress备份和还原
  • 物流信息平台网站建设一流本科专业建设点网站
  • 天猫网站建设的目标是什么装潢设计软件
  • 电商网站首页图片网站功能模块建设
  • 邮件服务器是不是网站服务器黄江网站建设公司
  • 科技部网站方案网页设计网站设计欣赏
  • 自贡建设机械网站网站策划与运营课程认知
  • 公司做网站该注意哪些廊坊seo
  • 网站开发目录高尔夫 wordpress
  • 三只松鼠网站建设不做网站做百家号
  • 石家庄网站关键词推广淘宝网站建设设计模板
  • 马鞍山什么房产网站做的好网速
  • 国外做兼职网站软件园二期做网站的公司
  • 淘客网站备案教程网页设计与制作教程十四五规划
  • 哪些网站可以做外部锚文本网页设计个人简历怎么做