2020年12月7日

Python版本的Event-Handler

之前寫Qt時,connect-slot用得很開心,看c#才知道原來這個設計稱之為Event-Handler,
基本上,UI Framework很多都用Event-Handler設計的。

在Python上,因為先前程式複雜度還沒這麼高,也沒有UI需求,因此一直沒有玩Event-Handler,
最近心血來潮找了下,把用法和sample code貼出來。

Python版本的Event-Handler (connect-slots),要先安裝套件events
使用步驟:
1. 設定Signal function Name
self.events = Events(('on_change', 'on_trigger'))
on_change, on_trigger都是Signal function Name

2. 發出Signal的來源端要把Events指定進去(Slot端不用)
self.button = Button(self.events)
self.display = Display()

3. 實做Slot function
class Display:
.....
def show_button(self, num):
self.NUMBER = num
.....

4. Slot functionSignal function連結
self.events.on_change += self.display.show_button

5. 觸發Signal function
class Button:
.....
EVENTS = None
.....
def __init__(self, events):
self.EVENTS = events
.....
def run(self):
.....
self.EVENTS.on_change(6)
.....
看得出來沒有Thread-Safe,因此如果要用在多執行緒內,要另外加上mutex

2020年11月22日

Ai學習 - 1_PVE LXC Nvidia GPU Tensorflow環境搭設

最近想學Ai,早在去年從同事買了一張挖礦汰換的顯示卡,
最近才把它裝機,準備開始用。
起手式第一步,環境搭設。

Tensorflow官方有提供Docker,我也的確裝上去了,
但我發現Pycharm對於遠端Docker和遠端Virtualenv的支援不太好,
遠端SSH支援不錯,但Tensorflow Docker在遠端SSH除錯會出錯誤,
嘗試自己建標準版Ubuntu 18.04 Docker,遠端SSH除錯和執行都確定沒問題,
目前把問題歸在官方Docker,於是就土法煉鋼自己做了。
下面就把過程和步驟整理出來。

Tensorflow GPU需要5樣東西(依階層):



















不論是Docker還是LXC,在Host主機上,都只需要安裝NVIDIA顯示卡驅動程式
其他部份(NVIDIA CUDA、NVIDIA cuDNN、Python、Tensorflow-GPU)都在Guest的Docker或LXC內,如下圖:





















而在Container內要跟Host之間聯結,讓Container的程式能存取NVIDIA顯示卡驅動程式,
因此需要一些額外設定。
在Docker中,需要安裝NVIDIA修改過的Docker (nvidia-docker),
並在執行docker時指定runtime=nvidia,指令大致是:
docker run --dns 8.8.8.8 -p 8888:8888 -v tensorflow-data:/tf/data --runtime=nvidia -d --rm tensorflow/tensorflow:latest-gpu-py3-jupyter

細節就不多說了,下面操作步驟在描述。

操作步驟:
1. 安裝NVIDIA驅動程式
在PVE上安裝NVIDIA顯示卡驅動程式,步驟主要3點:
1a. NVIDIA官方網站下載相對應的Linux amd64驅動程式
1b. 新增/修改 /etc/modprobe.d/blacklist.conf 如下:
/etc/modprobe.d/blacklist.conf
================
blacklist nouveau
================

1c. 執行Linux amd64驅動程式進行安裝
# bash /root/NVIDIA-Linux-x86_64-450.80.02.run

1d. 確認安裝完成
# nvidia-smi

如果安裝成功,nvidia-smi會顯示系統顯示卡的資訊。

這邊要記住安裝的驅動程式版本,這裡用450.80.02

2. 建立Ubuntu 18.04 LXC Container
1a. 在PVE上建立Ubuntu 18.04 LXC,這裡用標準的standard。
1b. 接著要修改LXC的設定檔,將NVIDIA顯示卡驅動程式產生的device file映射到Container中,
在PVE LXC的設定檔加入:
/etc/pve/lxc/105.conf
================
..........
lxc.cgroup.devices.allow: c 195:* rwm lxc.cgroup.devices.allow: c 243:* rwm lxc.mount.entry: /dev/nvidia0 dev/nvidia0 none bind,optional,create=file lxc.mount.entry: /dev/nvidiactl dev/nvidiactl none bind,optional,create=file lxc.mount.entry: /dev/nvidia-uvm dev/nvidia-uvm none bind,optional,create=file lxc.mount.entry: /dev/nvidia-modeset dev/nvidia-modeset none bind,optional,create=file lxc.mount.entry: /dev/nvidia-uvm-tools dev/nvidia-uvm-tools none bind,optional,create=file
================

細節參考:

3. 下載NVIDIA CUDA (Container內)
NVIDIA網站下載CUDA:

選擇 Linux -> x86_64 -> Ubuntu -> 18.04 -> Deb(Network)

接著按照網站上描述的步驟,執行前面3點
# dpkg -i cuda-repo-ubuntu1804_10.0.130-1_amd64.deb
# apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/7fa2af80.pub
# apt update

4. 安裝NVIDIA顯示卡工具程式、CUDA (Container內)
我們上個步驟把套件庫新增到系統後,這邊安裝。
這裡安裝要注意幾點:
1. Tensorflow-GPU不同版本相依不同的CUDA版本
2. CUDA安裝會相依nvidia-driver、nvidia-util版本

因為Tensorflow會相對應特定版本的CUDA,版本參考:

原則上,Tensorflow 2.1.0以上都用CUDA-10.1版,這裡安裝CUDA-10.1版。

前面提到我們用的顯示卡驅動程式版本是450.80.02
這裡要安裝cuda-drivers-450.80.02,指令如下:
# apt-get install cuda-drivers=450.80.02-1

比較簡單的方式是,安裝aptitude,用aptitude指定這個版本安裝。

接著才安裝CUDA,這裡我們安裝CUDA-10.1版,指令如下:
# apt-get install cuda-10-1

10-1表示10.1版,要安裝其他版本,例如10.0 (就是cuda-10-0)。
同樣的,比較簡單的方式是用aptitude直接指定版本安裝。
這裡要注意,安裝時,它顯示把cuda-drivers移除,安裝最新的455版,
一樣,用aptitude,直接指定cuda-drivers用450.80.02-1的版本。

完成後,執行(Container內):
# nvidia-smi

應該會出現和PVE主機上一樣的畫面訊息。

5. 安裝NVIDIA cnDNN
NVIDIA網站下載cnDNN

前面Tensorflow網站寫,2.1.0以上版本是7.6版,因此我下載:
cuDNN v7.6.5, for CUDA 10.1

選Ubuntu 18.04版本下載。
只需要安裝runtime即可,dev和doc都不用下載。
直接用
# dpkg -i /root/libcudnn7_7.6.5.32-1+cuda10.0_amd64.deb

6. 安裝Python3.7和pip3 (Container內)
Tensorflow提供pip安裝,但要求要pip 19.0以上版本,
因此我們安裝並升級Ubuntu 18.04的Python3.7和pip3。

6a. 安裝Python3.7
# apt install python3.7 python3.7-dev

6b. 調整預設Python3版本為python3.7
# update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.6 1
# update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.7 2
# update-alternatives --config python3

6c. 安裝升級新版pip3
# apt install python3-pip
# python3.7 ./get-pip.py

7. 安裝Tensorflow-GPU
這裡我看了半天,終於搞懂差異在哪,
首先Tensorflow 1.x 和 Tensorflow 2.x 不相容,程式碼要修改,
再來,Tensorflow 2.0.0、2.1.0、2.2.0、2.3.0穩定性有差異,
支援的演算法有差異,演算法差異參考:

目前我選2.2.1安裝,但之後Raspberry Pi + Tensorflow-Lite,我可能會改用2.3.1。

安裝Tensorflow-2.2.1
# pip3 install tensorflow-gpu==2.2.1

等等等等.......

8. 驗證 & 備份
執行下面這段Python程式碼:
import tensorflow as tf
tf.test.gpu_test_gpu_device_name()

正常會顯示一堆東西,其中出現
GeForce GTX 1060 6GB computeCapability: 6.1

接著最重要的步驟~備份。
Container關機 -> Backup -> 選 gzip -> 備份後,搬移到 templates/cache/ 改名為 tensorflow-gpu-2.2.1。

到這裡,LXC版本的可遷徙容器完成.......
其他地方只需要PVE安裝個Nvidia Driver 450.80.02就可以玩Tensorflow了!

2020年10月10日

我認知的電力電子 - 6 總結

前面多篇提到交換式電源、逆變器、變頻器,其實現在很多應用都是上述幾種變形,這邊總結的部份就把我知道的一些應用列出來。

新式T6節能日光燈具:
T6節能日光燈具號稱能省電、燈具不閃爍,關鍵不是T6規格,而是燈具內使用是「預熱式電子安定器」,多年前上網買T5用的「預熱式電子安定器」,把家裡T5燈具全部拆下來更換安定器,效果的確不錯,每支燈管平均壽命大約3~4年,也的確不閃爍。
原理很簡單,就是交換式電源,傳統的安定器直接是交流電,頻率就是60Hz,而透過交換式電源設計,交換式電源的切換頻率大約50kHz,相對來說就是不閃爍,而交換式電源的電子安定器轉換效率能到93%左右。
不過現在家裡全部汰換了,都換成LED吸頂燈了,算是進化到3代燈具。

變壓器:
手機用的變壓器,現在都很輕,都已經是交換式電源設計了。

行動電源:
內部都是DC-DC Converter,小米有出2種,一種稱為高配版,一種是一般的版本,其實差別在,高配版內部是2組DC-DC Converter,所以功能上能夠同時行動電源充電和行動電源充手機。

變頻冷氣、冰箱:
內部就是變頻器。

新式電梯馬達控制:
新式電梯的馬達控制使用變頻控制,最新的稱為PM永磁式,是在變頻控制的基礎上,馬達內部變成多級,很多組的磁鐵和電磁鐵(傳統是三相,3組),稱為PM永磁式,好處是因為很多組,能提高扭力,搭配變頻控制,直接省去減速齒輪箱。

電動車馬達控制:
電動車的馬達控制,就是變頻器,和前述差不多,有沒有永磁這類設計不確定。

電動車煞車的電力回充:
電動車和油電車有個特色,具備煞車時的電力回充,效果有2個,一方便能夠減少煞車皮使用,另外能充點電。
馬達通電正著轉,是馬達,馬達反著轉,其實就變成發電機了。
煞車時的動能,讓馬達反轉,就變成發電。
但設計細節得查查看。

變頻器與各種三相馬達控制:
就變頻器與馬達控制。

UPS:
提過了。

太陽能發電和並聯市電:
太陽能發電其實就是UPS設計的延伸,太陽能充電到電池,就是交換式電源設計,如果要進一步併入家中市電,就是多增加逆變器,把電池轉成交流電充入家中市電。
這裡逆變器的差別是,UPS是產生固定110v 60Hz的電力。
太陽能發電用的市電併聯器,裡面的頻率產生器是從市電參考目前的電壓和頻率,再把頻率複製後產生到開關電路控制,電壓和頻率是根據市電浮動的。

UAV無人載具的馬達控制器:
前面提過遙控車的電變。

差不多這些,基本上目前看得到的電機和馬達控制應用,只要是電力或電機類馬達和電力控制,大概都是差不多的東西。

樹莓派的PWM,PWM就是頻率產生器,但因為電腦是數位的,原則上PWM提供的是方波1-0-1-0的週期方波信號,PWM的好處是能改變1-0-1-0的切換頻率。
但如果要轉交流的應用,直接買一塊頻率產生器板子,NT150,頻率穩定性效果遠勝PWM,控制又簡單。

我認知的電力電子 - 5 變頻器

前面提到交換式電源和逆變器。
這裡直白的描述,交換式電源因為是開關型電路,其實本質上就是AC-DC Converter。
因此常見的DC-DC Converter實際上是透過開關開啟和關閉的方式,把來源的DC轉成類似AC的切換模式,在轉成DC輸出。
而逆變器,就是DC-AC Converter。

變頻器的目標,是透過改變頻率的方式,控制交流馬達。
這類的應用傳統的交流馬達應用,通常是AC(定頻60Hz)-AC馬達。
而要改換成變頻器,尤其是俗稱的「DC直流變頻」,其實就是:
AC -> AC-DC Converter -> DC-AC Converter -> AC交流馬達

然後在DC-AC Converter內控制AC的頻率,達成變頻的效果。

我認知的電力電子 - 4 UPS原理與逆變器

前面提到交換式電源和遙控車的電變,提到電變的差異是,把開關電路的控制改為控制PowerMOS這類元件,達到大電流放電的能力。

新式UPS的原理和電變差不多,因此理解交換式電源和電變之後,就比較容易理解UPS。

UPS功能:
UPS主要是當停電時,提供裝置電力。
UPS內部有蓄電池,當停電發生時,會將電力供應從插座的交流電轉到蓄電池繼續供應電力,直到蓄電池沒電為止。
因此電路上包含蓄電池充電和蓄電池放電2個部份,這裡著重在蓄電池放電的描述。

UPS蓄電池放電原理:
我們再看一次DC-DC Converter的示意圖:

在UPS中,蓄電池的負載放電也和DC-DC Converter相同,但2個問題點:
1. 負載很多或很大,需求電力大
2. 負載使用交流電

因此,和電變一樣,UPS內的負載使用多顆PowerMOS這類電子元件提供電力,PowerMOS的數量可能多達8顆甚至更多,根據UPS設計的負載能力不同,使用的PowerMOS顆數不同。

第2點,負載要是交流電,怎麼辦?
這是本篇的重點。

頻率產生器:
現在有種東西,叫作頻率產生器,功能很簡單,根據參數設定,產生特定的頻率,頻率可以是正弦波、方波、甚至三角波,頻率也能設定。
它的單價很低,1個大約NT150(10年前價格)。

前面交換式電源提到:
1. 整個DC-DC Converter會透過一個電壓偵測器偵測電壓,根據電壓控制充電的開關電路開啟和關閉的頻率。
2. 電容的一個特性是,電壓和電容量會在充電時持續上升。

在UPS應用中,會加上一片頻率產生器,電壓偵測器會根據頻率產生器的正弦波,和電容的電壓比較,控制充電的開關電路開啟和關閉。


























因為要提供的是交流電,因此充電部份會有2組,1組提供正電壓充電,1組提供反向的負電壓充電,負電壓這組,輸出時正負反接。
因為交流電是110v正弦波,因此電壓偵測器偵測電容電壓時,電壓要是110v正弦波的波型電壓。

逆變器:
雖然整篇文章沒提到逆變器,但其實上面提到UPS的這種產生交流電的Converter,稱之為DC-AC Converter,俗稱Inverter,中文就是逆變器。

這類的UPS比傳統UPS更好,一般號稱能夠推動馬達的UPS,內部多半是這種設計,而傳統的UPS設計,是透過多組不同電壓的直流方波疊加產生的,其實是很像金字塔的正弦方波,效果比較差。

我認知的電力電子 - 3 遙控車電變

在上一篇的交換式電源中提到,交換式電源包含3個部份:
充電(開關電路)、電池(電容)、負載放電

充電(開關電路)的目標是:
在負載持續放電(用電)下,透過開關的方式,持續對電容充電,並維持負載需要的電壓。

有沒有可能,負載需要的電流太大,超過開關電路的供應?發生了會如何?
是很有可能發生的,當發生的時候,負載電路會持續以最大電流供電,電容會持續充放電,但負載用電太大,會讓電容電壓不足(充電無法到達需求電壓),充電電路會發熱,如果散熱不足,可能造成元件過熱燒毀。

為了應對大電流電機應用,多年前開始出現PowerMOS這類電子元件,這類電子元件的功能就是電力開關,開啟時通電,關閉時不通電。
但這類電子元件的新的差異是,他開啟通電時,能持續提供15w甚至30w的電力供應,也就是12v提供1.5A甚至3A的電流,而且能夠並聯。
這類元件最典型的應用就是遙控車、無人載具馬達的供電電源。

透過並聯,低一顆PowerMOS提供15w,2顆並聯供給1顆馬達,最大可以提供馬達30w電力,2顆馬達則整台遙控車最大出力可以達到60w。
這對於目標是大馬力高速度的遙控車,絕對是逸品。
而這樣的元件,在遙控車裏面,稱之為『電變』。

而馬達的控制,就是前面開關電路的開啟跟關閉的頻率,調高開啟頻率,就讓馬達動力更強,降低開啟頻率,就讓馬達轉弱。

我認知的電力電子 - 2 交換式電源

交換式電源:
交換式電源大概是電力電子中基本的應用之一,也是最廣泛的應用。
交換式電源厲害的地方是,傳統變壓器重量重,轉換效率低,重量大概幾百克甚至幾公斤(根據變壓器大小),轉換效率大約60%左右,交換式電源重量只有幾克,轉換效率85%起跳,目前常見的行動電源和3.3v、5v變壓器,轉換效率都做到95%以上,甚至98%。

原理:
整個交換式電源(Switch Power),我把它分成3個部份和階段:
●充電
●電池
●放電

充電部份(階段)與電池部份(階段):





充電部份(階段)通常充電會是開關電路,電池會是電容,也因為充電是開關電路,因此稱為交換式電源(Switch Power)。
至於使用充電部份使用開關電路的原因,我猜可能跟交流電有關,實際原因我可能需要再查看看。





開關電路和電容的特性先看下圖:

上圖有個地方有問題,不過先不管它,解說為主。
以DC-DC Converter來說,假設是12v轉9v的DC-DC Converter,開關電路的特性是上圖左側。
當開關電路的開關開啟時,會產生12v電壓的電力。

而電池或者電容的特性有幾個點:
1. 電容或電池的電壓
2. 電容或電池的容量(內部儲存的電力容量)
3. 電容的電壓會隨著電容量的多寡而變化

因此,假設電容量一半時,則它的電壓可能只有一半,
當然,電容實際的電壓、電容量、電流要用算的,這邊先不用管這麼細。

所以,電池或電容的特性如上圖右側,當電池或電容沒電時,電壓為0v,
隨著持續充電,電壓會隨電容量增加持續上升,直到到達我們需要的電壓。

以12v轉9v的DC-DC Converter來說,當電容充電之後,電壓會從0v變成9v。

放電部份(階段)與電池部份(階段):

同樣的,電池部份(階段)通常是電容,而放電部份(階段),通常是負載。

以行動電源為例子,行動電源內部電源可能是12v,經過DC-DC Converter之後是5v,輸出接的手機,手機就是負載。

前面提到在充電部份(階段),電容會充電,直到需要的電壓。
而負載放電,會持續的從電容消耗電力,因為電容的電容量很小,通常非常短的時間(1~3秒內)就會消耗完全部電力,如下圖:

為了持續持續提供負載用電,讓電容維持在需要的電壓,因此整個DC-DC Converter會是充電、電池、放電3個階段加在一起,持續運作。

為了維持9v輸出,通常DC-DC Converter內部會有個輸出電壓偵測器,偵測器會持續偵測電容上的電壓,讓它維持在輸出電壓(這裡的例子是9v),當到達9v時,就會讓開關電路關閉,當低於9v時,會讓開關電路開著,開關電路在開著狀態時,會持續的開關切換,進行充電。

開關電路是常見的架構,也是主要的框架,看起來複雜,但其實後面每個架構都是延伸。

我認知的電力電子 - 1

多年前因為想自製行動電源和要買UPS,以及研究太陽能發電,那時研究了下DC-DC Converter、UPS原理、逆變器原理,自己買元件實做了交換式電源和行動電源,差點自己DIY UPS。
既然前面提到變頻器,就把知道的部份整理出來。

電力電子簡述:
以往電機俗稱大電,都是110v以上電壓,大多是交流電。
電子俗稱小電,都是3.3v、5v這種,常見的最多就48v。
更直白的說法,電機的電會電到人甚至電死人,電子的電通常不會電到人。

以往電機歸電機,電子歸電子,電子元件都mA計算,電機都A計算,但因為電子元件耐電流能力提高了很多,有能力控制A等級,因此現代電機陸續都由電子元件驅動,最典型的應該就是變頻馬達控制。

那時候為了自製DC-DC Converter,發現新式的電源供應器換電源轉換器都是交換式電源,因此研究了下,後來看UPS和太陽能發電才發現,原來都是同一技術的延伸。
(下篇待續)

抽水馬達(三相馬達)啟動與控制(Y-△啟動電路)

最近因為大樓抽水馬達配電盤出問題,正好學習了解,並嘗試用樹莓派自製控制器。
為了怕自己忘了,把已知的部份陸續紀錄。

抽水馬達(三相馬達)控制(Y-△啟動電路):
三相馬達又稱三相感應馬達,基本上比較大型的馬達都是三相馬達,小的包括冷氣、冰箱,大的包括抽水馬達、電梯、電動車、電聯車應該都是三相馬達。

馬達基本原理簡述:
馬達內部就磁鐵和電磁鐵,電磁鐵通電產生磁力,和磁鐵發生互吸互斥,產生旋轉,持續的改變電磁鐵狀態,就能產生持續的旋轉。
一般三相馬達都接交流電,因為上面提到,電磁鐵狀態持續改變,就能產生持續旋轉,交流電是有頻率的,台灣固定60Hz,這表示交流電會以60Hz的頻率自動改變狀態,就能讓馬達持續旋轉。
而三相馬達共6條線,2條1組,形成3個電磁鐵。

Y-△啟動電路用途:
因為馬達啟動會需要大電流,為了避免控制電路在啟動時燒毀,因此需要改變馬達接法,降低啟動電流。
參考:

方法是啟動時使用Y接法,啟動後△接法,透過Y接法降低馬達運轉的效率,降低啟動電流。

延伸,變頻器用途:
事實上,馬達正常運作就是用△接法,會用Y型接法就只是為了啟動降低啟動電流,最新的作法是直接用△接法接馬達,但透過控制頻率的方式,頻率由低而高線性的調整,控制馬達轉速,同時降低啟動電流和運轉速度。

這裡,我因為要用樹莓派控制,不打算做變頻器和用變頻器,因此使用傳統的Y-△啟動電路。

控制說明:
先看圖:

名詞說明:
三相電源:
習慣上會用R、S、T表示三相三條線,三相電源就是電源火線有3條,有三相3線式(3P3W),和三相4線式(3P4W),三相4線式第4條是接地線(水線)。
三相電源有分三相220v和3相380v。
三相3線式(3P3W)的任意2條火線,都會形成交流電,三相220v,R-S形成220v、S-T形成220v、R-T形成220v。

三相馬達(三相感應馬達):
習慣上會用U1(1)、V1(3)、W1(5)和U2(2)、V2(4)、W2(6)表示三相馬達的3組線,U1(1)-U2(2)形成1組電磁鐵、V1(3)-V2(4)形成1組電磁鐵、W1(5)-W2(6)形成1組電磁鐵,(數字)表示第幾條線。
U1(1) V1(3) W1(5)
U2(2) V2(4) W2(6)

接線:
先描述正常△接法:
R-U1(1)-W2(6)
S-V1(3)-U2(2)
T-W1(5)-V2(4)

Y接法:
R-U1(1)
S-V1(3)
T-W1(5)

U2(2)-V2(4)-W2(6)

樹莓派控制接法:
需要3顆3相固態繼電器(SSR),以上圖來說,為左一、右上、右下。
左一用60A的原因是,原先大樓的配電盤,左一電磁開關出現「咿-咿-咿-咿-咿-咿-咿」的聲音,因此換個大點的繼電器。

左一來源接R、S、T,輸出接U1(1)、V1(3)、W1(5)
右上(我俗稱小白兔),負責控制Y接法,來源接U2(2)、V2(4)、W2(6),輸出三條線接一起。
右下,負責控制△接法,來源接R、S、T,輸出接W2(6)、U2(2)、V2(4)。

樹莓派控制:
馬達停止時:
左一關閉、右上關閉、右下關閉。

馬達啟動時(低速運轉)(Y接法):
左一啟動、右上啟動、右下關閉。

馬達正常運轉(全速運轉)(△接法):
左一啟動、右上關閉,右下啟動。

在這裡,樹莓派的功能其實就是替代原先的時間繼電器,差別是
1. 導入樹莓派能做到全數位控制
2. 電磁開關和時間繼電器改用SSR,變成無接點控制,原先220v的控制都改為直流電控制,電磁開關改用SSR無接點無火花,能提高系統壽命

樹莓派內有PWM,SSR切換速度極快(ms等級)哪天想不開,說不定能魔改成變頻控制。

大樓上水塔、下水池狀態感測器(61F-G1)說明

最近因為大樓抽水馬達配電盤出問題,正好學習了解,並嘗試用樹莓派自製控制器。
為了怕自己忘了,把已知的部份陸續紀錄。

61F-G1水位偵測器:
大廈大樓普遍使用的水位控制器,是歐姆龍出品的,好像是水電技術士考試內容。
有多個型號,G為單1組感測控制器,G1為2組串連,G2為3組串連。
大樓通常有下水池接自來水,上水塔和下水池水管連通接抽水馬達,所以通常用G1,2組感測器。

61F-G和61F-G1的說明,我主要參考:

感測器稱為Unit,簡稱U。
G型號:
水位感測(輸入Input)接E1、E2、E3
提供的狀態(輸出Output)為Ta、Tb、Tc

G1型號:
G1型號因為串連
水位感測(輸入Input),U1(下水池)接E1'、E2'、E3',U2(上水塔)接E1、E2、E3
提供的狀態(輸出Output),為Ta1、Tb1、Tb2、Tc2

G1的各個情況和接線示意圖如下:

61F-G1內部幾個關鍵點:
1. 61F-G1內部把Tc1和Ta2互連,這2個IO並沒有提供
2. 61F-G1內部的繼電器狀態切換,都是Tc,U1是Tc2,U2是Tc1
3. U1表示下水池,在右側,U2表示上水塔,在左側
4. U1的繼電器IO均為2,Ta2、Tb2、Tc2,U2的繼電器IO均為1,Ta1、Tb1、Tc1

因為我要用樹莓派感測和控制抽水馬達,因此接線上,Tc2接GND,Ta1、Tb1、Tb2接GPIO。

水位感測的原理,E1、E2、E3:
參考:

E1接在高水位,E2接在低水位,E3接在水池底。
因為水會造成短路(導通),因此:
E1-E3導通時,表示高水位
E2-E3導通時,表示低水位
因為高水位時,E1、E2和E3都會導通,因此偵測上,E1-E3、E2-E3應該是反向關係,
E1-E3導通時輸出0(短路),E2-E3輸出1(開路)
E1-E3輸出1(開路),E2-E3導通輸出0(短路)

2020年10月5日

保險之我見 - 10 保費、保金總額

一般來說,我們認知的保險,我花100元買,得到最多1,000的保障,
那麼我花1,000元買,應該能得到最多10,000的保障吧?
不一定~

前一篇提到,保險公司內部有精算師,所有保單推出前,都會精算過,
每張保單的合約書中,都會有保單的計算公式,
也都會設計一張試算表,提供給業務試算保額(要繳的金額、保障的保險總金額、甚至可能有傭金金額)。

我們一般認知上,繳的保費和保單總價值應該如下圖:























實際上,如果拿保單上的公式試算會發現,實際上可能是下圖:

年繳保費越多,保單總價值會上升,但上升並不是等比級數,
這原因很簡單,保險公司要設定最大可承擔風險,
因此年繳最多保費,是有最大保障沒錯,但並不是等比例的保障。

因此,一個衡量是,買這張保單,要的是最大效益,還是最大保障?
效益和保障間的取捨關係
如果同類型商品,在多間保險公司買多張低價格的保單,如何?

另一個保費和保金關係的點 - 年期
目前一般終身險,通常20年期,一年也許30,000~50,000之間,
因為這是大部分人認為1年繳1個月薪水差不多的金額,
20年期很簡單,直接把金額x20,要繳交的總金額約略在70萬上下(通常在80幾萬)。
但,有注意到,年期可以選擇的......可以15年繳清,10年繳清,6年繳清。

10年繳清,每年繳大約50,000~70,000之間,
直接把金額x10,要繳交的總金額約略在50萬上下(通常在60萬左右),
差10年週期,總金額大概少繳20萬左右。

微妙的是,年期越短,保險附加項目可能減少,
例如,10年期以下沒有包含豁免條款,為何?
因為成本阿..........

但大部份人不會注意這些,心態上:
1. 預設值直接選
2. 一年繳個30,000~50,000,大概1個月薪水(看收入高低),感覺還ok
3. 根本沒想過保費還有繳交總金額試算這回事,就每年繳固定金額阿

保險之我見 - 9

保險公司的所有保單,都會先在內部由精算師精算設計後,送政府核定。
但政府也知道保險公司要賺錢,畢竟大量投資要靠保險公司,
但也知道不能讓保險公司賺太兇,會影響保戶權益,因此會給予限制和審核,
其中一個近年被提出的,是所謂的「現金流量」,
要求保險公司所有資金中,必須有一定比例是現金,現金水位需要佔整體的幾成,
我如果沒記錯,要求是60%以上是現金,
因此,保險公司需要投資能夠持續產出現金的項目,
這其中,保險公司最愛的,就是商辦.........
稍微觀察會發現,商業區的商辦、土地、科技園區的辦公大廈,
很多都是保險公司的,為何?
因為每個月都能收租金,租金是「現金」。
這能讓保險公司符合金管會現金流量的規定,又不會滿手現金沒投資。

因此老實說,保險公司要經營到倒很難,通常都是亂投資導致鉅額虧損,
以經營的角度看保險公司,錢從保戶來,保戶的錢拿來投資,
投資出問題,損害的是保戶權益,聽起來就是完全轉嫁,也是個能賺錢的模式,
現金多金額大,又能成為投資大戶受禮遇,
因為現金多、金額大,在市場上,直接佔據主導地位,算是造市者之一。

保險之我見 - 8 投資型保單

投資型保單是種很奇怪的商品,它的設計是保單的保價金讓保戶投資基金。

但這裡有幾個問題:
1. 保價金和投資連動
投資失利,則保險保障受損
大部分人對投資型保單會火大的最主要原因是因為,大部分人會把保單解約的時期,
通常是景氣差的時候,景氣差需要現金,因此把保單解約,很合理,
但投資型保單因為和投資連動,景氣差時通常投資虧損嚴重,
虧損嚴重又同時需要現金,就發現保險保價金少了很多,就直接火了,
當然,多年前的連動債事件,造成大量投資型保單失效,是導火線。

2. 基金的可選擇性
投資型保單能投資的基金通常有限定,
基金公司也要賺阿,所以這張保單等於多了一塊成本,
而且基金的成本通常是買或賣時繳手續費(台灣),
這等於每次轉換都會產生隱藏成本減少保單價值。

這麼怪的商品,保險公司怎麼會這麼愛賣?
一般來說,保險公司收了保戶的錢之後,通常拿來投資,
各國的保險公司(包含公營私營保險公司)通常都是國際基金大客戶,
也都是各國國內重要的投資大戶,
股票、基金、政府公債、公司債券、房地產...等投資商品,
保險公司幾乎都是主要投資者之一,
因此對保險公司來說,保險公司需要承擔投資風險,
投資型保單對於保險公司來說,等於是把投資風險完全轉嫁到保戶自己,
同時間,又能從基金公司賺到介紹費或手續費,
對於保險公司來說,是很棒的商品,
因此保險公司在景氣榮景時,股市基金大好的情況下,
都會推投資型保單,因為這時候基金公司要賣基金。

但反過來看保戶,
保戶同時要承擔投資風險、支付投資手續費、原本保費的成本也攤提在裡面,
等於是同時承擔了很多項成本,不算是好的商品。

保險之我見 - 7 外幣

最近幾年,儲蓄險變形除了低高利率之外,就是外幣。

外幣之所以複雜,因為它關係到匯率,而匯率基本上跟國際局勢和政情有關,
因為匯率是各國央行干預的。

通常,保險公司大推外幣保單,會是在那個外幣在大幅度貶值的情況下,
例如,美元對台幣,1:28元

一般來說,匯率會升降,在大幅貶值(大幅降)時銷售,大家會覺得有利可圖,
可以賺到匯差,因此購買,但保險公司沒說的是,匯率貶值是一時的,
保費要繳6年10年,除非有能力一次把外幣換完每年扣款,否則不是躉繳其實不合算,
但一次換完,為啥不直接外幣定存?而要買張外幣保單?
另一種情況,澳幣、南非幣
澳幣、南非幣是特殊的,它不一定會升值,有可能貶值後升不上去,
這很可能跟國家央行政策或該國貨幣策略相關。

保險之我見 - 6 解約率

上期提到儲蓄險,講到現在儲蓄險都是變形的,短年期低利率,長年期轉高利率。
這是因為,保險公司把傳說中,保險公司真正獲利的一個部份提出來用了 - 保險解約率。

所有保險公司的保單都有相同的規則,提前解約,以繳保金只能拿回70%。
為何保險公司尤其壽險公司特愛賣長年期保單,
因為大部分人,繳不完全週期保費。

下面資訊曾經在ptt上看到過,但數值印象忘了。
印象中,保單解約率一年約略15%~25%。
第1年解約的,印象中20%~25%,
第2年解約的,印象中15%~20%,
第3年解約的,印象中10%15%。

我印象中,經過4年後,大概保單只會剩下40%左右,大概60%都解約了。
前5年解約率,年平均在20%左右吧!

這表示,長年期保單大部分根本沒繳完就解約了,
對於保險公司來說,保金的30%是保險公司的重要收入,
而目前儲蓄險的設計,短年期用低利率,長年期轉高利率,
就是因為看準了大家根本繳不完,實際轉入長年期高利率的比例低很多,
能夠進入10~20年週期持續累計高額複利的比例極低,
最重要的一點是,進入10~20年週期累計高額複利的保單,
通常根本不會領回了,可能直接變成壽險了,對於保險公司來說,
賣張不用支出或支出極低的保單,非常合算。

補充:
因此相對來說,上述長年期的儲蓄險,因為沒有時間上限,
長年期又是複利累積,到期後解約也沒有70%的問題,
因此,可以考慮以長年期複利的儲蓄險替代壽險。

保險之我見 - 5 儲蓄險

儲蓄險是保險公司很愛的商品,台灣人狂買。
很不幸的,這真的是個......不太好的商品。

一個簡單的行銷:
年繳3萬,10年期,10年後還本可拿40萬。
就一堆人買了.............

心態是:
一年3萬,我給得起(月薪3萬,1年存1個月錢,差不多阿)
10年,就儲蓄阿.....
40萬,1年3萬,10年繳30萬,可以拿40萬,賺了10萬,不錯阿!
於是就買了.............

投資理財的比較會知道,景氣循環,定存利率也是循環的,
當然,目前世界大環境,定存利率的循環是循環往下,
但整體來說還是有高的時候和低的時候。

更何況,用這種方式買保單,其實直接在網路銀行就可以設定定存,
用階梯方式設定定存,就能達到同樣效果。

保險公司儲蓄險,最初很簡單的玩單利和複利的遊戲,
用單利行銷,包裝複利的事實,如果用複利精算,
到期還本的錢通常低於當年度的定存利率。

試算如下:
總額 = 階梯10年定存利率的總額 - 意外險成本 - 保險公司維持費用

而這裡用的10年定存利率,通常以當年度的定存利率計算

因此,
在定存利率低的時候,保險公司特愛推儲蓄險,
定存利率高的時候,保險公司不太推,反而推投資型保單。

階梯10年定存利率的意思是,
因為繳費是每年繳,因此它不是躉繳的方式計算,
而是階梯式:
第1筆 10年 1.1%
第2筆  9年 1.1%
第3筆  8年 1.1%
第4筆  7年 1.1%
第5筆  6年 1.1%
第6筆  5年 1.1%
第7筆  4年 1.1%
第8筆  3年 1.1%
第9筆  2年 1.1%
第10筆1年 1.1%

但因為現在大家都知道這作法,因此現在儲蓄險保單變形,
變成6年內低利率,第7年開始轉成高利率計算,
第1筆  6年 0.6%
第2筆  5年 0.6%
第3筆  4年 0.6%
第4筆  3年 0.6%
第5筆  2年 0.6%
第6筆  1年 0.6%
  ?年 2%
  ?年 2%
  ?年 2%
  ?年 2%
......

看似非常划算,畢竟高利率複利效果驚人,
但保險公司沒說的是.......
(下集待續)

保險之我見 - 4

前面提到醫療險和意外險,因為都相對單純些,
這邊開始說壽險。

壽險是保險公司最初的第一個也是最主要的商品,
很多保險公司名稱直接標「人壽」,就能知道壽險商品的地位,
但很不幸的,現在壽險普遍高單價,幾乎不算好商品了。

壽險問題是,繳費金額高,但保障低,
現在這年代,年繳5萬,掛了頂多50萬,
真是昏倒,大概就是一場比較高級的喪禮,
能給家人任何的保障嗎?
50萬,1個人頂多活2年。

問題是,怎麼會這樣?身為保險核心商品,怎麼這麼弔詭?
因為它的成本組成,導致了它的問題。
壽險是這樣的,只要人死了就給錢,不論原因。

因此它的成本是幾項資訊的結合:
保險公司壽險死亡的理賠金總額 + 國民平均壽命 + 國民的平均年齡 + 保險公司壽險客戶的平均年齡

上述4個條件加總和試算之後,得出保費金額和成本,
因為壽險都是死亡後才理賠,因此大多是長年期保單,
因為是長年期繳費,因此保險公司還要加上定存利率綜合計算。

所以每年保費的設定,在加上當時定存利率進行試算,才得出保單保費金額。
我們把上述項目列出來:
  • 理賠金總額
  • 國民平均壽命
  • 國民平均年齡
  • 保戶平均年齡
  • 定存利率

台灣目前是高齡化社會,平均年齡偏高,國民平均壽命約75~80歲,
全球定存利率目前差不多是0% ~ 1%,
保險公司,尤其越老牌的,保戶平均年齡越高,
以這些條件看起來,壽險保費很難降低,
再加上大部份保險都有免除條款(意外險非意外不賠、醫療險沒有上醫院的醫療行為不賠),
但壽險沒辦法,壽險就是一拍兩瞪眼,死了就要給錢,沒有彈性空間,
這些都造成壽險保單價格無法降低,也造成壽險不是好的保單。

但因為壽險年期長,單價高,保險公司反而希望業務多賣一些,
尤其年輕人,買下去繳20年,年輕人又是低風險族群(意外死亡比例低),
真的不幸死了,50萬就解決了,
因此只要定存利率低的時候,保險公司特愛推壽險。

保險之我見 - 3

前面提到醫療險,這邊提意外險,
醫療險和意外險相對簡單些。

和醫療險差不多,意外險的計算和醫療險類似,如下圖:

















一樣是
所有人保費 = 所以意外險保費的總支出

同樣的,保險公司要維持,因此:
所有人保費 = 所以意外險保費的總支出 + 保險公司維持費

意外險是平民保險王很推廣的保險,
它單價低,但保額高,一旦出事能有很不錯的保障,
意外險的問題是,它必須是「意外」,
因此保險公司認定上,必須要有個「造成意外的原因」,
而這點,也正是意外險保費低的原因。

因為,只要有原因,保險公司就能對發生的原因求償,
意思是,理賠的金額是有機會轉嫁到其他人的。
例如:
開車時,因為車輛問題導致受傷,
而車輛問題被鑑定和認定是主因,
保險公司依據意外險理賠,但因為是車輛問題引發的,
因此有機會能夠跟車輛公司求償。

這也是為何保險公司在意外險認定時,必須要有個加害的對象,
這個對象能夠是東西、事件之類的,
除非是地上石頭,否則只要是事件或東西導致的,通常都能被認定,
甚至有當事人能被求償。

保險之我見 - 2

 開始內容:

我們先從保險的保金、保費討論,名詞可能有錯,觀念對就好了,
反正我也不是保險科系的。

我想先從醫療險開始說明,概念上比較容易,
醫療險是保險中重要的組成之一,
我的觀念中,
壽險、醫療險、意外險
並稱三大核心保單

基本上,保險公司的核心產品原則上就是這3個,
其他大多是這3個的衍生性商品。

醫療險的核心概念我們可以想成團體保險,或者典型的台灣健保。
所有人的保費 = 所有醫療保費的金額
當然,保險公司要賺錢,要維持運作,因此實際狀況是:
所有人的保費 = 所有醫療保費的金額 + 保險公司維持費用

而這裡保險公司得維持費用,
包括了保險公司的利潤、給業務的傭金、內部維持運作的開支。

因此,
話術一:醫療險保單要停售了,趕快買哦.....
鬼話,保險公司不會賠錢賣商品,會賠錢的,不用說直接停了或讓業務不推銷

話術二:以前的醫療保單項目少,新保單項目多,換保單比較好
一半鬼話,內容沒錯,但問題是真的有需要換新保單嗎?
保險業務的傭金是這樣算的,長年期保單(終身保單),繳費20年,
但業務大約前5年有傭金,而且傭金金額持續遞減,
沒有換新保單,傭金會縮水。

2020年10月4日

保險之我見 - 1

這系列應該會是個無趣沒閱讀量的系列,
但既然都開頭了,我想就把我對保險的理解寫一寫,
畢竟我支持保險,但因為商業化的原因,對於保險有些無奈。

破題的結論:
我的保險概念核心源自於『平民保險王』,
我支持保險歸保險,投資理財歸投資理財。

我認為保險最核心的本質,是一個個人和保險公司的對賭關係,
個人擔心事故,因此花錢買保險,
事故本身是對賭的項目,賭注則是『錢』,
而個人賭的是『會發生事故』,
保險公司賭的是『不會發生』。

我找過最單純直接的保險,應該是防癌險,
不是防癌險好,而是它設計最符合保險本質。
防癌險是每年繳保費,一旦得了癌症,
直接給保金(常見的是200萬),給完後保險終止,未來無法再購買。
這就是我認知最典型的保險,賭會不會出事。

而現在市面上的保單,通常都是變種保單,
也就是參雜了很多內容在保單內,目標是增加商品吸引力,
同時降低保險公司風險或增加收益。