在完成了前面的工作后,我们就可以实现有针对性的应用了,首先我们来实现Modbus TCP的服务器端应用.当然我们不是做具体的应用,而是对Modbus TCP的服务器端应用进行封装以供有需要时调用. 这里我们不涉及TCP的协议,这部分与Modbus没有必然联系,我们只是在其应用层运行Modbus协议而已. 对于Modbus TCP的服务器我们需要实现几个功能:首先是对接收到客户端命令进行解析,我们只实现前面提到的8中常用的功能吗的支持.其次在解析完成后,我们要实现对应各种功能码的操作.具体架构如下…
这一节我们来封装Modbus ASCII Master应用,Modbus ASCII主站的开发与RTU主站的开发是一致的.同样的我们也不是做具体的应用,而是实现ASCII主站的基本功能.我们将ASCII主站的功能封装为函数,以便在开发具体应用时调用. 对于ASCII主站我们主要实现的功能有两个:其一是生成访问RTU从站的命令,总共支持8中功能码.其二是对ASCII从站端返回的信息进行解析并根据结果进行各种操作,同样也是支持8中功能吗的操作.具体软件访问结构如下: 1.访问命令的生成 客户端作为主…
教程目录 1.1 CoolBlog开发笔记第1课:项目分析 前言 今天是CoolBlog开发笔记的第2课,我们将要讲解的是开发环境的搭建.俗话说"工欲善其事必先利其器",Django开发中我们选择一些比较好用的开发工具大有裨益. 开发选择的操作系统为win7 x64旗舰版(比较普遍,我也想用Mac),Python版本使用的是3.5.2,Django采用的版本是1.9.8.建议大家Python和Django的版本尽量和我保持一致,这样有了问题也好排查.如果你使用的Python2.7.x,…
简介 这章的内容详细分析一下涉及智能合约Dapp的整个开发流程,注意是涉及只能合约,如果你只要一些基本转BTM功能没有太大意义,本内容补充一下官方提供的 比原链DAPP开发流程,详细实践过好踩到的一些坑,还有一些真正具体的技巧还有经验,个人认为非常有用,起码让开发者可以更快速地去操作. 资料说的储蓄分红合约太复杂了,简单说说逻辑,银行发了一笔股份资产,用合约锁定,用户去触发这个合约的方法,付出了钱兑换了对应份额的股份资产,当达到一定的高度,就可以通过用股份资产兑换回本金与分红(钱+利息). 里面…
与Modbus RTU在串行链路上分为Slave和Master一样,Modbus ASCII也分为Slave和Master,这一节我们就来开发Slave.对于Modbus ASCII从站来说,需要实现的功能其实与Modbus RTU的Slave是一样的.其操作过程也是一样的.首先接收到主站的访问命令,对该命令报文进行解析,这里我们也只是实现前面提到的8种功能码.其次我们根据解析的结果进行对应的操作,具体的软件访问结构如下: 从上图中不难发现实际是3步: 第1步.接到命令后先解析.解析的方式与前面…
RMI Server(服务端)主要包括以下功能:远程用户权限验证管理.远程服务接口实现类.Neo4j实体映射转换等.项目目录结构如下图所示: 3.2.1 远程用户权限验证管理 3.2.1.1 用户权限验证机制 用户权限验证机制分为三个层级. 第一级,远程主机IP地址验证.检查是否允许远程主机IP地址访问RMI服务. 第二级,远程用户信息验证.检查用户名称和密码是否正确,用户是否启用等. 第三级,远程服务及接口方法验证.检查用户是否有权访问某个RMI服务以及服务下的指定接口方法. 3.2.1.2…
        0.前言:        首先说一下我的开发环境,Visual Studio是2013的,系统是win8的64位版本号,SDK是Kinect for windows SDK 1.8版本号.尽管前一篇博文费了半天劲,翻译了2.0SDK的新特性.但我还是决定要回退一个版本号.        事实上我之前一直在用2.0的SDK在调试Kinect,但无奈实验室提供的Kinect是for Windows 1.0版本号的,并且Kinect从1.8之后就好像是一个分水岭,就比方win8和win…
三十年软件开发之路 https://mp.weixin.qq.com/s/EgN-9bIHonRid1DM0csQDw https://blog.juliobiason.net/thoughts/things-i-learnt-the-hard-way/ [CSDN编者按]“千帆过尽仍少年”,对于程序员来说,保留技术初心.不断提升实力是夯实自己的不二法则.而本文的作者,作为一名有着三十多年开发经验的“老”程序员,就在本文中详细总结了自己这些年踩过的坑和实践得出的真理,谈到了包括软件开发.团队工作…
MQTT SERVER 性能测试报告 : http://w3yyb.sinaapp.com/archives/1601各个MQTT SERVER功能列表: http://blog.lenix.xyz/archives/1568帮你深入理解OAuth2.0协议 : blog.csdn.net/seccloud/article/details/8192707牛人逍遥子对mosquitto源码分析: http://blog.csdn.net/houjixin/article/details/21461…
前一节我们实现了基于RAW API的UDP服务器,在接下来,我们进一步利用RAW API实现UDP客户端. 1.UDP协议简述 UDP协议全称是用户数据报协议,在网络中它与TCP协议一样用于处理数据包,是一种无连接的协议.在OSI模型中,处于传输层,是IP协议的上层协议.UDP有不提供数据包分组.组装和不能对数据包进行排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的. UDP协议的主要作用是将网络数据流量压缩成数据包的形式.一个典型的数据包就是一个二进制数据的传输单位.每一个…
本次我们在NUCLEO-F412ZG试验模拟量输入采集.我们的模拟量输入采用ADI公司的AD7705,是一片16位两路差分输入的AD采集芯片.具有SPI接口,我们将采用SPI接口与AD7705通讯.两路输入一路接氧气传感器,一路接氢气传感器. 氧气传感器有两种,一种是顺磁氧气传感器,输出信号是4-20mA.所以须在输出端并一个250欧姆的电阻然后接到AD7705的采集小板上.灰色的线和白色的线分别是正负极.其样式如下: 另一种氧气传感器是电化学方式的,由于电化学传感器输出为毫伏信号(0-60mV…
积分作用的引入是为了消除系统的静差,提高控制精度.但是如果一个系统总是存在统一个方向的偏差,就可能无限累加而进而饱和,极大影响系统性能.抗积分饱和就是用以解决这一问题的方法之一.这一节我们就来实现抗积分饱和的PID算法. 1.抗积分饱和的基本思想 所谓积分饱和就是指系统存在一个方向的偏差,PID控制器的输出由于积分作用的不断累加而扩大,从而导致控制器输出不断增大超出正常范围进入饱和区.当系统出现反响的偏差时,需要首先从饱和区退出,而不能对反向的偏差进行快速的响应. 为了解决积分饱和的问题,人们引…
对于Modbus协议栈的整个开发内容,前面已经说得很清楚了,接下来我们说明一下与开发没有直接关系的内容. 首先,关于我为什么开发这个协议栈的问题.我们的初衷只是想能够在开发产品时不用每次都重写这一部分,而是可以不断的改进和使用达到复用的目的.当然在后来,我们觉得不只是我们自己可以使用,也可以将其公开,让任何愿意使用的人使用.源码网址是:https://github.com/foxclever/Modbus 其次,Modbus协议有国标,包括三个文件.我们这个协议栈就是按照国标开发的标准协议,但不…
授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&32 物联网开发 群号622368884,不喜勿喷 一.你如果想学基于Arduino的ESP8266开发技术 一.基础篇 ESP8266开发之旅 基础篇① 走进ESP8266的世界 ESP8266开发之旅 基础篇② 如何安装ESP8266的Arduino开发环境 ESP8266开发之旅 基础篇③ ESP826…
firefox 扩展开发笔记(三):高级ui交互编程 前言 前两篇链接 1:firefox 扩展开发笔记(一):jpm 使用实践以及调试 2:firefox 扩展开发笔记(二):进阶开发之移动设备模拟 最新版本的Firefox 终于舍弃了鸡肋的xul布局,可以使用原生的html用作ui交互,插件界面中可以引入 bootstrap jQuery等库,大大简便了布局和高度自定义化,本文以一个随机自定义referer 实例来记录jpm 高级ui交互编程. 界面布局 ui 控件 官方api中提供的ui控…
教程目录 1.1 CoolBlog开发笔记第1课:项目分析 1.2 CoolBlog开发笔记第2课:搭建开发环境 1.3 CoolBlog开发笔记第3课:创建Django应用 1.4 CoolBlog开发笔记第4课:数据库模型设计 前言 我新书<Python爬虫开发与项目实战>出版了. 这本书包括基础篇,中级篇和深入篇三个部分,不仅适合零基础的朋友入门,也适合有一定基础的爬虫爱好者进阶,如果你不会分布式爬虫,不会千万级数据的去重,不会怎么突破反爬虫,不会分析js的加密,这本书会给你惊喜.如果大…
教程目录 1.1 CoolBlog开发笔记第1课:项目分析 1.2 CoolBlog开发笔记第2课:搭建开发环境 前言 经过上一节我们已经创建了CoolBlog工程,但是关于CoolBlog的功能代码还没有写,Django只是帮助我们搭建好一个框架.在Django的思想中,希望我们将项目的功能分成一个个应用来进行开发,类似于开发插件,最后Django会安装好这些"插件"并运行.不过也没有必要划分的这么仔细,Django只是想让我们的项目更有层次性,我们完全可以将关联比较密切的几个功能统…
教程目录 1.1 CoolBlog开发笔记第1课:项目分析 1.2 CoolBlog开发笔记第2课:搭建开发环境 1.3 CoolBlog开发笔记第3课:创建Django应用 前言 我新书<Python爬虫开发与项目实战>出版了. 这本书包括基础篇,中级篇和深入篇三个部分,不仅适合零基础的朋友入门,也适合有一定基础的爬虫爱好者进阶,如果你不会分布式爬虫,不会千万级数据的去重,不会怎么突破反爬虫,不会分析js的加密,这本书会给你惊喜.如果大家对这本书感兴趣的话,可以看一下 试读样章.废话少说,开…
前面我们已经完成了Modbus协议栈的开发,但这不是我们的目的.我们开发它的目的当然是要使用它来解决我们的实际问题.接下来我们就使用刚开发的Modbus协议栈开发一个Modbus TCP Server应用. 开发Modbus TCP Server首先需要有TCP Server的支持以及网络的配置等,但这些与Modbus本身没有什么关系,我们再次不作讨论.我们规定网络和TCP Server已经配置妥当.接下来我们讨论Modbus TCP Server的实现过程. 根据前面对协议栈的封装,我们需要引…
上一节我们使用协议占开发了一个Modbus TCP Server应用.接下来我们使用协议栈在开发一个基于串行链路的Mosbus RTU Slave应用. 根据前面对协议栈的封装,我们需要引用Modbus TCP Server的相关封装.在接收到命令后调用解析函数进行解析,解析函数的原型: ParsingMasterAccessCommand(uint8_t *receivedMesasage,uint8_t *respondBytes,uint16_t rxLength); RTU Slave使…
前面开发了各种应用,但是却一直没有提到一个问题,你就是对具体的数据进行读写操作.对于Modbus来说标准的数据有4种:线圈数据(地址:0000x).输入状态量数据(地址:1000x).保持寄存器数据(地址:4000x)和输入寄存器数据(地址:3000x).我们通讯的目的就是为了对这些数据进行操作,可是我们前面的封装中并没有提到数据处理.事实上,也没办法考虑这一点,因为具体的应用数据千差万别,是没办法封装的.那我们怎么解决这一问题呢?接下来我们将解决这一类问题. 1.数据处理函数的封装 我们考虑到…
前面我们已经对Modbus的基本事务作了说明,也据此设计了我们将要实现的主从站的操作流程.这其中与Modbus直接相关的就是Modbus消息帧的生成.Modbus消息帧也是实现Modbus通讯协议的根本. 1.Modbus消息帧分析 MODBUS协议在不同的物理链路上的消息帧有一些差异,但我们分析一下就会发现,在这些不同的消息帧中具有一下相同的部分,这对我们实现统一的数据操作非常重要,具体描述如下: (1).简单协议数据单元 MODBUS协议定义了一个与基础通信层无关的简单协议数据单元(PDU)…
源: Modbus库开发笔记之一:实现功能的基本设计…
源: Modbus库开发笔记之十一:关于Modbus协议栈开发的说明…
0 前言     本文使用freemodbus协议栈,在EasyARM i.mx287上实现了modbus tcp从机. 在该从机中定义了线圈寄存器.当中线圈寄存器地址较低的4位和EasyARM的P2.4至P2.5关联,通过modbus指令可控制GPIO的输出.本文改动自freemodbus 演示样例LINUXTCP.经过简单的改动也可用于其它Linux开发板.     [相关博文]     [EasyARM i.mx28学习笔记--文件IO方式操作GPIO]     [EasyARM i.mx…
在开发Modbus程序的过程中,也可以发现经常需要使用诸如Modbus Poll和Modbus Slave等辅助调试工具, 用于验证MODBUS通讯消息是否正确.但是,Modbus Poll和Modbus Slave都属于共享软件, 价格都在百美元左右,在未购买的情况下有时间或功能限制,怎么办呢? 其实,我们完全可以开发自己的MODBUS辅助调试工具. 那么先定一个小目标,开发一个简化版的Modbus Poll,能够方便调试MODBUS通讯, 支持RTU模式和TCP模式,支持以下最常用MODBU…
原文:Red Gate系列之三 SQL Server 开发利器 SQL Prompt 5.3.4.1 Edition T-SQL智能感知分析器 完全破解+使用教程 Red Gate系列之三 SQL Server 开发利器 SQL Prompt 5.3.4.1 Edition T-SQL智能感知分析器 完全破解+使用教程 Red Gate系列文章: Red Gate系列之一 SQL Compare 10.2.0.1337 Edition 数据库比较工具 完全破解+使用教程 Red Gate系列之二…
前言   stm32系列是最常用的单片机之一,不同的版本对应除了引脚.外设.频率.容量等'不同之外,其开发的方法是一样的.  本章讲解使用库函数使用GPIO引脚功能.   补充   本文章为多年前学习方法总结,基本是一通百通(PS:学的是方法而不是技术本身).   stm32系列帮助文件GPIO手把手详细解说   编写GPIO功能,建议初学者学习帮助文件中的案例.    这是固件库V3.4中的GPIO源文件,而V3.5中的资源文件使用的不是固件库,V3.4这个文件明显是GPIO操作LED的,所以…
前言   Qt使用一些压缩解压功能,选择libzip库,libzip库比较原始,也是很多其他库的基础支撑库,编译过了windows版本,有需求编译一个ubuntu版本的,交叉编译需求的同样可参照本文章.   libzip   libzip是一个C库,用于读取,创建和修改zip档案.可以从数据缓冲区,文件或直接从其他zip归档文件直接复制的压缩数据中添加文件.在不关闭存档的情况下所做的更改可以还原.  当前版本是1.7.3,于2020年7月15日发布.  官网:https://libzip.org…
前言   方便做嵌入式arm的交叉移植zlib库.   Zlib库   zlib被设计为一个免费的,通用的,法律上不受限制的-即不受任何专利保护的无损数据压缩库,几乎可以在任何计算机硬件和操作系统上使用. 下载   官网:http://www.zlib.net  QQ群:1047134658(点击"文件"搜索"zlib",群内与博文同步更新)   交叉编译环境准备 步骤一:交叉编译链工具制作   (略) 步骤二:引入交叉编译链工具到环境变量   创建环境文件 tou…