真实世界的Python仪器监控:数据采集与控制系统自动化(

真实世界的Python仪器监控:数据采集与控制系统自动化(硬件DIY  不可多得的实战指南)

(美)休斯(Hughes,J.M.)著

OBP Group

ISBN 978-7-121-18659-2

20131月出版

定价:89.00

500

16

编辑推荐

理解如何定义应用的范围、确定必要的算法,以及二者的重要性

学习如何使用工业标准接口,如RS-232RS-485GPIB

C语言创建底层扩展模块,以利用Python接入各种硬件和测试仪器

探索终端、cursesTkinter,以及wxPython的图形和基于文本的用户界面

使用开源软件工具和库来降低成本,避免从头开始实现功能

内容提要

本书主要探讨如何运用Python 快速构建自动化仪器控制系统,帮助读者了解如何通过自行开发应用程序来监视或者控制仪器硬件。本书内容涵盖了从接线到建立接口,直到完成可用软件的整个过程。

本书适合需要进行仪表控制、机器人、数据采集、过程控制等相关工作的读者阅读参考。

目录

1 仪器学概论 ........................................................ 1

数据采集 ..................................................................................................................2

控制输出 ..................................................................................................................4

开环控制 ..........................................................................................................5

闭环控制 ..........................................................................................................6

顺序控制 ..........................................................................................................8

应用概观 ..................................................................................................................9

电子测试仪器 ...................................................................................................9

实验室仪器..................................................................................................... 11

过程控制 ........................................................................................................12

小结 .......................................................................................................................14

2 基本电子学 ...................................................... 15

电荷 .......................................................................................................................15

电流 .......................................................................................................................17

基础电路理论.........................................................................................................18

电路原理图 ............................................................................................................20

直流电路特性.........................................................................................................23

欧姆定律 ........................................................................................................24

电流吸入与电流输出 ......................................................................................26

再谈电阻 ........................................................................................................27

交流电路 ................................................................................................................28

正弦波 ............................................................................................................29

电容器 ............................................................................................................30

电感器 ............................................................................................................34

其他波形:方波、斜波、三角波和脉冲 ........................................................37

接口 .......................................................................................................................38

离散数字I/O ..................................................................................................38

模拟I/O ..........................................................................................................42

计数器与定时器 .............................................................................................46

脉宽调制 ........................................................................................................48

串行I/O ..........................................................................................................49

并行I/O ..........................................................................................................51

小结 .......................................................................................................................53

推荐阅读 ................................................................................................................54

3 Python 编程语言 .............................................. 55

安装Python ............................................................................................................56

Python 编程 ............................................................................................................57

Python 的命令行 ............................................................................................57

命令行参数和环境 .........................................................................................58

Python 中的对象 ............................................................................................59

Python 中的数据类型 .....................................................................................60

表达式 ............................................................................................................73

操作符 ............................................................................................................73

语句 ................................................................................................................79

字串 ................................................................................................................86

程序组织 ........................................................................................................91

模块导入 ...................................................................................................... 101

加载并运行Python 程序 .............................................................................. 104

基础输入输出 ............................................................................................... 106

提示和技巧................................................................................................... 110

Python 开发工具 .................................................................................................. 112

编辑器和IDE ............................................................................................... 112

调试器 .......................................................................................................... 115

小结 ..................................................................................................................... 115

推荐阅读 .............................................................................................................. 115

4 C 语言编程 .................................................... 117

安装C 语言编程环境 ........................................................................................... 117

使用C 语言开发软件 ........................................................................................... 118

一个简单的C 程序 ....................................................................................... 119

预处理指令................................................................................................... 122

标准数据类型 ............................................................................................... 126

用户定义类型 ............................................................................................... 127

操作符 .......................................................................................................... 127

表达式 .......................................................................................................... 136

语句 .............................................................................................................. 136

数组和指针................................................................................................... 143

结构 ............................................................................................................. 146

函式 .............................................................................................................. 150

标准库 .......................................................................................................... 151

编译C 程序 .................................................................................................. 152

C 语言综述 ................................................................................................... 156

C 开发工具 ........................................................................................................... 156

小结 ..................................................................................................................... 157

推荐阅读 .............................................................................................................. 157

5 Python 扩展 ................................................... 159

C 建立Python 扩展 ........................................................................................ 160

Python C 扩展API ........................................................................................... 161

扩展代码的模块组织 .................................................................................... 161

Python API 类型和函数 ................................................................................ 163

方法表 .......................................................................................................... 163

方法标记 ...................................................................................................... 164

传递数据 ...................................................................................................... 165

使用Python C 扩展API .................................................................................. 167

通用离散I/O API ......................................................................................... 167

通用包装器示例 ........................................................................................... 169

调用扩展 ...................................................................................................... 173

Python ctypes 外部函数库 ............................................................................... 177

ctypes 载入外部DLL ............................................................................... 177

ctypes 中的基本数据类型 ............................................................................. 178

使用ctypes ................................................................................................... 179

小结 ..................................................................................................................... 179

推荐阅读 .............................................................................................................. 180

6 硬件:工具与耗材 .......................................... 181

必备工具 .............................................................................................................. 181

手工工具 ...................................................................................................... 182

数字万用表................................................................................................... 184

焊接工具 ...................................................................................................... 187

最好能有的工具 ........................................................................................... 189

高级工具 .............................................................................................................. 190

示波器 .......................................................................................................... 190

逻辑分析仪................................................................................................... 192

测试设备注意事项 ....................................................................................... 194

耗材 ..................................................................................................................... 194

全新和二手 .......................................................................................................... 195

小结 ..................................................................................................................... 196

推荐阅读 .............................................................................................................. 196

7 物理接口 ........................................................ 197

连接器 .................................................................................................................. 197

DB 型连接器 ................................................................................................ 198

USB 连接器 .................................................................................................. 201

圆形连接器................................................................................................... 202

接线端子 ...................................................................................................... 203

接线 .............................................................................................................. 205

连接器失效................................................................................................... 207

串行接口 .............................................................................................................. 208

RS-232/EIA-232 ........................................................................................... 209

RS-485/EIA-485 ........................................................................................... 215

USB .............................................................................................................. 220

Windows 虚拟串口 ....................................................................................... 224

GPIB/IEEE-488 .................................................................................................... 226

GPIB/IEEE-488 信号 .................................................................................... 226

GPIB 连接 .................................................................................................... 228

GPIB 转接USB ............................................................................................ 229

PC 总线接口设备 ................................................................................................. 230

基于总线接口的优缺点 ................................................................................ 230

数据采集卡................................................................................................... 232

GPIB 接口卡 ................................................................................................ 232

旧并不代表差....................................................................................................... 233

小结 ..................................................................................................................... 234

推荐阅读 .............................................................................................................. 234

8 开始干吧 ........................................................ 235

项目定义 ........................................................................................................... 236

需求驱动的设计 ........................................................................................... 236

从需求开始................................................................................................... 237

工程目标 ...................................................................................................... 238

需求 ..................................................................................................................... 239

为什么需要需求 ........................................................................................... 240

良好的需求................................................................................................... 241

全景 .............................................................................................................. 242

需求类型 ...................................................................................................... 242

用例 .............................................................................................................. 244

可追溯性 ...................................................................................................... 246

需求捕获 ...................................................................................................... 248

设计软件 .............................................................................................................. 248

软件设计说明 ............................................................................................... 249

SDD 的图景.................................................................................................. 249

伪代码 .......................................................................................................... 253

分而治之 ...................................................................................................... 253

处理错误和故障 ........................................................................................... 255

功能测试 .............................................................................................................. 256

为需求而测................................................................................................... 257

测试用例 ...................................................................................................... 257

测试错误处理 ............................................................................................... 260

回归测试 ...................................................................................................... 261

进展追踪 ...................................................................................................... 261

实施 ..................................................................................................................... 262

代码风格 ...................................................................................................... 262

组织你的代码 ............................................................................................... 264

代码复查 ...................................................................................................... 265

单元测试 ...................................................................................................... 268

连接到硬件................................................................................................... 277

软件文档化................................................................................................... 278

版本控制 ...................................................................................................... 281

缺陷跟踪 ...................................................................................................... 281

用户文档 .............................................................................................................. 282

小结 ..................................................................................................................... 283

推荐阅读 .............................................................................................................. 283

9 控制系统概念 ................................................. 285

基础控制系统理论 ............................................................................................... 286

线性控制系统 ............................................................................................... 286

非线性控制系统 ........................................................................................... 288

顺序控制系统 ............................................................................................... 289

术语和符号................................................................................................... 290

控制系统框图 ............................................................................................... 292

传递函数 ...................................................................................................... 293

时间和频率................................................................................................... 293

控制系统类型....................................................................................................... 298

开环控制 ...................................................................................................... 299

闭环控制 ...................................................................................................... 299

非线性控制:继电器控制器 ........................................................................ 306

顺序控制系统 ............................................................................................... 308

比例、比例积分、比例积分微分控制.......................................................... 312

混合控制系统 ............................................................................................... 317

Python 实现控制系统 ...................................................................................... 318

线性比例控制器 ........................................................................................... 318

开关式控制器 ............................................................................................... 319

简单PID 控制器 ........................................................................................... 320

小结 ..................................................................................................................... 324

推荐阅读 .............................................................................................................. 324

10 构建并使用仿真器 ........................................ 327

什么是仿真 .......................................................................................................... 328

低保真和高保真 ........................................................................................... 329

模拟错误和故障 ........................................................................................... 330

使用Python 创建一个仿真器 ............................................................................... 333

程序包和模块的组织 .................................................................................... 334

数据输入/ 输出仿真器 ................................................................................. 334

交流电源控制器仿真 .................................................................................... 349

串行终端仿真器 ................................................................................................... 358

使用终端仿真器脚本 .................................................................................... 359

显示仿真数据....................................................................................................... 361

gnuplot ......................................................................................................... 361

使用gnuplot ................................................................................................. 363

使用gnuplot 将仿真器数据图表化 ............................................................... 366

创建你自己的仿真器 ........................................................................................... 369

确认仿真器的必要性 .................................................................................... 369

仿真的范围................................................................................................... 370

时间和精力................................................................................................... 371

小结 ..................................................................................................................... 371

推荐阅读 .............................................................................................................. 371

11 仪器数据I/O ................................................ 373

数据I/O :接口软件 ............................................................................................. 373

接口格式与协议 ........................................................................................... 374

Python 接口支持的工具包 ............................................................................ 383

Windows 平台上的替代品 ............................................................................ 389

Linux 下使用基于总线的硬件I/O 设备 ................................................... 389

数据I/O :数据采集与写入 .................................................................................. 391

基本数据I/O ................................................................................................ 391

阻塞和非阻塞调用 ....................................................................................... 398

数据I/O 方法 ............................................................................................... 399

数据I/O 错误处理 ........................................................................................ 402

处理不一致的数据 ....................................................................................... 407

小结 ..................................................................................................................... 411

推荐阅读 .............................................................................................................. 412

12 读写数据文件 ............................................... 413

ASCII 数据文件 ................................................................................................... 414

原始的ASCII 字符集 ................................................................................... 414

Python ASCII 字符操作方法 .................................................................... 416

读写ASCII 平面文件 ................................................................................... 418

配置数据 ...................................................................................................... 425

AutoConvert.py 模块——自动转换字符串 .................................................. 427

FileUtils.py 模块——ASCII 数据文件I/O 工具 ........................................... 430

二进制数据文件 ................................................................................................... 440

平面二进制数据文件 .................................................................................... 440

Python 处理二进制数据 ........................................................................... 442

图像数据 ...................................................................................................... 453

小结 ..................................................................................................................... 462

推荐阅读 .............................................................................................................. 462

13 用户界面 ...................................................... 465

文本界面 .............................................................................................................. 465

控制台 .......................................................................................................... 465

ANSI 显示控制台技术 ................................................................................. 478

Python curses ........................................................................................... 494

用不用curse 是个问题吗 ............................................................................. 502

图形用户界面....................................................................................................... 502

图形用户界面的历史和概念 ........................................................................ 503

Python 中使用GUI .................................................................................. 504

TkInter .......................................................................................................... 508

wxPython ...................................................................................................... 514

小结 ..................................................................................................................... 522

推荐阅读 .............................................................................................................. 523

14 实例 ............................................................ 525

串行接口 .............................................................................................................. 525

简易DMM 数据获取 .................................................................................... 526

串行接口的离散或模拟数据I/O 设备 .......................................................... 531

串行接口及对速度的考虑 ............................................................................ 535

USB 实例:LabJack U3 ....................................................................................... 536

LabJack 连接 ................................................................................................ 537

安装LabJack 设备 ........................................................................................ 538

LabJack Python ........................................................................................ 539

小结 ..................................................................................................................... 546

推荐阅读 .............................................................................................................. 547

附录A 自由和开源软件资源 ....................................... 549

附录B 仪器资源 ........................................................ 553

索引 ........................................................................... 557

精彩节摘

译者序

Zoom.Quiet 代序

本书是“侠少”(张春雨编辑)推荐给我翻译的。只是因为之前组织过几本Python 相关技术图书的翻译工程,就成为所谓资深人士,进而被编辑盯上了。可是拿到书一看,不是单纯讲Python 开发技巧,而是如同TBBT(《生活大爆炸》)片头曲背景MV 那般,内容包罗万象:从电子到仪表到线缆再到高端的软件工程都有所包含,内容的推进也是高速但清晰的,而且完全是根据学习的自然路径组织的,一步一步,从简入繁,自然而然,明明白白,很有Pythonic 的感觉!所以,俺就无耻地心动了。再说,华蠎用户组(CPyUG)订阅人数近一万,其中肯定有软硬兼修的高人,俺只要作好大妈的本职工作,就可以向中国Python 社区贡献第一本硬件相关的好书了!于是,革命的乐观主义精神主导了俺的情绪。终于,在2011 年春节前,俺接下了本书的翻译组织任务!

最终图书署名为OBP Group(开放图书工作组),原因有三:

本书的翻译出版过程沿用了OBPOpen Book Projecty 开放图书计划)的协同流程;

大家的主要协同场景是在Google Group(邮件列表)中;

工作组专门为本书成立,翻译完成后就地解散,转为通过Group 的形式存在,继续支持图书内容的讨论。

其中OBP 的工作流程细节请参考:

http://code.google.com/p/openbookproject/wiki/HowToBuildBookOnline

目前,OBP 是作为一种开放的分布式协作流程而存在的。

任何人都可以使用OBP 实践检验过的在线分布式团队的组织形式来完成任意作品。

其实就是将软件工程管理的思想及工具,组合应用在图书创译方面而已。

相比其他翻译团队,特殊在协同的工具链。

1. Bitbucket.org 上使用Mercurial 分布式仓库,或是在Github/Gitcafe 中使用分布

式仓库。

2. 基于Sphinx 来组织新结构化文本(rST)。

3. 通过readthedocs.org 随时编译为html 格式的图书式网站。

果然,通过邮件列表,快速报名上来十多位有意向的译者。根据以往经验,三个和尚没水吃,人多时,大家都以为有人在翻译,自个儿就不动手了。于是,以C 语言/Python语言/ 硬件进行领域划分,俺单独负责所有Python 及软件工程相关的内容,另外邀请四位译者分别承担其他两部分内容,再加上责任编辑,实际上形成了一个有专项目标的迷你社区。

那么什么是社区呢?

简单的说就是相对固定的成员在相对固定的场所对固定的目标进行固定的行动。所以,技术图书的翻译团队,如果是分布式的,其实就形成了一个确切的社区。只是,一般OBP 专项社区随着图书的出版会快速转入静默,不是图书内容没有值得持续讨论的地方,而是大家不愿意回忆那些熬夜翻译赶进度的苦吧。

本书的专门列表也已经建立:rwipy-zh@googlegroups.com,欢迎大家订阅和加入讨论。

虽然原书有600 多页,翻译为中文,也就500 页的样子,其中还包含大段的代码,平均到每个人也就100 多页,几万字而已。相比动辄几百万字的网络小说来,大家的工作量不算大。但是,技术文字的翻译,不是口水化的玄幻小说,至少要做到:

原文内容自个儿看得懂

翻译出来的中文自个儿看得明白

翻译出的文字任何人也看得明白

而且,近20 个月,大家并不是全职翻译,都是从学习/ 工作/ 生活中挤出时间来义务翻译的。常常要花很大的精力,重新熟悉翻译过的内容再跟上作者思路,找到合适的表述方法来。这是个反复的,不断自我折腾的过程……所以,进度的控制就完全失控了,好在此失控是K.K 所说的能自我调节的“失控”。有负责的催生婆——责任编辑一直在执行田间管理,译者们只要根据协同约定,调整好状态,按时完成章节的翻译,hg push 到封闭仓库中,所有相关成员就可以同步到变化继续了。

从意动到交付初版的这20 个月里,个人来说发生了很多事儿,很chaos。但是,能在社区还有编辑的支持下拿出成书来,真的是极大的安慰。只是,大家心里又随着不断的review 中发现的各种小问题,而酝酿出怀疑是否将书中丰富的软硬件知识翻译到位了的惶恐。然而,只要有好书,值得翻译的书,硬着头皮也还是愿意继续惶恐的!最后要强调的一点是,本书的OBP Group 所有成员,从来没有坐在一起交流过,直到最后签约阶段,才在北京同其中一半的成员面对面吃了次准庆功宴。感谢网络以及开源工具的力量,更要感谢所有成员给力的大爱,使我们能又见到一本好书的面市!

以下是所有工作组成员的简述,再次感谢所有成员,如果内容方面有什么问题,责任肯定在我们这群自不量力的行者身上,欢迎大家通过任意方式告诉我们,我们会坚持修订书中的内容的!

 

Atommann

开源电子硬件和自由软件爱好者。几年前得知外婆打电话不便,遂决定制作一部特殊的照片拨号电话机,经过不断自学和实践,最后做出facephone 解决了问题,从此成为一名硬件hacker

浏览过图书的目录后,就发现这是一本难得的好书,它的内容和我的工作息息相关,于是决定加入翻译团队。我比较熟悉的是书中的电子学部分,于是一开始就着手相关的翻译,然而在翻译的过程中发现自己原本以为懂得的东西实际上很多都不懂,有时为了弄清楚一个知识点,竟然会费几天的时间去学习。这样做是因为我自己就是一个技术书籍的读者,如果翻译得不准确对读者是不负责的,对这本O'Reilly 的图书更是不敢怠慢,我想要把自己翻译的部分翻译得尽量准确易懂。在边学边译的过程中,我重新学到很多知识,这是参与翻译过程的一个很大的收获。

由于是业余时间翻译,在时间上会很不够用。有时要等到老婆孩子睡觉之后才有时间坐在电脑前一边读一边译。有一段时间我感觉自己对翻译工作失去了信心,后来多亏“大妈”和张编辑的号召才又回到工作状态,完成了自己的翻译任务。书译完了,女儿也从几个月长到了两周岁。如果说要感谢,我要感谢我的女儿艾达和妻子小霞,很多本应要陪她们的周末和夜晚都被我用来翻译了。

 

Andy Shi

我是一个码农,最早是在网上认识“侠少”的,后来在组织珠三角技术沙龙时和他有过一次合作。这次是作为“救火队员”被拉到这个团队的。

本书是关于使用Python 开发现实世界中的仪器软件的,我对Python 本身不算擅长,只是入门级别,好在自己翻译的这章涉及语言本身的内容很少,这也是我敢应承下来的原因之一。翻译所谓“信达雅”,达到任何一个都不容易,反复读,仔细揣摩作者的意思,然后翻成中文,又要反复读,反复改,让语言更加通顺,更加贴合作者的原意。此中辛苦,确实不经历过就没法体会。我是最后阶段才加入,所以对于团队感觉并不是很深切,基本上也和“大妈”、“侠少”有过交流。这种方式应该说有其优点,但是如何找到合适的人,如何协调好,还是件不容易的事情。

 

Grissiom

SHLUG 的邮件列表上看到“大妈”吼,然后发现这本书很有意思,并且自己也了解一部分相关知识,于是申请加入了翻译团队。

这本书的内容还是不错的,所以翻译的过程也是一个学习的过程,学习就有快乐。而且有时为了一句话反复思考半天,最后忽然想到“啊,原来可以这样翻译!”的时候更是快乐……其实个人一直很向往Github 那种异步的工作方式,所以加入到OBP 后还是很兴奋的。但是现实是残酷的,大家都分布在全国各地,时间和精力上并不完全一致,而且又都是利用空余时间做翻译,翻译又不是自己的专长。虽然大家都是怀了一颗奉献的心来的,但是有时毕竟会出现心有余而力不足的状况。所以整个翻译的进度就受到了影响。在此仅代表个人向编辑道个歉,感谢编辑长久以来的宽容和支持。OBP 也可以总结这次合作的经验教训,为以后的项目积累经验。同时,在这本书的翻译,尤其是最后的审校过程中还是暴露出了现在传统出版行业和“互联网公司”型团队的衔接问题,包括版本控制流程、译文格式排版等。个人对出版行业了解不深,所以这个话题还是留给专业人士展开吧。

这次是我第一次参与翻译工作,出现各种疏漏在所难免,还请大家多多批评指正。

 

Kermit Mei

http://www.zeuux.com/home/kermit.mei

主要从事Linux 下的嵌入式软件开发工作,4 年工作经验。由于本人经验和时间所限,发布之际还是诚惶诚恐,担心工作中有不足和失误之处,万望大家发现问题多多批评,指正,谅解!

 

sa xiao

远程松散的协作方式好处是很灵活,每个成员可以根据自己的情况自由安排工作时间,加上主导者“侠少”、“大妈”制订的比较完善的流程,使得这样的工作方式可行。但大家都是在有本职工作或者学业的情况下自觉自愿地工作,且没有硬性的外在约束,这也加大了协调的难度,延长了工期。一方面,工作规则和制度需要更完善;另一方面,随着更多项目的完成,成员的磨合度提升,效率自然会提高。

关于书的内容,切入点很好,翻译起来有一定的难度,其他的让市场说话吧。孙伟

 

学习使用C 语言很多年以后,喜欢Python 也有一两年了,有幸参与到本书的翻译当中,感觉是一个非常好的学习和锻炼。C 语言靠近底层系统,简洁直接,长久不衰;Python语法清晰明快没什么花活:这两门语言都是我喜欢的。本书介绍用Python 进行工业控制方面的编程,是Python 书籍中比较少见的,感兴趣的朋友可以读读看。在我的博客http://sunxiunan.com 上也有一些自己对编程方面的文章,欢迎大家阅读讨论。

4 章和第5 章的翻译,断断续续花了我将近两个多月时间。虽然这两章不是很复杂,也没有什么生僻的内容,但是当自己把一句句英文翻译成中文的时候,我才发现这个事情不是想象中那么容易。有些句子要反复斟酌,有些术语英文好懂,翻译成中文后却有点怪怪的,需要多花时间找到恰当的表述方式,对我自己算是一个很好的锻炼。由于水平所限,想必还是有很多问题,欢迎大家指正。

 

xiaoma :

开源软件爱好者和程序员。小学时在少科站老师的指导下组装过收音机,中学时开始接触Apple II 电脑上的Logo 编程,后逐渐走上了软件开发这条不归路。

这已经不是我第一次参与技术图书的翻译,虽然少了些许初夜般的兴奋,但仍然保持着诚惶诚恐的态度,唯恐糟蹋了这一本好书。由于本人才疏学浅,因此难免挂一漏万,不足之处请大家多多指正。想到本书的出版,能为读者提供学习和工作上的帮助,所有的吐糟都化为了青烟。在此要感谢“大妈”的奔走张罗和译者、编辑们的辛苦工作,使得本书的中译本能顺利出版。

 

Zoom.Quiet :

Python 中文社区创始人/ 管理员之一,热心于Python 社区的公益事业,大家熟知的社区“大妈”,OBP 及蟒营工程设计者/ 主持人,参与/ 组织/ 主持各种线上/ 线下活动,主持编撰了《可爱的Python》,坚持用Pythonic 感化国人进入FLOSS 社区进行学习/ 分享/ 创造!

本书是从纯软件跨入软硬天师的最好引导, 强烈建议准备或是已经在玩开源软件的行者置备!

最后,公开一下OBP 本次项目的详细进展记录:

http://code.google.com/p/openbookproject/wiki/RwIwPyZhLog

媒体评论

OReilly Radar 博客有口皆碑。”

——Wired

OReilly 凭借一系列(真希望当初我也想到了)非凡想法建立了数百万美元的业

务。”

——Business 2.0

OReilly Conference 是聚集关键思想领袖的绝对典范。”

——CRN

“一本OReilly 的书就代表一个有用、有前途、需要学习的主题。”

——Irish Times

Tim 是位特立独行的商人,他不光放眼于最长远、最广阔的视野并且切实地按照Yogi Berra 的建议去做了:‘如果你在路上遇到岔路口,走小路(岔路)。’回顾过去Tim 似乎每一次都选择了小路,而且有几次都是一闪即逝的机会,尽管大路也不错。”

——Linux Journal

前言

本书介绍自动化仪器及其自动化控制。我们将探讨如何运用Python 语言快速轻巧地构建自动化仪器的控制系统。

从研究实验室到工业厂房,自动化仪器无所不在。一旦人们意识到收集随时间变迁的数据很有用,自然就需要某种手段来捕捉并完成数据记录。当然,人们可以取叠纸拿个时钟,盯着温度计、刻度盘或是其他仪表,定期记录数值,但是很快就会受不了这种乏味的工作。如果这一记录过程可以自动化,无疑将更加可靠和易行。幸运的是,技术的进步早已超越了手写日志及发条驱动的带状图记录的时代!

如今,人们可以购买各种便宜的物理仪器并使用计算机来获取数据。一旦计算机被连接到仪器,数据收集、分析和控制等等功能就可以自由扩展,唯一受限的只是实现者自身的创造力了。

本书的主要目的是向读者展示如何创建一个有能力同用户友好交互的仪器或控制应用程序软件,并使用最低成本运行起来。为此,我们仅基于最必需的步骤来创建程序,包括怎么使用不同类型的输入/ 输出硬件接入现实世界的底层接口。我们也将研究一些行之有效的方法,用以指导创建强大且可靠的程序。特别提醒,应该为数据处理所必需的算法支付设计费用。最终,我们将体验如何为用户设计命令的输入以及结果展示。如果读者能从本书中发现一些想法,并创造性地运用在各种仪器设备上,满足自己的需要,那么我的愿望也就达成了,善哉。

 

本书的目标读者

本书专为需要或是自制仪器控制器(也称为数据采集和控制系统)的人准备的。你可能是名研究员、软件开发者、学生、项目主管、工程师,或一个业余爱好者。想实现的应用系统,可能只是在实验过程中需要的自动化电子测试系统,或是其他类型的自动化设备。

本书要完成的目标软件将是跨平台的。我假定你至少在Windows 平台特别是XP 平台玩得很顺。而我会使用Ubuntu 发行版本的Linux 系统,不过书中讨论的程序将在各种兼容发行版中良好运行,同时我也假定你知道如何使用csh 或是bash 命令行脚本。

由于本书是关于如何通过物理硬件同现实世界交互的,其中自然涉及了一系列相关电气产品。但是,并不要求读者是名有足够背景知识的电气工程师。在第2 章,包含了基本电子理论知识的介绍,虽然事实上不必理解深层次的电子学知识也可以令计算机与现实世界交互,不过,知道多点相关领域知识绝对没坏处,万一首次遇到意外,我们可以从中获得思路。

不论读者的工作类型或场所怎样,最关键的,我假定你需要通过某些硬件接口捕获一些数据,或是产生控制信号。更加重要的是,需要轻便又精确且可靠地构建出这些仪器的控制软件来。

 

本书所用编程语言

我们将使用Python 作为主要的编程语言,仅仅嵌入一点点的C 程序。在本书中,我将假定你有一些编程经验,并对Python C(理想情况下,两者都)熟悉。如果不是这样,有Perl Tcl/Tk 或如Matlab IDL 分析工具的经验,也是一个合理的起点。

本书坚定地回避Python 语言更深奥的知识,配合大量的实例代码、图表注释和截屏来引导理解。对C 涉及得很少,只用来说明如何创建和使用Python 应用的底层系统扩展。第3 章覆盖了Python 语言的基础介绍,第4 章介绍了C 语言的基础知识,对以上语言进一步的探究可通过阅读建议自行学习。

 

为什么选用Python

Python Guido van Rossum 80 年代末开发的解释型语言。因其是种即时编译的脚本语言,故而用户可以在Python 命令行环境中直接创建并执行。语言本身很容易学习和理解,只要一开始别理会过多的高级功能(装饰器,自省,列表推导,等等)就行。因此,Python 提供了快速构建原型及易懂的双重好处,这反过来又有利于快速为不同的设备创建各种不同应用,没有开发者通常需要应对的学习曲线以及传统的编译语言依赖的特定供应商提供的编程环境。

Python 是高度可移植的,几乎运行在所有现代计算平台中。在项目中坚持只使用常用的接口方法,应用程序就很可能在安装Windows PC 中编写, 但是不用修改一行代码也可以在Linux 操作系统中运行良好。甚至于可以在Sun Solaris 机器和Apple OS X系统中运行,即使书中没有特意提及这一点。一旦Python 必须配合特定平台的特定扩展或驱动程序,便失去了可移植性,所以在这些情况下,我将提供分别适用于Windows Linux 的替代品。

本书包括了完整的可用示例代码,并配合框图和流程图来说明关键点,操作一些现成的、低成本的接口硬件。

 

系统

我们将探究的是那种既可以用在实验室, 也可以直接用于工业环境的仪器设备。比如说,应用于电子实验室、风洞中的设备, 或是进行气象数据收集的设备。而所说的系统,可能只是一个简单的温度记录仪,也可能是个复杂的真空控制系统。

一般来说,本书描述的技术可以作用于任何可以连接到PC 的硬件,当然总是有些设备是使用封闭标准的特殊硬件,但是我们不会处理这些,也不会深入到复杂的数据处理领域,比如说:炼油厂的自动工程方案,核电厂,或机器人飞船。系统在这些领域通常是配合同样精密和复杂的软件,并通过专用硬件来实现极其复杂的控制。我们只关注最通常的设备、驱动和接口,以及使用一些通用界面方法轻松构建出可用的系统。

 

方法论

我们通过现实世界的实例一步步地理解如何定义设备应用,选择合理的接口以及硬件,建立可能需要的底层驱动以便配合Python 接口与完成硬件控制。我们还将探索TkInterwxPython 的图形界面,以及curses 的图形化文字界面。

本书包含的主要内容如下。

如何封装一个硬件供应商的y DLL 驱动,以便Python 扩展使用。

如何与以USB 为基础的I/O 设备通信。

如何使用类似RS-232 RS-485 或是GPIB 工业标准接口。

追加上一个什么样的硬件类型才可能发现并使用接口。

本书还提供了参考,可以索引到现成的开源工具和库,以便即使从零开始,也可以用最短的时间完成一个可用的硬件控制系统。

 

本书的内容组织

本书分为14 章和2 节附录。第14 章将开头12 章的所有实践集中应用为一系列现实世界的例子。第1 6 章引入了基础概念,读者可以选择跳过。

每章重点内容主要如下。

1 仪器介绍

从整体上来说什么是仪器,如何控制系统的工作,以及这些概念如何在实际世界使用。涵盖的例子包含自动户外灯,电器仪表在工程中的测试,在实验室中控制化学过程和热度批处理。

2 基本电子学

作为手册书,必须对物理硬件接口以及如何完成一个自动化工程从整体上涉及的各个方面有描述。本章对电子以及电气产品进行了简介,然后探讨了内置功能模块以及数字控制接口、模拟接口、计数器和计时器。最后,介绍并评论了作为幕后技术的串行和并行接口。如果你已经熟悉电子电路原理和装置,可以跳过本章。不过,建议至少要关注一下,以便为今后可能的利用留个印象。

3 Python 编程语言

这本书不是Python 教程,本章提供了Python 的基本知识以及核心概念,以便读者快速上手将Python 最常用的功能在本书讨论情景中应用起来。本章还提供了一系列工具的概述,以便协助大家更加轻松地进行编程。

4 C 语言

本章从较宏观的层次介绍了C 语言知识。目标是提供足够的资料,以便理解书中实例代码,并不会引入C 语言神秘的细节。幸运的是,C 其实是相对简单的语言,而在这一章的信息应足以让你开始创建自己的驱动扩展以供给Python 脚本使用。

5 Python 扩展

本章介绍了Python 扩展是如何创建的,以及通常有哪些种类的扩展。提供的例子,无论是在本章,或是在后面的章节,都可以作为你自己应用的模板起点。

6 硬件:工具与耗材

虽然读者可能从来没有触摸过仪器设备以及电烙铁,但是很有可能用过螺丝刀、钢丝钳和数字万用表(DMM),这也足够开始了。在这一章我提供了一个清单, 来说明开发仪表系统需要什么样的基本工具, 以便可以按图索骥填充到书架上一个小盒子里, 为你将来可能真的动手创造自动系统时使用。在最后,充分讨论了两件可以帮助你免除猜测之苦快速定位问题的设备:示波器和逻辑分析仪。本章还就应该准备哪些类型的工具提供了一 些可行性建议,以便读者参考决定购置或是升级。

7 物理接口

列出了一系列用Python 进行数据采集或是控制时最常见的物理接口。RS-232 RS-485,就仪器控制而言,这就是最常见的两个串行接口。本章还涵盖了一些讨论场景中会遇见的USB GPIB/IEEE-488 接口的基础知识。最后,我们将关注PC 的可插入式I/O 硬件,即通常的PCI 型电路板,以及通常可从硬件供应商得到支持的API规范。

8 入门

本章描述了一个对软件开发行之有效的过程。将这一内容设置在这里是因为,不论用何种语言来开发自控系统,至关重要的是计划,明确核心功能,比照预期数据来观察测试结果,并持续改进这一过程。通过开发Python 扩展,我们将击穿模糊和不确定之门,通过设备控制软件进入真实世界。

9 控制系统概念

要对现实世界进行数据采集和控制,必须至少掌握部分控制和系统论。本章扩展了在第1 章中介绍的控制系统概念, 详细介绍了检查与共同控制系统概念和模型,包括了如反馈、“Bang-Bang”控制器和比例积微分(PID)控制等议题。还提供了一个基本控制系统案例分析,并给出了如何选择合适模型的一些指导方针。最后,介绍如何应用数学控制系统转化为实际的Python 代码。

10 建立和使用模拟器

建立和使用模拟器,可以帮助我们加快开发过程,通过提供一个可以安全试错的环境来检验思路,不仅针对控制软件,还可以针对可模拟的硬件提供一些宝贵的经验(非侵入式的)。无论是因为目标硬件暂时未能提供,或太昂贵无法承担损坏的风险,都可以通过模拟器简便地令软件可以运行,进行测试改进,获得足够的信心,令它正常在现实世界中工作。

11 设备I/O

在这一章中,我们将看看如何使用在第7 章中介绍的物理接口, 在真实世界和你的应用间搬运数据。我们将从接口协议格式开始讨论一些基本概念,然后引入一些软件实例以介绍几个常用协议解析包:pySerialpyParallel PyVISA。最后,会展示一些技术来说明如何读取和写入数据到设备。我们将对比阻塞与非阻塞的I/O 事件,以及如何应对潜在的数据I/O 错误,以便使应用程序更加健壮。

12 文件读/

本章谈及如何实施对设备文件的读/ 写以及审查,并对比了文件格式,从普通的ASCII CSV 文件到二进制文件数据库都进行了简述。我们还将研究Python 对配置文件的处理能力,看看它通过库方法有多么容易存储和检索配置参数。

13 用户界面

除非应用程序是嵌入硬件或是专门设计作为后台运行过程的,否则可能都会需要某种用户界面。本章考察命令行界面,或是用Python curses 模块生成的文字控制界面,以及如何使用ANSI 的终端仿真器程序显示数据,接受输入。本章还包含如何用Python 内置的TkInter 模块来生成图形界面,并另外阐述了wxPython GUI 包。

14 真实实例

我们将考察几种不同类型的设备如何进行数据采集和控制。本章首先是一个捕捉连续的数据输出的数字万用表实例。然后,考察一个采用普通的串行接口进行命令和数据交换的数据采集装置。最后,我们将详细分析硬件供应商提供的一个API 接口,通过DLL USB 设备进行数据I/O 操作,借鉴较早章节的例子对常见设备完成几乎所有的关键操作,以展示如何将理论付诸实践。

最后是两个附录, 包含了其他实用信息:

附录A 自由及开源软件资源

附录B 仪器设备资源

 

本书的格式

本书使用下列排版约定。

斜体Italic

用来表示新术语、URL、电子邮件地址、文件名和文件扩展名。

 

等宽字体Constant width

用来表示计算机代码片段,或者在文中引用Python 模块,以及变量名、函式名、数据类型、语句、关键字等程序元素。

 

等宽加粗字体Constant width bold

用来表示命令或者需要由用户输入的文本。

 

等宽斜体Constant width italic

用来表示应该由用户提供或特定语境确定的值替换的文本。

中文版书中切口处的“ ”表示原书页码,便于读者与原英文版图书对照阅读,本书的

索引所列页码为原英文版页码。

 

代码示例的使用

本书的宗旨就是帮助你完成工作。一般而言,除非要原样引用大量代码,否则你可以在自己的程序和文档中随意使用书中的代码,而无须与我们联系以取得授权。例如,在编写程序时引用本书若干代码片段是无须授权的。然而销售或分发OReilly 图书示例光盘则是需要授权的。引用本书内容以及代码来答疑解难是不需要授权的,但是将书中的代码大量引入到你的产品和文档中则需要授权。

如果你在引用书中内容时注明出处,我们将不胜感激,虽然这不是必需的。引用声明通常包含标题、作者、出版商和ISBN 编码。例如:“Real World Instrumentation withPython by J.M. Hughes. Copyright 2011 John M. Hughes, 978-0-596-80956-0.”

如果你对书中代码的使用不在上述范围之列,敬请通过permissions@oreilly.com 与我们联系。

 

Safari Books Online

Safari Books Online 是一个按需出版数字图书馆,在这里可以轻松搜索到超过7500 种技术及创意类参考书和视频,快速得到要找的答案。

通过订阅,可以从这一在线图书馆浏览任何网页,观看任何视频;可以在手机等移动设备上阅读书籍;可以在产品付印前获得新书信息,优先一睹创作中的手稿并给作者提交反馈;可以复制并粘贴代码示例,组织收藏夹,下载章节,对重点部分添加书签,创建笔记,打印页面,以及从许多其他的省时功能中受益。

OReilly Media 已经将本书英文版上传至Safari Books Online 服务。欲获得本书(英文版)电子版,以及OReilly 和其他出版商的类似主题电子书的完全访问权,请在http://my.safaribooksonline.com 免费注册。

 

联系我们

对于本书的评论或问题请联系出版商:

美国:

O’Reilly Media, Inc.

1005 Gravenstein Highway North

Sebastopol, CA 95472

中国:

北京市西城区西直门南大街2 号成铭大厦C 807 室(100035

奥莱利技术咨询(北京)有限公司

我们为本书制作了一个Web 页面,页面中包含了简介、样章,以及其他信息。可以从这里访问这个页面:

http://www.oreilly.com/catalog/9780596809560

http://www.oreilly.com.cn

如果要留言或者提交关于本书的技术问题的反馈,请发邮件至:

bookquestions@oreilly.com

本书的更多信息、资源、参考文献和新闻,请登录出版社官网:http://www.oreilly.com或者http://www.oreilly.com.cn/

Facebook http://facebook.com/oreilly

Twitter http://twitter.com/oreillymedia

YouTube http://www.youtube.com/oreillymedia

致谢

感谢那些在本书成书过程中给予我帮助的人们。我的妻子Carol 和女儿Seren,对于我常常一头扎在办公室,不能花时间陪伴她们,付出了很大的耐心和理解。我的朋友,同时也是同事,Michael North-Morris,总是那么乐观。本书责任编辑Julie Steele,是她给了我为OReilly 写书的机会。Rachel Head,一个勤奋的文字编辑,可以忍受我滥用英语。此外还有很多OReilly 工作人员向我提供了友好帮助。我还要感谢LabJack 公司提供真实硬件供我使用,并且不惜花费时间提供支持,确保我能正常工作。也要感谢Agilent 公司的Janet Smith 向我提供其产品的优质照片。

John Hughes

fj.png9787121186592.jpg

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/13164110/viewspace-754810/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/13164110/viewspace-754810/

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值