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

网络公司做机场网站对网站做数据分析

网络公司做机场网站,对网站做数据分析,wordpress仿虎嗅网,wordpress scandir自从开源了我们自己开发的Modbus协议栈之后#xff0c;有很多朋友建议我针对性的做几个示例。所以我们就基于平时我们的应用整理了几个简单但可以说明基本的应用方法的示例#xff0c;这一篇中我们来简述如何使用协议栈实现一个Modbus TCP服务器应用。 1、何为TCP服务器 Mo…自从开源了我们自己开发的Modbus协议栈之后有很多朋友建议我针对性的做几个示例。所以我们就基于平时我们的应用整理了几个简单但可以说明基本的应用方法的示例这一篇中我们来简述如何使用协议栈实现一个Modbus TCP服务器应用。 1、何为TCP服务器 Modbus协议是一个主从协议那肯定就有主站和从站之分在Modbus TCP中亦称之为客户端与服务器。所谓TCP客户端其功能基本与RTU主站一样RTU主站会向从站发起数据请求同样的TCP客户端也会向服务器发起请求。也就是说在Modbus TCP模式下客户端亦是发起通讯的一方。 对于TCP客户端来说自己并不会产生数据它的数据均是从服务器获取为了得到数据就必须向服务器发起数据请求。在Modbus TCP协议中服务器一般也不会主动向外发送数据服务器需要根据客户端的数据请求来决定是否发送数据、发送哪些数据。这一过程如下图所示 从上图我们不难看出首先客户端要主动发起数据请求客户端发起的数据请求需要告诉服务器它请求的数据有哪些。服务器收到这个数据请求后服务器解析客户端的请求并按照客户端的请求返回数据。客户端收到数据响应后解析数据这样就完成了客户端与服务器之间的一次数据通讯。 需要注意的是Modbus TCP与Modbus RTU不同的是有一个专用的MBAP报文头来识别Modbus应用数据单元。这一报文头由7个字节组成 这种MBAP报文头虽然也是用来识别Modbus数据域但还是与串行链路上使用的MODBUS RTU应用数据单元有一些差别具体如下 1、用MBAP报文头中的单个字节单元标识符取代MODBUS串行链路上通常使用的MODBUS从地址域。这个单元标识符用于设备的通信这些设备使用单个 IP 地址支持多个独立MODBUS 终端单元例如网桥、路由器和网关。 2、使用接收者可以验证的方式来构造所有MODBUS请求和响应。对于MODBUS PDU有固定长度的功能码来说仅功能码就足够了。对于在请求或响应中携带一个可变数据的功能码来说数据域包括字节数。 3、使用TCP上传送MODBUS数据域时即使将报文分成多个信息包来传输可在MBAP报文头上携带附加长度信息这样接收者就能够识别报文的完整性。 2、如何实现TCP服务器 我们已经简单的描述了基于TCP/IP的Modbus数据通讯在此基础上我们将进一步描述基于协议栈的Modbus TCP服务器的实现。 在协议栈中我们已经实现了Modbus TCP服务器的基本功能如数据的管理及响应客户端的请求等。Modbus TCP服务器作为数据的生产者管理者四类数据线圈量、状态量、输入寄存器和保持寄存器。所以在Modbus TCP服务器中我们要为这四种数据定义相应的地址以便客户端能够对应的访问。所以设计一个Modbus TCP服务器我们先来设计它的数据地址。在我们的例子中出于操作方便我们规定了每类数据类型的数量为10我们以用的最多的保持寄存器为例定义寄存器地址为40001到40010。 在我们的协议栈中实现了0x01、0x02、0x03、0x04、0x05、0x06、0x0F以及0x10等功能码。也就是说客户端对象会生成面向这些功能码的Modbus TCP服务器数据请求。Modbus TCP服务器收到请求后解析请求并根据请求生成响应的数据响应。可以表示为下图所示 从上图我们明白协议栈中已经实现了对收到的主站数据请求进行解析以及根据解析生成对应的响应的函数。我们使用协议栈时主要需要做两个方面的事情解析数据请求和生成数据响应。 在协议栈中定义了一个解析函数该函数将收到的数据请求消息解析并根据解析的结果生成返回的数据响应。该函数的原型如下 /*解析接收到的信息返回响应命令的长度*/ uint16_t ParsingClientAccessCommand(uint8_t *receivedMessage,uint8_t *respondBytes) 这个函数有2个参数uint8_t *receivedMessage是收到的数据请求消息 uint8_t *respondBytes是返回的数据响应消息也是函数需要生成的而函数的返回值则是生成的数据响应详细的长度。 在解析的过程中该函数判断消息的完整性并根据不同的功能码调用不同的回调函数来实现包括设置本地数据和获取本地数据的相关回调函数在后续将讨论它们的实现。 3、TCP服务器编码 到这里其实我们已经很清楚使用协议栈实现Modbus TCP服务器只需要在TCP/IP收到客户端请求后调用sendLen ParsingClientAccessCommand(buffer, sendBuf);函数解析收到的请求命令。并根据请求执行相应的操作就可以了。那需要实现哪些操作呢在协议栈中定义了8个回调函数分别是获取线圈量、获取状态量、获取输入寄存器和获取保持寄存器以及预置单个线圈量、预置多个线圈量、预置单个保持寄存器和预置多个保持寄存器。函数原型定义如下 /*获取想要读取的Coil量的值*/ __weak void GetCoilStatus(uint16_t startAddress,uint16_t quantity,bool *statusList) {//如果需要Modbus TCP Server/RTU Slave应用中实现具体内容 }/*获取想要读取的InputStatus量的值*/ __weak void GetInputStatus(uint16_t startAddress,uint16_t quantity,bool *statusValue) {//如果需要Modbus TCP Server/RTU Slave应用中实现具体内容 }/*获取想要读取的保持寄存器的值*/ __weak void GetHoldingRegister(uint16_t startAddress,uint16_t quantity,uint16_t *registerValue) {//如果需要Modbus TCP Server/RTU Slave应用中实现具体内容 }/*获取想要读取的输入寄存器的值*/ __weak void GetInputRegister(uint16_t startAddress,uint16_t quantity,uint16_t *registerValue) {//如果需要Modbus TCP Server/RTU Slave应用中实现具体内容 }/*设置单个线圈的值*/ __weak void SetSingleCoil(uint16_t coilAddress,bool coilValue) {//如果需要Modbus TCP Server/RTU Slave应用中实现具体内容 }/*设置单个寄存器的值*/ __weak void SetSingleRegister(uint16_t registerAddress,uint16_t registerValue) {//如果需要Modbus TCP Server/RTU Slave应用中实现具体内容 }/*设置多个线圈的值*/ __weak void SetMultipleCoil(uint16_t startAddress,uint16_t quantity,bool *statusValue) {//如果需要Modbus TCP Server/RTU Slave应用中实现具体内容 }/*设置多个寄存器的值*/ __weak void SetMultipleRegister(uint16_t startAddress,uint16_t quantity,uint16_t *registerValue) {//如果需要Modbus TCP Server/RTU Slave应用中实现具体内容 } 这些函数就是我们要根据我们的Modbus TCP服务器功能设计实现的。对于我们这个测试例子我们只需要实现读取保持寄存器就可以了。具体实现如下 /*获取想要读取的保持寄存器的值*/ void GetHoldingRegister(uint16_t startAddress, uint16_t quantity, uint16_t* registerValue) {uint16_t start;uint16_t count;/*先判断地址是否处于合法范围*/start (startAddress 0) ? ((startAddress 9) ? startAddress : 9) : 0;count ((start quantity - 1) 9) ? quantity : (9 - start);for (int i 0; i count; i){registerValue[i] holdingRegister[start i];} } 这个例子中我们实现了读取40001到40010保持寄存器的值。 4、TCP服务器小结 我们在TCP服务器的基础上使用我们的协议栈实现一个Modbus TCP服务器应用。其实使用协议栈实现Modbus TCP服务器应用是很简单的我们需要使用如ModPoll这样的软件来测试一下它。 我们读取10个保持寄存器值分别为对应位固定的1到10如上图读出的结果与预期一致。我们还可以采用TCPUDP测试工具来看一下报文具体如下 同样的在同一台设备上只需实现一个Modbus TCP服务器哪怕是通过不同的网络端口来访问。这一点与客户端是不一样的原因是Modbus TCP服务器的数据是自己产生而且只需被动响应客户端的数据请求。 接下来我们来总结一下使用协议栈实现Modbus TCP服务器的工作流程或者说实现的步骤。首先Modbus TCP服务器要解析从客户端送来的数据请求。在协议栈中已经封装了数据请求的解析函数、所以我们实现Modbus TCP服务器时首先就是调用这一函数来解析接收到的数据请求消息。 然后将解析函数返回的数据响应消息发送到客户端就可以了。也就是说使用协议栈只需要调用一下这个函数Modbus TCP服务器功能就实现了。这是因为这个函数实现了整个Modbus TCP服务器的响应过程大致分三个步骤第一步解析收到的客户端数据请求消息第二步根据解析的结果预置数据或者获取数据预置和获取数据由8个回调函数实现第三步生成Modbus TCP服务器数据响应消息。说到这里我们已经清楚Modbus TCP服务器必须实现这些回调函数其它工作则全由协议栈完成。 源码下载https://download.csdn.net/download/foxclever/12838885 协议栈源码下载https://github.com/foxclever/Modbus 欢迎关注
http://wiki.neutronadmin.com/news/66857/

相关文章:

  • 跨国网站受欢迎的建网站哪家好
  • 郴州建设公司网站用html做的美食网站
  • alipay域名网站网页升级升级跳转
  • 公司网站应该是市场部做吗东莞清溪镇做网站公司
  • 作一个网站要多少钱有手机网站了还要微网站吗
  • 做网站的框架模版html做静态网站
  • win7 iis asp网站配置文件网站推广方案
  • 政务门户网站建设江苏中南建设集团网站是多少
  • 对亚马逊网站做简要分析与评价临沂网站开发
  • 海口 做网站网站开发要什么样的环境
  • 网站做淘宝客大连哪个公司做网站开发的
  • 大连网站建设哪个好济南正规的网站制作
  • 注册网站域名有什么用官网抖音下载
  • 如何给网站划分栏目可以做h5网站
  • 做平面的就一定要做网站吗现在做网络推广都有什么方式
  • 携程网站建设的意义wordpress+挂马+清除
  • 网站域名备案查询网页视频怎么下载到本地手机
  • 网站开发包括建设主题网站的顺序是什么
  • 连云港北京网站建设wordpress 缩略图代码
  • 如何做查询网站视频网站点击链接怎么做
  • 为什么做的网站别的浏览器打不开怎么办恶意网站怎么办
  • 手机移动端网站是什么云服务器做网站一般配置
  • wordpress 左上角w去掉seo岗位要求
  • 平面设计网站排行榜wordpress 禁用功能
  • 做汽车网站费用网页制作工具中文版
  • 做私人网站 违法开一个网站_只做同城交易
  • 小昆山网站建设如何通过网站做网上报名系统
  • 傻瓜式网站开发旅游网站设计的优点
  • 烟台网站制作效果网站排名监控工具
  • 网站建设模板是什么seo技术