製品試験、面倒くさいですよね。
できることなら試験をしたくない電気設計課の楠川です。

試験では、電源オフ/オン繰り返し試験、とかありませんか?
電源オフ/オンを実現するために、オフ/オンできるような試験系を組もうにも、結構面倒くさい。

そんな人に福音です。
DPS3005。めっちゃ安くて、結構使いにくい安定化電源です。
それを今回、Raspberry piのNode-REDを使って、Webベースでリモート操作できるようにしちゃいます。

下図は、スマホから電源を操作している画像です


DPS3005は、アマゾンでは5000円くらい、Aliexpressでは3000円くらいで購入できるという安価な電源。
そして、この電源はUSBやBluetoothでリモート操作ができます。
さらに、WindowsアプリやAndoroidアプリも準備されています。
でも、Windowsアプリサイズはなぜか数百MBという巨大さに加え、Windowsアプリではオフ/オンの繰り返しが「できない」という仕様。
これは惜しいっ!!

でも、DPS3005の通信方法はオープンになっているので自動化にはうってつけ。
通信方式はModbus-RTUで、USB−シリアル変換基板やBluetooth-シリアル変換基板を経由して操作します。
というわけで、以降にラズパイNode-REDでDPS3005と通信する方法について記載していきます。

 

前提

・Modbusにある程度造詣があり、
・Raspberry Piにある程度造詣があり、
・Node-REDにある程度造詣がある。
という人を前提に記事を書いていきます。

使用機材

・Raspberry pi 4
・2020年頃のRaspberry Pi OSにNode-REDインストールして、
node-red-contrib-modbus Ver.5.13.3 と
node-red-dashboard Ver.2.26.0 を入れました。
・DPS3005は2019年8月頃購入したものを使用しました。

物理的な接続方法

・DPS3005に
・DPS3005付属のUSB−シリアル基板変換基板 を接続して
・USBをRaspberrPiに接続します。
 

通信仕様・通信設定

DPS3005のプロトコルは下記ファイルに記載されています。(mediafireへのリンクです)
DPS3005 CNC Power Communication Protocol V1.2.pdf
https://www.mediafire.com/folder/3iogirsx1s0vp/#1qtg8k2c03llj
上記リンクの「DPS3005 File (2017.07.03).zip 」内に入っています。

PDFに記載されている内容の必要なところを要約すると、
Modbus-RTUのシリアル通信を使っていて、Function Codeは03,06,10に対応
・Start bit:1
・Data bits:1
・Parity bit: No
・Stop bit: 1


「V/↑」を押しながら電源を投入すると現在の通信設定がわかります。
手元の電源は下記のとおりになっていました。
・Slave address(Unit-Id): 1
・Band rate: 9600


また、USBを差したところ、Raspberry piでは
・/dev/ttyUSB0
として認識されました。

そのため、書き込みの場合はModbus Writeノードを下記のように設定をします。

Modbus Writeノードをつくったら、Injectionコードなどで数値をModbus-WriteコードにペイロードすることでModbus通信にしてくれます。
たったこれだけでリモート操作が可能です!

電圧について試したところ4桁の数値が有効数字で、下2桁が小数点に、
電流については4桁が有効数字で、下3桁が小数点になっていました。

まとめ

コマンドを投げられるようになると、シンプルなオフ/オン動作などは簡単に実現できますね!
DPS3005の電源立ち上がり/立ち下がり時間などが試験仕様に満足できるようなら試験に投入しちゃいましょう!
Webベースで動くので、スマホからでも操作できて便利でした。

サンプルコード

下記にサンプルコードと、DashboardのURLにアクセスした際の画面キャプチャを貼っておきます。
よければ自己責任で使ってみてください。


[{"id":"d8ca494a.5dfb48","type":"tab","label":"DPS3005","disabled":false,"info":""},{"id":"58d8d9a7.aeb148","type":"inject","z":"d8ca494a.5dfb48","name":"","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"str","x":90,"y":140,"wires":[["69067e16.60d92"]]},{"id":"a70989e9.ed7338","type":"modbus-response","z":"d8ca494a.5dfb48","name":"","registerShowMax":20,"x":870,"y":180,"wires":[]},{"id":"60794f48.3609f","type":"comment","z":"d8ca494a.5dfb48","name":"電圧設定","info":"","x":90,"y":100,"wires":[]},{"id":"88eccb28.ce87f8","type":"inject","z":"d8ca494a.5dfb48","name":"","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"str","x":90,"y":600,"wires":[["f01068e8.c9c568"]]},{"id":"43de7ebb.6bddf","type":"modbus-response","z":"d8ca494a.5dfb48","name":"","registerShowMax":20,"x":790,"y":600,"wires":[]},{"id":"5c79ca66.724004","type":"inject","z":"d8ca494a.5dfb48","name":"","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"str","x":90,"y":720,"wires":[["6564b41a.afb5dc"]]},{"id":"21ef21a8.78d1fe","type":"modbus-response","z":"d8ca494a.5dfb48","name":"","registerShowMax":20,"x":790,"y":720,"wires":[]},{"id":"f1260d19.708a2","type":"function","z":"d8ca494a.5dfb48","name":"","func":"msg.payload =\n{\n    value:0,\n    'fc': 6,\n    'unitid': 1,\n    'address': 9 ,\n    'quantity': 2 } ;\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":380,"y":720,"wires":[["685adfa9.5037"]]},{"id":"74ab8874.dac828","type":"modbus-flex-write","z":"d8ca494a.5dfb48","name":"","showStatusActivities":false,"showErrors":false,"server":"cbbdbbe.41b3c48","emptyMsgOnFail":false,"keepMsgProperties":false,"x":570,"y":600,"wires":[[],["43de7ebb.6bddf"]]},{"id":"685adfa9.5037","type":"modbus-flex-write","z":"d8ca494a.5dfb48","name":"","showStatusActivities":false,"showErrors":false,"server":"cbbdbbe.41b3c48","emptyMsgOnFail":false,"keepMsgProperties":false,"x":570,"y":720,"wires":[[],["21ef21a8.78d1fe"]]},{"id":"9c74a3dc.760ba","type":"comment","z":"d8ca494a.5dfb48","name":"スイッチオン","info":"","x":90,"y":560,"wires":[]},{"id":"cc7e270f.e95b68","type":"comment","z":"d8ca494a.5dfb48","name":"スイッチオフ","info":"","x":90,"y":680,"wires":[]},{"id":"58132868.853318","type":"inject","z":"d8ca494a.5dfb48","name":"","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"str","x":90,"y":320,"wires":[["a4889292.6dd98"]]},{"id":"adfbdd6d.9b312","type":"modbus-response","z":"d8ca494a.5dfb48","name":"","registerShowMax":20,"x":930,"y":400,"wires":[]},{"id":"ace0b4b2.639608","type":"function","z":"d8ca494a.5dfb48","name":"","func":"msg.payload =\n{  \n    value:msg.payload,\n    'fc': 6, \n    'unitid': 1, \n    'address': 1 , \n    'quantity': 2 \n};\n\nreturn msg;\n","outputs":1,"noerr":0,"initialize":"","finalize":"","x":760,"y":320,"wires":[["3efdcc80.8e4c34"]]},{"id":"3efdcc80.8e4c34","type":"modbus-flex-write","z":"d8ca494a.5dfb48","name":"","showStatusActivities":false,"showErrors":false,"server":"cbbdbbe.41b3c48","emptyMsgOnFail":false,"keepMsgProperties":false,"x":830,"y":360,"wires":[[],["adfbdd6d.9b312"]]},{"id":"1c1b651c.f08e3b","type":"comment","z":"d8ca494a.5dfb48","name":"電流設定","info":"","x":90,"y":280,"wires":[]},{"id":"69067e16.60d92","type":"ui_slider","z":"d8ca494a.5dfb48","name":"","label":"電圧","tooltip":"","group":"301b87b9.2eea08","order":1,"width":"5","height":"1","passthru":true,"outs":"all","topic":"","min":0,"max":"1200","step":1,"x":210,"y":140,"wires":[["45619fc0.cc539"]]},{"id":"a4889292.6dd98","type":"ui_slider","z":"d8ca494a.5dfb48","name":"","label":"電流","tooltip":"","group":"301b87b9.2eea08","order":3,"width":"5","height":"1","passthru":true,"outs":"all","topic":"","min":0,"max":"5000","step":1,"x":210,"y":320,"wires":[["1105c0cd.d284cf"]]},{"id":"45619fc0.cc539","type":"function","z":"d8ca494a.5dfb48","name":"","func":"msg.payload = msg.payload*0.01\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":340,"y":140,"wires":[["b9237adf.022538"]]},{"id":"b9237adf.022538","type":"ui_text_input","z":"d8ca494a.5dfb48","name":"","label":"","tooltip":"","group":"301b87b9.2eea08","order":2,"width":"2","height":"1","passthru":true,"mode":"text","delay":300,"topic":"","x":480,"y":140,"wires":[["78ef80db.0e3c1"]]},{"id":"78ef80db.0e3c1","type":"function","z":"d8ca494a.5dfb48","name":"","func":"msg.payload = msg.payload*100\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":620,"y":140,"wires":[["de479eb5.15dba"]]},{"id":"1105c0cd.d284cf","type":"function","z":"d8ca494a.5dfb48","name":"","func":"msg.payload = msg.payload*0.001\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":340,"y":320,"wires":[["a1617563.5021a8"]]},{"id":"a1617563.5021a8","type":"ui_text_input","z":"d8ca494a.5dfb48","name":"","label":"","tooltip":"","group":"301b87b9.2eea08","order":4,"width":"2","height":"1","passthru":true,"mode":"text","delay":300,"topic":"","x":480,"y":320,"wires":[["d547eaca.70c708"]]},{"id":"d547eaca.70c708","type":"function","z":"d8ca494a.5dfb48","name":"","func":"msg.payload = msg.payload*1000\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":620,"y":320,"wires":[["ace0b4b2.639608"]]},{"id":"f01068e8.c9c568","type":"ui_button","z":"d8ca494a.5dfb48","name":"","group":"301b87b9.2eea08","order":6,"width":"2","height":"1","passthru":false,"label":"ON","tooltip":"","color":"","bgcolor":"","icon":"","payload":"0","payloadType":"global","topic":"","x":230,"y":600,"wires":[["6cbbbd4f.a61ee4"]]},{"id":"314709ca.9ef536","type":"delay","z":"d8ca494a.5dfb48","name":"","pauseType":"delay","timeout":"5","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"x":900,"y":920,"wires":[["219f10ac.d998c"]]},{"id":"6564b41a.afb5dc","type":"ui_button","z":"d8ca494a.5dfb48","name":"","group":"301b87b9.2eea08","order":7,"width":"2","height":"1","passthru":false,"label":"OFF","tooltip":"","color":"","bgcolor":"","icon":"","payload":"","payloadType":"str","topic":"","x":230,"y":720,"wires":[["f1260d19.708a2"]]},{"id":"4c89d8a3.0b34b8","type":"modbus-response","z":"d8ca494a.5dfb48","name":"","registerShowMax":20,"x":370,"y":1220,"wires":[]},{"id":"8aeb0703.718f78","type":"ui_chart","z":"d8ca494a.5dfb48","name":"","group":"8434656f.6057e8","order":5,"width":0,"height":0,"label":"出力電圧","chartType":"line","legend":"false","xformat":"mm:ss","interpolate":"linear","nodata":"","dot":false,"ymin":"0","ymax":"","removeOlder":"5","removeOlderPoints":"","removeOlderUnit":"60","cutout":0,"useOneColor":false,"useUTC":false,"colors":["#1f77b4","#aec7e8","#ff7f0e","#2ca02c","#98df8a","#d62728","#ff9896","#9467bd","#c5b0d5"],"outputs":1,"x":520,"y":1340,"wires":[[]]},{"id":"82d39110.00313","type":"function","z":"d8ca494a.5dfb48","name":"","func":"msg.payload = msg.payload.data[0] * 0.01;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":340,"y":1300,"wires":[["8aeb0703.718f78","6816d312.bef04c"]]},{"id":"1020e93.726bd17","type":"modbus-read","z":"d8ca494a.5dfb48","name":"","topic":"","showStatusActivities":false,"logIOActivities":false,"showErrors":false,"unitid":"1","dataType":"HoldingRegister","adr":"2","quantity":"2","rate":"1","rateUnit":"s","delayOnStart":false,"startDelayTime":"","server":"cbbdbbe.41b3c48","useIOFile":false,"ioFile":"","useIOForPayload":false,"emptyMsgOnFail":false,"x":130,"y":1220,"wires":[[],["4c89d8a3.0b34b8","82d39110.00313","7bef3f9b.6d76"]]},{"id":"8b49113.88b36f","type":"comment","z":"d8ca494a.5dfb48","name":"電圧読み出し","info":"","x":90,"y":1160,"wires":[]},{"id":"7416bce9.4a8424","type":"delay","z":"d8ca494a.5dfb48","name":"","pauseType":"delay","timeout":"5","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"x":600,"y":920,"wires":[["1c205442.1654ac"]]},{"id":"ad6ef8bc.2f85b8","type":"modbus-flex-write","z":"d8ca494a.5dfb48","name":"","showStatusActivities":false,"showErrors":false,"server":"cbbdbbe.41b3c48","emptyMsgOnFail":false,"keepMsgProperties":false,"x":850,"y":1000,"wires":[[],["2a926028.6d42a"]]},{"id":"1c205442.1654ac","type":"function","z":"d8ca494a.5dfb48","name":"","func":"msg.payload =\n{\n    value:0,\n    'fc': 6,\n    'unitid': 1,\n    'address': 9 ,\n    'quantity': 2 } ;\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":740,"y":920,"wires":[["ad6ef8bc.2f85b8","314709ca.9ef536"]]},{"id":"d8bc6f6b.185b5","type":"function","z":"d8ca494a.5dfb48","name":"","func":"msg.payload =\n{\n    value:1,\n    'fc': 6,\n    'unitid': 1,\n    'address': 9 ,\n    'quantity': 2 } ;\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":440,"y":920,"wires":[["45ecb82f.6f1cd8","7416bce9.4a8424"]]},{"id":"45ecb82f.6f1cd8","type":"modbus-flex-write","z":"d8ca494a.5dfb48","name":"","showStatusActivities":false,"showErrors":false,"server":"cbbdbbe.41b3c48","emptyMsgOnFail":false,"keepMsgProperties":false,"x":530,"y":1000,"wires":[[],["df6615d7.588738"]]},{"id":"2a926028.6d42a","type":"modbus-response","z":"d8ca494a.5dfb48","name":"","registerShowMax":20,"x":930,"y":1060,"wires":[]},{"id":"df6615d7.588738","type":"modbus-response","z":"d8ca494a.5dfb48","name":"","registerShowMax":20,"x":610,"y":1060,"wires":[]},{"id":"219f10ac.d998c","type":"ui_switch","z":"d8ca494a.5dfb48","name":"","label":"オンオフ繰り返し","tooltip":"","group":"301b87b9.2eea08","order":8,"width":0,"height":0,"passthru":true,"decouple":"false","topic":"","style":"","onvalue":"true","onvalueType":"bool","onicon":"","oncolor":"","offvalue":"false","offvalueType":"bool","officon":"","offcolor":"","x":130,"y":920,"wires":[["1ff0bc91.7b4b23"]]},{"id":"1ff0bc91.7b4b23","type":"switch","z":"d8ca494a.5dfb48","name":"","property":"payload","propertyType":"msg","rules":[{"t":"eq","v":"0","vt":"num"},{"t":"eq","v":"1","vt":"str"}],"checkall":"true","repair":false,"outputs":2,"x":290,"y":920,"wires":[[],["d8bc6f6b.185b5"]]},{"id":"fef5bfdf.5aeb3","type":"ui_text","z":"d8ca494a.5dfb48","group":"301b87b9.2eea08","order":5,"width":"3","height":"1","name":"","label":"電源","format":"{{msg.payload}}","layout":"row-right","x":70,"y":500,"wires":[]},{"id":"6816d312.bef04c","type":"ui_text","z":"d8ca494a.5dfb48","group":"8434656f.6057e8","order":1,"width":"2","height":"1","name":"","label":"電圧","format":"{{msg.payload}}","layout":"row-spread","x":510,"y":1300,"wires":[]},{"id":"7bef3f9b.6d76","type":"function","z":"d8ca494a.5dfb48","name":"","func":"msg.payload = msg.payload.data[1] * 0.001;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":340,"y":1400,"wires":[["ea4397d7.c690f8","5809f8f5.919de8"]]},{"id":"5809f8f5.919de8","type":"ui_chart","z":"d8ca494a.5dfb48","name":"","group":"8434656f.6057e8","order":6,"width":0,"height":0,"label":"出力電流","chartType":"line","legend":"false","xformat":"mm:ss","interpolate":"linear","nodata":"","dot":false,"ymin":"0","ymax":"","removeOlder":"5","removeOlderPoints":"","removeOlderUnit":"60","cutout":0,"useOneColor":false,"useUTC":false,"colors":["#1f77b4","#aec7e8","#ff7f0e","#2ca02c","#98df8a","#d62728","#ff9896","#9467bd","#c5b0d5"],"outputs":1,"x":520,"y":1440,"wires":[[]]},{"id":"ea4397d7.c690f8","type":"ui_text","z":"d8ca494a.5dfb48","group":"8434656f.6057e8","order":3,"width":"2","height":"1","name":"","label":"電流","format":"{{msg.payload}}","layout":"row-spread","x":510,"y":1400,"wires":[]},{"id":"338c09e0.1a5156","type":"ui_text","z":"d8ca494a.5dfb48","group":"8434656f.6057e8","order":2,"width":"1","height":"1","name":"","label":"V","format":"","layout":"row-left","x":630,"y":1300,"wires":[]},{"id":"877818ac.ae0e28","type":"ui_text","z":"d8ca494a.5dfb48","group":"8434656f.6057e8","order":4,"width":"1","height":"1","name":"","label":"A","format":"","layout":"row-left","x":630,"y":1400,"wires":[]},{"id":"6cbbbd4f.a61ee4","type":"function","z":"d8ca494a.5dfb48","name":"","func":"msg.payload =\n{\n    value:1,\n    'fc': 6,\n    'unitid': 1,\n    'address': 9 ,\n    'quantity': 2 } ;\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":380,"y":600,"wires":[["74ab8874.dac828"]]},{"id":"346c275f.9fc1e8","type":"comment","z":"d8ca494a.5dfb48","name":"スイッチオフオン繰り返し","info":"","x":130,"y":860,"wires":[]},{"id":"5e5eb5ca.24a81c","type":"comment","z":"d8ca494a.5dfb48","name":"DPS3005リモート操作@modbus","info":"","x":150,"y":20,"wires":[]},{"id":"de479eb5.15dba","type":"modbus-write","z":"d8ca494a.5dfb48","name":"","showStatusActivities":false,"showErrors":false,"unitid":"1","dataType":"HoldingRegister","adr":"0","quantity":"1","server":"cbbdbbe.41b3c48","emptyMsgOnFail":false,"keepMsgProperties":false,"x":780,"y":140,"wires":[[],["a70989e9.ed7338"]]},{"id":"cbbdbbe.41b3c48","type":"modbus-client","name":"","clienttype":"simpleser","bufferCommands":true,"stateLogEnabled":false,"queueLogEnabled":false,"tcpHost":"127.0.0.1","tcpPort":"502","tcpType":"DEFAULT","serialPort":"/dev/ttyUSB0","serialType":"RTU","serialBaudrate":"9600","serialDatabits":"8","serialStopbits":"1","serialParity":"none","serialConnectionDelay":"100","unit_id":"1","commandDelay":"1","clientTimeout":"1000","reconnectOnTimeout":true,"reconnectTimeout":"2000","parallelUnitIdsAllowed":true},{"id":"301b87b9.2eea08","type":"ui_group","name":"設定値","tab":"daa780e3.a65d","order":1,"disp":true,"width":"7","collapse":false},{"id":"8434656f.6057e8","type":"ui_group","name":"測定値","tab":"daa780e3.a65d","order":2,"disp":true,"width":"7","collapse":false},{"id":"daa780e3.a65d","type":"ui_tab","name":"DPS3005","icon":"dashboard","disabled":false,"hidden":false}]

SNS SHARE