看板FreeBSD
标 题[文件] AT2051(数位温度计) @ FreeBSD with PHP
发信站脆笛酥的家 (Sat Sep 5 03:24:34 2009)
转信站ptt!news.ntu!news.au!jal.bbs
今天下午拿到的新玩具~
* AT2051 , 数位温度计 over RS485
* UR485, RS-485 转换成 USB 介面同时模拟成 RS-232
前言
希望可以拿来侦测机房的温度, 进而做些告警之类的事情, 虽然有 VB 的程式,
但是 VB 不利於後续的使用, 因为需要能够把记录到的温度丢进资料库存起来
或是用 mrtg 进行长期之温度监控, 所以就开始研究怎麽用 PHP 去取得
Serial port 的资料.
重点还要能好好利用 RS-485 的特性, RS-485 其实很常用於监控或是控制,
在大型的监控里, 经常可以见到 RS-485 的踪迹, 因为它可以远距离的传输及控制.
且又可以多个侦测器使用同一条线路, 类似电话线这样, 搭上线即可.
但是每个侦测器或是控制器又可以设定 ID 来区隔, 一路 RS-485 上可以拥有多个 ID
每个侦测器不可以重复 ID, 不然会出错.
详细资料可翻一下 Wikipedia 有关 RS-485 的资料
http://zh.wikipedia.org/zh-tw/EIA-485
第一次接触到 RS-485 是在某展览馆, 其空调及风扇等开关几乎都用 RS-485 来控制,
且於每层楼使用 RS-485 转 Ethernet 来减少所有楼层到中控室的线路数量.又兼具远
距监控控制的需求, 很佩服一开始想出来的人啊!
实作的部份可分三个部份:
1. AT2051 及 UR485 的接线
2. UR485 on FreeBSD
3. PHP get AT2051 data over UR485
1. AT2051 及 UR485 的接线
这部份我不想着墨太多, 因为网路上有很多说明跟你说怎麽做, 且原厂网站
上的说明更是详细又清楚, 所以我直接略过这部份.
而我在这部份仅用了该公司的 VB on Windows XP 来检查我线有没有接错
而已. 旗威科技
http://www.chipware.com.tw
简单接线图如下:
RS-485
---------- single --------- USB 2.0
| AT2051 |-----------| UR485 |-------
---------- --------- |
\ |/dev/cuaU0
\ ------------ -----------
\----| DC 9~34V | | FreeBSD |
------------ -----------
2. UR485 on FreeBSD
我使用的 FreeBSD 是 7.2 Stable 版, UR485 一接上去之後就会侦测到
ucom0 (kernel 里头的 ucom 等 USB 的 device 要留着)网路上一些比较旧
的文章都会写它的 device 路径为 /dev/ucom0, but 我在 7.2 一直都失败,
最後用土法炼钢的方式, 直接 ls /dev/ 看拔掉跟接上去的差别, 进而找到
该装置的位置是 /dev/cuaU0 一个很怪的名称, 我也不知道为什麽~
3. PHP get AT2051 data over UR485
接下来就是最重点的部份了, 这部份我研究了大约一个多钟头, 从
PHP Manual 去翻有关 RS-232 的资讯, 结果我找到了
DIO(Direct I/O) 这个函式, 在 FreeBSD 的 ports 位置
为 /usr/ports/devel/php4-dio/ 安装它之後才可以使用 dio 的相关函式.
下面网址为 UR485 使用 dio 取得资料的一个简单程式内容
PHP程式码网址:
http://jal.tw/mrtg/AT2051.phps
其实能抓内容的就代表, 要丢进资料库就超级简单的了, 这我就不实作了.
最後, mrtg 画出来的结果可参考这个网址
http://jal.tw/mrtg/at2051.html
--
╰╮ Υ小瓜呆的窝.脆笛酥的家Υ ╭╯
╭╯ 作者:jal 来自:122-116-218-201.HINET-IP.hinet.net ╰╮
├─ bbs.jal.tw ─┤jal-BBS├─ 140.131.151.242 ─┤