这一节我们来封装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来说标准的数据有4种:线圈数据(地址:0000x).输入状态量数据(地址:1000x).保持寄存器数据(地址:4000x)和输入寄存器数据(地址:3000x).我们通讯的目的就是为了对这些数据进行操作,可是我们前面的封装中并没有提到数据处理.事实上,也没办法考虑这一点,因为具体的应用数据千差万别,是没办法封装的.那我们怎么解决这一问题呢?接下来我们将解决这一类问题. 1.数据处理函数的封装 我们考虑到…
与Modbus RTU在串行链路上分为Slave和Master一样,Modbus ASCII也分为Slave和Master,这一节我们就来开发Slave.对于Modbus ASCII从站来说,需要实现的功能其实与Modbus RTU的Slave是一样的.其操作过程也是一样的.首先接收到主站的访问命令,对该命令报文进行解析,这里我们也只是实现前面提到的8种功能码.其次我们根据解析的结果进行对应的操作,具体的软件访问结构如下: 从上图中不难发现实际是3步: 第1步.接到命令后先解析.解析的方式与前面…
前面我们实现了TCP服务器和客户端的简单应用,接下来我们实现一个基于TCP协议的应用协议,那就是HTTP超文本传输协议 1.  HTTP协议简介   超文本传输协议(Hyper Text Transfer Protocol),简称HTTP,是一种基于TCP的应用层协议,也是目前为止最为流行的应用层协议之一,可以说HTTP协议是万维网的基石. HTTP是一种客户端请求.服务器应答式的应用层传输协议,也就是说服务器端是不可能主动向客户端发送数据的.在网络正常的情况下请求和响应都是一一对应的.而这个请…
前面已经实现了各种的PID算法,然而在某些给定值频繁且大幅变化的场合,微分项常常会引起系统的振荡.为了适应这种给定值频繁变化的场合,人们设计了微分先行算法. 1.微分先行算法的思想 微分先行PID控制是只对输出量进行微分,而对给定指令不起微分作用,因此它适合于给定指令频繁升降的场合,可以避免指令的改变导致超调过大.微分先行的基本结构图: 根据上面的结构图,我们可以推出PID控制器的输出公式,比例和积分是不变的只是微分部分变为只对对象输出积分,记为y,我们对微分部分引入一阶惯性滤波:,可记微分部分…
在我们的应用项目中需要采集一些模拟量,这些量使用MCU自带的ADC就可以满足要求.在NUCLEO-F412ZG实验板上的STM32F412ZG有一个16通道的ADC,我们试验用它采集几个数据. 在NUCLEO-F412ZG实验板上,ADC1的第10通道(PC0)和第13通道(PC3)分别引到了CN9-3和CN9-5上.如下图红框所示: 我们利用这两个通道采集信号,一个定义为24VDC电源的检测,一个定义为5VDC电源的检测.同时采集MCU集成的内部温度传感器采集和内部参考电压采集.具体通道选择如…
对于Modbus协议栈的整个开发内容,前面已经说得很清楚了,接下来我们说明一下与开发没有直接关系的内容. 首先,关于我为什么开发这个协议栈的问题.我们的初衷只是想能够在开发产品时不用每次都重写这一部分,而是可以不断的改进和使用达到复用的目的.当然在后来,我们觉得不只是我们自己可以使用,也可以将其公开,让任何愿意使用的人使用.源码网址是:https://github.com/foxclever/Modbus 其次,Modbus协议有国标,包括三个文件.我们这个协议栈就是按照国标开发的标准协议,但不…
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课:搭建开发环境 前言 经过上一节我们已经创建了CoolBlog工程,但是关于CoolBlog的功能代码还没有写,Django只是帮助我们搭建好一个框架.在Django的思想中,希望我们将项目的功能分成一个个应用来进行开发,类似于开发插件,最后Django会安装好这些"插件"并运行.不过也没有必要划分的这么仔细,Django只是想让我们的项目更有层次性,我们完全可以将关联比较密切的几个功能统…
教程目录 1.1 CoolBlog开发笔记第1课:项目分析 1.2 CoolBlog开发笔记第2课:搭建开发环境 1.3 CoolBlog开发笔记第3课:创建Django应用 前言 我新书<Python爬虫开发与项目实战>出版了. 这本书包括基础篇,中级篇和深入篇三个部分,不仅适合零基础的朋友入门,也适合有一定基础的爬虫爱好者进阶,如果你不会分布式爬虫,不会千万级数据的去重,不会怎么突破反爬虫,不会分析js的加密,这本书会给你惊喜.如果大家对这本书感兴趣的话,可以看一下 试读样章.废话少说,开…
教程目录 1.1 CoolBlog开发笔记第1课:项目分析 1.2 CoolBlog开发笔记第2课:搭建开发环境 1.3 CoolBlog开发笔记第3课:创建Django应用 1.4 CoolBlog开发笔记第4课:数据库模型设计 前言 我新书<Python爬虫开发与项目实战>出版了. 这本书包括基础篇,中级篇和深入篇三个部分,不仅适合零基础的朋友入门,也适合有一定基础的爬虫爱好者进阶,如果你不会分布式爬虫,不会千万级数据的去重,不会怎么突破反爬虫,不会分析js的加密,这本书会给你惊喜.如果大…
源: Modbus库开发笔记之一:实现功能的基本设计…
源: Modbus库开发笔记之十一:关于Modbus协议栈开发的说明…
前面我们已经对Modbus的基本事务作了说明,也据此设计了我们将要实现的主从站的操作流程.这其中与Modbus直接相关的就是Modbus消息帧的生成.Modbus消息帧也是实现Modbus通讯协议的根本. 1.Modbus消息帧分析 MODBUS协议在不同的物理链路上的消息帧有一些差异,但我们分析一下就会发现,在这些不同的消息帧中具有一下相同的部分,这对我们实现统一的数据操作非常重要,具体描述如下: (1).简单协议数据单元 MODBUS协议定义了一个与基础通信层无关的简单协议数据单元(PDU)…
上一节我们使用协议占开发了一个Modbus TCP Server应用.接下来我们使用协议栈在开发一个基于串行链路的Mosbus RTU Slave应用. 根据前面对协议栈的封装,我们需要引用Modbus TCP Server的相关封装.在接收到命令后调用解析函数进行解析,解析函数的原型: ParsingMasterAccessCommand(uint8_t *receivedMesasage,uint8_t *respondBytes,uint16_t rxLength); RTU Slave使…
在完成了前面的工作后,我们就可以实现有针对性的应用了,首先我们来实现Modbus TCP的服务器端应用.当然我们不是做具体的应用,而是对Modbus TCP的服务器端应用进行封装以供有需要时调用. 这里我们不涉及TCP的协议,这部分与Modbus没有必然联系,我们只是在其应用层运行Modbus协议而已. 对于Modbus TCP的服务器我们需要实现几个功能:首先是对接收到客户端命令进行解析,我们只实现前面提到的8中常用的功能吗的支持.其次在解析完成后,我们要实现对应各种功能码的操作.具体架构如下…
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…
1.前言     使用modbus有些时间了,期间使用过modbus RTU也使用过modbus TCP,通过博文和大家分享一些MODBUS TCP的东西.在嵌入式中实现TCP就需要借助一个以太网协议栈,在这里我选择最简单的uIP协议栈.uIP协议栈简单易用方便上手,相比于LwIP无论是移植还是使用难度都低些,这样就可以把更多的精力花在modbus tcp协议本身而不必花大量的时间研究以太网协议栈.modbus协议栈为freemodbus   [其他有用的博文]     [1]uIP学习笔记  …
前言   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…
前言   Qt使用一些压缩解压功能,介绍过libzip库编译,本篇说明zlib库.需要用到zlib的msvc2015x64版本,编译一下.   版本编译引导 zlib在windows上的mingw32版本编译:<zlib开发笔记(一):zlib库介绍.编译和工程模板> zlib在ubuntu上的编译:<zlib开发笔记(二):zlib库介绍.ubuntu平台编译和工程模板> zlib在ubuntu上的arm交叉编译:<zlib开发笔记(三):zlib库介绍.在ubuntu上进…
Modbus-RTU 一.数据分析       两个设备(单片机)通讯,用的是Modbus协议.      在单片机中拿出一部分内存(RAM)进行两个设备通讯,例如: 说明: OX[20]   代表是输出线圈,用功能码 0x01,0x05,0x0F 访问, 开头地址是 0 (这个后续说明)       IX[20]    代表是输入线圈,用功能码 0x02 访问,开头地址是 1 (这个后续说明)另外两个一样的道理.       注意:所谓的“线圈”“寄存器”就是“位变量”“16位变量”.之所以称…
arm-fsl-linux-gnueabi开发笔记 //开发主机系统信息 $ lsb_release -a No LSB modules are available. Distributor ID:Ubuntu Description:Ubuntu 18.04.4 LTS Release:18.04 Codename:bionic $ cat /proc/version Linux version 4.15.0-43-generic (buildd@lgw01-amd64-001) (gcc v…
前言   在ubuntu上实现MPlayer播放器播放音乐.   Demo                Mplayer   MPlayer是一款开源多媒体播放器,以GNU通用公共许可证发布.此款软件可在各主流操作系统使用,例如Linux和其他类Unix系统.Windows及Mac OS X系统.  MPlayer基于命令行界面,在各操作系统也可选择安装不同的图形界面.mplayer的另一个大的特色是广泛的输出设备支持.它可以在X11.Xv.DGA.OpenGL.SVGAlib.fbdev.AA…
由于某些原因,在公司做的后台需要改成类似于Ext.js 形式的后台,主要看好其中的 框架布局,以及tab开页面和弹出式内部窗体. 后来看看,改成EasyUI,较Ext.js 库小很多,也便于公司的初级程序员能尽快上手,只需要jquery与js的部分开发知识即可. 目前,这块的后台已经开发进行一段时间了,现整理下,做个开发笔记. 笔记就分3部分,如果看懂的话,做一般的XX管理系统,都无问题了. 1. 页面整体框架搭建. 2. 某一个功能页面的增删改查. 3. 一些遇到的问题解决办法. 界面截图:…
[Openwrt项目开发笔记]系列文章传送门:http://www.cnblogs.com/double-win/p/3888399.html 正文: 最近开始着手进行Openwrt平台的物联网网关设计,思路有些乱,通过笔记的方式进行记录和整理. 声明: 在本文中,有些内容摘自网上,我进行了整合,因此出处不明,在此对原文作者致歉! -----------------------------------------------------(分割线)-------------------------…