- Vista環境にて、PL-2303を使用したUSB接続COMポートで、TEXCELLのRubyシリアル通信ライブラリを用いてデータを受信できない。その原因と対処法
- Windows環境にて、USB接続COMポートを、個体識別する
- E24系列抵抗 R1/(R1+R2)表 (抵抗分圧)
- YAH! NG_IDの整理
- deny from 64.124.85.0/24
- センサレスDCモータにセンサを付けて回す
- Eagleでロータリエンコーダ用パターンを描く
- 1/3ドット単位で動く、1ドット間隔の線
- てきとーな、DDSっぽい波形発生器
- カテゴリ情報のデータが時々変
- Yahoo!オークションWebサービスとRSSとを併用
- YAH!X試験中
- REXMLを使ってヤフオクのXMLデータを読む
- Ruby関連参考ページ
- slashdotted
* Vista環境にて、PL-2303を使用したUSB接続COMポートで、TEXCELLのRubyシリアル通信ライブラリを用いてデータを受信できない。その原因と対処法
#プログラミング #Ruby #シリアルポート
同じ接続対象機器・同じプログラムでも、レガシーな COM1 に繋いだならば受信できる。
同じ接続対象機器・同じUSB接続シリアルポート・同じプログラムで、WindowsXP 環境では受信できる。
ドライバのバグか?
ReadFileでそのバイト数読むと指示しているのだから、問題ない…と思う。問題あったとしても、常に0バイトよりはマシだ。
UC-232Aのドライバは、uc232a_windows_vista.rar (Ver._v1.0 2007-7-10)を使用。
URS232GFは、Vista標準ドライバで利用できるとの事だが、できなかった。「URS232GFは一部ロットにて使用できません。」とのこと。チップ製造元であるProlificのサイトから、PL2303_Prolific_DriverInstaller_v10518.zip (2009/7/23 v1.0.5.18 )をダウンロードし、インストール。
上記2点、チップ自体は同じか。ならば、ドライバもほぼ同一なのだろう。
http://www.texcell.co.jp/ruby/wincom/rubywincom.html
hirax.net::wincom.rbのCOM10以上対応
http://www.hirax.net/diaryweb/2009/07/29.html
Serial Communications in Win32
http://msdn.microsoft.com/en-us/library/ms810467.aspx
Windows/Vista/USB-RS232C(シリアル) - Tomocha WikiPlus
Windows Vista で動く、USB-RS232C変換ケーブル情報
http://wiki.tomocha.net/Windows_Vista_USB-RS232C.html
事象
Windows Vista の環境にて、USB接続のCOMポート(シリアルポート)を介して繋いだ機器のデータを、TEXCELLのRubyシリアル通信ライブラリ wincom.rb にて全く受信できない。teratermでは受信できる。。同じ接続対象機器・同じプログラムでも、レガシーな COM1 に繋いだならば受信できる。
同じ接続対象機器・同じUSB接続シリアルポート・同じプログラムで、WindowsXP 環境では受信できる。
原因
Vista環境にて、USB接続シリアルポートでは、ReadFileを実行した際、「読み取ったバイト数」として常にゼロが帰ってくるため。ドライバのバグか?
対処
ReadFileの「読み取ったバイト数」は使わず、ClearCommErrorを実行した際に得られた COMSTAT構造体 の「受信バッファにあるデータのバイト数」を使う。ReadFileでそのバイト数読むと指示しているのだから、問題ない…と思う。問題あったとしても、常に0バイトよりはマシだ。
def receive (中略) # rcvchar = @wcrecv.unpack("a#{irlen[0]}")[0] rcvchar = @wcrecv.unpack("a#{ilen}")[0]
補足
試したUSB接続シリアルポートアダプタは、以下2点。UC-232Aのドライバは、uc232a_windows_vista.rar (Ver._v1.0 2007-7-10)を使用。
URS232GFは、Vista標準ドライバで利用できるとの事だが、できなかった。「URS232GFは一部ロットにて使用できません。」とのこと。チップ製造元であるProlificのサイトから、PL2303_Prolific_DriverInstaller_v10518.zip (2009/7/23 v1.0.5.18 )をダウンロードし、インストール。
上記2点、チップ自体は同じか。ならば、ドライバもほぼ同一なのだろう。
あとがき
今までTEXCELLのwincom.rbをありがたく便利なブラックボックスとして使わせて頂いていたのだが、中身を見て、色々と面倒な Win32API を隠蔽してくれていた事を実感した。今回必要に迫られてベールの下を覗いたけど、Win32APIは直接触らずに済むならそうしたい代物だ。関連ページ
TEXCELL Rubyシリアル通信ライブラリhttp://www.texcell.co.jp/ruby/wincom/rubywincom.html
hirax.net::wincom.rbのCOM10以上対応
http://www.hirax.net/diaryweb/2009/07/29.html
Serial Communications in Win32
http://msdn.microsoft.com/en-us/library/ms810467.aspx
Windows/Vista/USB-RS232C(シリアル) - Tomocha WikiPlus
Windows Vista で動く、USB-RS232C変換ケーブル情報
http://wiki.tomocha.net/Windows_Vista_USB-RS232C.html
* Windows環境にて、USB接続COMポートを、個体識別する
#メモ #プログラミング #シリアルポート #Ruby
Windows環境(少なくともWindows XP)では、USB接続のRS-232C(正確にはEIA-574)アダプタのCOMポート番号は、差すUSBポートを変えるとコロコロ変わる。COM19になったりCOM6になったり…。とても困る。
一方、USB接続のその手の機器は、デバイスマネージャ上で個体識別できる。ならば当然、自作プログラムでも個体識別し、COMポート番号を自動設定できる。
WMIを介して情報を得る。Win32_SerialPortではUSB接続の情報が得られない(場合が多い?)ので、Win32_PnPEntity からCOMポートを抜き出すのが確実。
参考文献:
Kick4 BBS
USBシリアルのポート名を知る方法?
http://www.kick4.net/bbs/c-board.cgi?cmd=ntr;tree=4;id=
Win32_SerialPort Class (Windows)
http://msdn.microsoft.com/en-us/library/aa394413(VS.85).aspx
Win32_PnPDevice Class (Windows)
http://msdn.microsoft.com/en-us/library/aa394352(VS.85).aspx
Windows環境(少なくともWindows XP)では、USB接続のRS-232C(正確にはEIA-574)アダプタのCOMポート番号は、差すUSBポートを変えるとコロコロ変わる。COM19になったりCOM6になったり…。とても困る。
一方、USB接続のその手の機器は、デバイスマネージャ上で個体識別できる。ならば当然、自作プログラムでも個体識別し、COMポート番号を自動設定できる。
WMIを介して情報を得る。Win32_SerialPortではUSB接続の情報が得られない(場合が多い?)ので、Win32_PnPEntity からCOMポートを抜き出すのが確実。
require 'win32ole' def ports locator = WIN32OLE.new("WbemScripting.SWbemLocator") services = locator.ConnectServer(".","root/cimv2") ports = services.ExecQuery "Select * From Win32_SerialPort" ports.each do |port| p port.Caption p port.Description print "\n" end end def ports_pnp ps = [] locator = WIN32OLE.new("WbemScripting.SWbemLocator") services = locator.ConnectServer(".","root/cimv2") ports = services.ExecQuery "Select * From Win32_PnPEntity" ports.each do |port| if /\(COM\d+\)$/ =~ port.Caption p port.Caption p port.Description p port.Manufacturer print "\n" end end end print "Select * From Win32_SerialPort\n" ports print "Select * From Win32_PnPEntity\n" ports_pnp
ruby -Ks comports.rb Select * From Win32_SerialPort "通信ポート (COM1)" "通信ポート" "通信ポート (COM2)" "通信ポート" Select * From Win32_PnPEntity "Prolific USB-to-Serial Comm Port (COM19)" "Prolific USB-to-Serial Comm Port" "Prolific" "USB-to-Serial Comm. Port (COM6)" "USB-to-Serial Comm. Port" "Aten" "通信ポート (COM1)" "通信ポート" "(標準ポート)" "通信ポート (COM2)" "通信ポート" "(標準ポート)"
参考文献:
Kick4 BBS
USBシリアルのポート名を知る方法?
http://www.kick4.net/bbs/c-board.cgi?cmd=ntr;tree=4;id=
Win32_SerialPort Class (Windows)
http://msdn.microsoft.com/en-us/library/aa394413(VS.85).aspx
Win32_PnPDevice Class (Windows)
http://msdn.microsoft.com/en-us/library/aa394352(VS.85).aspx
* E24系列抵抗 R1/(R1+R2)表 (抵抗分圧)
* YAH! NG_IDの整理
#ヤフオク #YAH!
YAH!のNG_IDの整理を行った。
これまでに登録した各IDの総出品数をAPIにより取得し、IDと組にして出力。消えているID、もう活動していないIDをリストから消去した。
http://baku.homeunix.net/program/yahX/list_ngid.tgz
自分用のNG_IDは、最初のYAH!を作って以来引き継いでおり、総登録数が4946件だった。内、IDが残っているのが4391、1点以上出品があるのが2839だった。
NG_IDとの照合はrubyのHashを使っていて、数が増えても照合時間はさほど増えない。…が、もう消えているIDは確実に無駄だし、活動していないのも無駄だろう。
YAH!のNG_IDの整理を行った。
これまでに登録した各IDの総出品数をAPIにより取得し、IDと組にして出力。消えているID、もう活動していないIDをリストから消去した。
http://baku.homeunix.net/program/yahX/list_ngid.tgz
$ ruby -Ku list_ngid.rb ng_ID.txt | tee ngid_listed.txt $ ruby -n -a -e 'print "#{$F[0]}\n" if $F[1].to_i>0' < ngid_listed.txt > ng_id_active.txt
$ sort -n -k 2 -n -r < ngid_listed.txt > ngid_listed_sorted.txt
自分用のNG_IDは、最初のYAH!を作って以来引き継いでおり、総登録数が4946件だった。内、IDが残っているのが4391、1点以上出品があるのが2839だった。
NG_IDとの照合はrubyのHashを使っていて、数が増えても照合時間はさほど増えない。…が、もう消えているIDは確実に無駄だし、活動していないのも無駄だろう。
* deny from 64.124.85.0/24
#Web
再び、BecomeBotに検索履歴をかき回されたので、.htaccessにて排除することにした。
robots.txt BecomeBot締め出し
http://baku.homeunix.net/WiKi/rnx/index.rb?1138996756.txt
にてのけ者にしたはずなのだが、BecomeJPBotは別物というわけか。え゛ー。
ちなみに、robots.txtは最初にちゃんと読んでる。
20秒に一度のアクセスだったり、UAの項に載っている http://www.become.co.jp/site_owners.htmlは「お客様が指定されたページは見つかりませんでした。」だったり、かなり感じ悪い。
(ちなみに、正しくは、http://www.become.co.jp/site_owner.html だそうだ。その辺の食い違いも感じ悪いぞ)
また、他の多くのクローラの挙動と違ってリファラを送る点で、RandomeNoteの敵。
↓はた迷惑なアクセスの記録
(ReadMore...)
再び、BecomeBotに検索履歴をかき回されたので、.htaccessにて排除することにした。
robots.txt BecomeBot締め出し
http://baku.homeunix.net/WiKi/rnx/index.rb?1138996756.txt
にてのけ者にしたはずなのだが、BecomeJPBotは別物というわけか。え゛ー。
ちなみに、robots.txtは最初にちゃんと読んでる。
20秒に一度のアクセスだったり、UAの項に載っている http://www.become.co.jp/site_owners.htmlは「お客様が指定されたページは見つかりませんでした。」だったり、かなり感じ悪い。
(ちなみに、正しくは、http://www.become.co.jp/site_owner.html だそうだ。その辺の食い違いも感じ悪いぞ)
また、他の多くのクローラの挙動と違ってリファラを送る点で、RandomeNoteの敵。
↓はた迷惑なアクセスの記録
(ReadMore...)
* センサレスDCモータにセンサを付けて回す
#電子工作 #途中経過
HDDに用いられるセンサレスのDCブラシレスモータは、部品として取りだしてもそれを回すのはなかなか大変である。
…が、センサを付けてしまえば、複雑な位置検知回路は不要である。
というわけで、
・反射型フォトセンサ
・通電パターンを印刷した円盤
・トランジスタ
を組み合わせ、HDD用のセンサレスDCモータを回してみた。
HDDのモータは身近にあるモータの中では群を抜いて高精度な物なので、これを単体でいじれるとメカトロ野郎(or乙女)にとって面白いおもちゃになるだろう。
参考文献
トランジスタ技術 2000年2月号「特集 実験で学ぶモータ制御回路の設計」
ソリトン 2006年8月 モータの基礎と実用制御回路設計 モータの動作原理と特性
http://www.japanservo.jp/products/pdf/soliton34.pdf
日本サーボ株式会社
(ReadMore...)
HDDに用いられるセンサレスのDCブラシレスモータは、部品として取りだしてもそれを回すのはなかなか大変である。
…が、センサを付けてしまえば、複雑な位置検知回路は不要である。
というわけで、
・反射型フォトセンサ
・通電パターンを印刷した円盤
・トランジスタ
を組み合わせ、HDD用のセンサレスDCモータを回してみた。
HDDのモータは身近にあるモータの中では群を抜いて高精度な物なので、これを単体でいじれるとメカトロ野郎(or乙女)にとって面白いおもちゃになるだろう。
参考文献
トランジスタ技術 2000年2月号「特集 実験で学ぶモータ制御回路の設計」
ソリトン 2006年8月 モータの基礎と実用制御回路設計 モータの動作原理と特性
http://www.japanservo.jp/products/pdf/soliton34.pdf
日本サーボ株式会社
(ReadMore...)
* Eagleでロータリエンコーダ用パターンを描く
* 1/3ドット単位で動く、1ドット間隔の線
* てきとーな、DDSっぽい波形発生器
* カテゴリ情報のデータが時々変
ヘッダは200OKを返してくるのに、中身が"1\r\n"だけだったり、<childCategory>内の<categoryName>だけが抜けてたりする。
検査して変だったらもう一回データを読み直すか?
#Ruby #REXML #ヤフオク #YAH! #途中経過
検査して変だったらもう一回データを読み直すか?
#Ruby #REXML #ヤフオク #YAH! #途中経過
* Yahoo!オークションWebサービスとRSSとを併用
これまでは、役に立たないと思っていたヤフオクのRSSは結構使えるかもしれん。
特に、Yahoo!オークションWebサービスのAPIでは検索できないけど、RSSの方なら検索結果が得られるのはありがたい。
http://search3.auctions.yahoo.co.jp/search_rss?p=mobilegear&auccat=23336&alocale=0jp&acc=jp
#Ruby #REXML #ヤフオク #YAH! #途中経過
特に、Yahoo!オークションWebサービスのAPIでは検索できないけど、RSSの方なら検索結果が得られるのはありがたい。
http://search3.auctions.yahoo.co.jp/search_rss?p=mobilegear&auccat=23336&alocale=0jp&acc=jp
#Ruby #REXML #ヤフオク #YAH! #途中経過
* YAH!X試験中
Yahoo!オークションWebサービスにより提供されるXMLデータを使うYahoo!AuctionHelperを作成中。
↓とりあえずの実験バージョン
http://baku.homeunix.net/program/yahX/yahX_test01.rb?category=2084045752&pic=true
categoryを書き換えれば他のカテゴリを見れる。
pic=trueで画像表示。それ以外で非表示。
YAH!の特徴である各種NG機能は、とりあえず「NGキャラクタ」のみ実装。
「次の25件」をいちいちクリックしなくてもいいので、現状でもとりあえずそこそこ役立つと思う。
YAH! Ver.3としようかと思っていたけど、Yahoo!オークションWebサービスでは今のところキーワード検索ができないっぽいなどの理由で、Ver.Xとして別物としての扱い。
#Ruby #REXML #ヤフオク #YAH! #途中経過
↓とりあえずの実験バージョン
http://baku.homeunix.net/program/yahX/yahX_test01.rb?category=2084045752&pic=true
categoryを書き換えれば他のカテゴリを見れる。
pic=trueで画像表示。それ以外で非表示。
YAH!の特徴である各種NG機能は、とりあえず「NGキャラクタ」のみ実装。
「次の25件」をいちいちクリックしなくてもいいので、現状でもとりあえずそこそこ役立つと思う。
YAH! Ver.3としようかと思っていたけど、Yahoo!オークションWebサービスでは今のところキーワード検索ができないっぽいなどの理由で、Ver.Xとして別物としての扱い。
#Ruby #REXML #ヤフオク #YAH! #途中経過
* REXMLを使ってヤフオクのXMLデータを読む
楽だ…。機械で読みやすいデータが提供されてるというのはこんなにもありがたい物だったとは。
また、便利なREXMLに感謝。
Yahoo!デベロッパーネットワーク - オークションWebサービス
http://developer.yahoo.co.jp/auctions/
REXML - Home
http://www.germane-software.com/software/rexml/index.html
私家版REXML APIリファレンス
http://www.cozmixng.org/~kou/ruby/rexml/reference
REXML Tutorial - Home
http://www.germane-software.com/software/rexml/docs/tutorial.html
REXML であそぶ
http://www.namikilab.tuat.ac.jp/~sasada/prog/rexml.html
#Ruby #REXML #ヤフオク #YAH! #途中経過
また、便利なREXMLに感謝。
#!ruby -Ku require 'jcode' require 'nkf' require "rexml/document" file = File.new( "y.xml" ) y = REXML::Document.new file y.root.each_element('item') do |item| p item.elements['auctionID'].text p item.elements['title'].text item.each_element('seller') do |s_item| p s_item.elements['itemlist'].text p s_item.elements['rating'].text end p item.elements['url'].text p item.elements['img'].text p item.elements['price'].text p item.elements['bids'].text p item.elements['endtime'].text end
Yahoo!デベロッパーネットワーク - オークションWebサービス
http://developer.yahoo.co.jp/auctions/
REXML - Home
http://www.germane-software.com/software/rexml/index.html
私家版REXML APIリファレンス
http://www.cozmixng.org/~kou/ruby/rexml/reference
REXML Tutorial - Home
http://www.germane-software.com/software/rexml/docs/tutorial.html
REXML であそぶ
http://www.namikilab.tuat.ac.jp/~sasada/prog/rexml.html
#Ruby #REXML #ヤフオク #YAH! #途中経過
* Ruby関連参考ページ
Rubyで画像ファイルのサイズ取得:生活活用形−ちょよて・ちゃよて
http://tociyuki.cool.ne.jp/clife/comp/rubyimagesize.html
Ruby/PureImage
http://cappuccino.jp/keisuken/ruby/pureimage/
backup_mixi
http://d.hatena.ne.jp/kusigahama/19700831#pl
Exerb Project
http://exerb.sourceforge.jp/
backup_mixiはexe化されたのが用意されてる。
Ruby環境を用意していない大多数の人にとっては便利だな。
用意してても便利。
RAA - http-access2
http://raa.ruby-lang.org/list.rhtml?name=http-access2
backup_mixiで使われているようだけど、やっぱ標準のhttp.rbより便利なのかな?
#プログラミング #Ruby
* slashdotted
スラッシュドットジャパンへの書き込みで、参考資料としてbaku.homeunix.netに写真をアップロードしてリンクを張ったら、(普段に比べると)ものすごい量のアクセスがあった。
$ head -1 /var/log/apache/access.log xxx.xxx.xxx.xxx - - [15/Jan/2006:06:28:02 +0900] (略) $ cat /var/log/apache/access.log | grep slash | cat -n | tail -1 822 xxx.xxx.xxx.xxx - - [16/Jan/2006:23:15:26 +0900] "GET /loft/CADAM_FKbd.jpg HTTP/1.1" 200 55719 "http://slashdot.jp/articles/06/01/15/0750208.shtml" $ ruby -e "p (Time.local(2006,1,16,23,15,26).to_i-Time.local(2006,1,15,6,28,2). to_i)/822" 178
というわけで、3分に1アクセスぐらい。
たいして大きくもない静止画一枚だからいいものの、メガバイト単位の動画データとかだと大変なことになりそうだ。
また、コメントだからまだいいものの、タレコミ本文からのリンクだとアクセス量は半端じゃないだろう。
スラド/jpではslashdottedは発生しないという人もいるけど、弱小回線の弱小サーバなら十分にあり得るだろうな。
#Web #雑記 #2006年1月