2012年11月13日

JNX-2000D測電器(PowerMeter)-Linux讀取程式(流程、格式說明篇)

延續上篇的JNX-2000D介紹,這篇正式來po出Linux的讀取程式。
如果對程式流程和內容沒興趣,可以直接跳過本篇,看下一篇下載程式和使用說明。

JNX-2000D的USB無線接收器,實際上只是USB to RS-232,將它插到Linux電腦後,
一般來說就能抓到pl2303的USB to serial port裝置,從dmesg顯示如下:
[ 18.283060] usb 3-1: pl2303 converter now attached to ttyUSB1 
[ 18.283090] usbcore: registered new interface driver pl2303 
[ 18.283092] pl2303: Prolific PL2303 USB to serial adaptor driver 

正常來說,大多會抓到ttyUSB0,如果跟我一樣已經有一個USB to SerialPort裝置,
它就會是ttyUSB1...之後遞增。

USB無線接收器它在連接到電腦後,按下面的流程先進行初始化:


這段流程完成後,PC和USB無線接收器就會完成初始化,接著按下面流程,
即可取出測電器資訊:

這裡注意到一點,當第一次送出0x64 0x63後,收到的第一筆測電器資訊是獨特的,
它類似如下:
A2 09 0D 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

這裡的09表示使用Channel 9,同樣的如下:

A2 0A 0D 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
這裡的0A表示使用Channel 10。


其他正常的測電器資訊,格式我看起來有3種,
每種都是29個bytes,區別在開頭,有0A、0B、0C這3種。
這3種資訊,有部份資訊是相同的,部份資訊不同。
這部份我認為一開始設計為0A,後來欄位不夠了,就以0A為基礎改為0B,
再來又加上0C,因此有些欄位在0A、0B、0C都表示相同資訊,有些則不同。
我總共提取了如下6項資訊:

  1. 消耗瓦數
  2. 使用電壓
  3. 消耗電流
  4. 功率因數
  5. 花費度數
  6. 持續測量時間

花費金額的部份我沒有設定,因此都是0,看不出來是哪幾個欄位,其他上述資訊如下:
消耗瓦數:
0A、0B、0C都有,類似如下:
0A 00 00 01 04 08 xx xx xx xx xx
00 00 01 04 08表示消耗瓦數為: 0014.8W

0C 00 00 00 03 02 xx xx xx xx xx
00 00 00 03 02表示消耗瓦數為: 0003.2W

使用電壓:
0A、0B、0C都有,類似如下:
0A xx xx xx xx xx 01 01 02 07 xx xx xx xx
01 01 02 07表示電壓為: 112.7V

0C xx xx xx xx xx 01 01 02 09 xx xx xx xx
01 01 02 09表示電壓為: 112.9V

消耗電流:
0A、0B、0C都有,類似如下:
0A xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx 00 00 02 05
00 00 02 05表示電流為: 00.25A

功率因數:
0A、0B都有,0C沒有,類似如下:
0A xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx 00 05 01 01
00 05 01 01表示功率因數為: 051.1%

花費度數:
0A有,其他都沒有,類似如下:


0A xx xx xx xx xx xx xx xx xx 00 00 03 03 02 07 01 02
00 00 03 03 02 07 01 02 表示度數為: 0033.2712度



持續測量時間:
持續時間比較麻煩,它由2部份組合而成,分別是
  • 天數
  • 小時分鐘
小時分鐘:
0B有,其他沒有,類似如下:
0B xx xx xx xx xx xx xx xx xx 03 08 00 01 00
03 08 00 01 00表示: 01h 38m (小時和分鐘倒過來放置)

天數:
0C有,其他沒有,類似如下:
0C xx xx xx xx xx xx xx xx xx 00 00 03 01 00
00 00 03 01 00表示 31天(0031)

最後一點,它每筆資料的結尾2 bytes相加均為D0,用來做結尾表示,例如:
0C C4 (0C + C4 = D0)
11 BF (11 + BF = D0)

沒有留言: