- PR -

VB.NET->(USB)->FOMAを操作したい

投稿者投稿内容
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-12-11 13:41
引用:

まっきまきさんの書き込み (2006-12-11 13:13) より:

VBのExpressEditionをインストールして、ボタンの中に以下のコードを書きました。
これで操作はできたのですが、2回連続でボタンを押すと、その後動く気配がありません。


どういった意味での 2 連続かに依りますが、"2 連続で" がまずいのではないでしょうか?
それと、"動く気配" の "動く" が、何を期待しているのかが良くわからないです。

引用:

何か、メモリを開放するだとか特別な手続きをしないといけないのでしょうか?


こういった通信では、メモリというより Stream でしょう。

Stream の破棄は Close メソッドでしょうけど、Using で括られているので、
Dispose メソッドも、Raise されているはずですね。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
まっきまき
会議室デビュー日: 2006/10/27
投稿数: 11
投稿日時: 2006-12-11 14:50
こんにちは
操作1:VBのボタンを1回押します
結果1:FOMA端末が操作されて、電話をかけはじめます
(1秒以上待って)
操作2:VBのボタンを1回押します
結果2:FOMA端末が操作されて、電話をかけはじめます
(1秒以上待って)
操作3:VBのボタンを1回押します
結果3:FOMAがまったく反応しない

以後はFOMAにつながってるUSBケーブルを抜き差ししても、パソコンを再起動しても、FOMAを再起動してもFOMAがまったく反応しません。ただ、何日かして、VBを起動して
ボタンを押すと上記のように、2回だけ動いて、以後はFOMAが反応しなくなります。
まっきまき
会議室デビュー日: 2006/10/27
投稿数: 11
投稿日時: 2006-12-11 20:10
1つ発見したのですが、電話番号を変えると2回は発信する事ができるようです。
プログラムの中にもプリント文を入れると、プログラムの中に入っているのは
わかりました。

「FOMA側で2回間違い電話をかけると、以後その番号へは発信しない」という
仕様でもあるのでしょうか?
rvmx
大ベテラン
会議室デビュー日: 2002/09/26
投稿数: 184
お住まい・勤務地: 愛媛県
投稿日時: 2006-12-11 21:43
今日は

終了時にATHコマンドを送出するとどうですか?
Formaではないですが以前携帯の制御はしたことが有りますが問題なく出来ました。
サンプルにのっているソフトは非常に荒っぽくて正常に動作するか分かりません(ダイヤルのみしATHコマンドも出ないで終了)
又、複数コマンドを出す時にはコマンドを出した後OKかERRORのアンサーを見て次のコマンドへ進む必要が有ると思います。

ぽぴ王子
ぬし
会議室デビュー日: 2006/03/24
投稿数: 475
お住まい・勤務地: お住まい:城・勤務地:城
投稿日時: 2006-12-12 00:10
引用:

まっきまきさんの書き込み (2006-12-11 20:10) より:

1つ発見したのですが、電話番号を変えると2回は発信する事ができるようです。
プログラムの中にもプリント文を入れると、プログラムの中に入っているのは
わかりました。

「FOMA側で2回間違い電話をかけると、以後その番号へは発信しない」という
仕様でもあるのでしょうか?


FOMAはモデムとして振舞っている(と思われる)ので、発信規制に
ひっかかっているのではないでしょうか。
今は規制は緩和されているようですが、それでも同じ番号への連続
した再発信は規制されていると思います。
_________________
ぽぴ王子@わんくま同盟
ぽぴ王子の人生プログラミング中 / ぽぴンち。
まっきまき
会議室デビュー日: 2006/10/27
投稿数: 11
投稿日時: 2006-12-13 13:58
こんにちは
ATHやATZのコマンドを入れてみたのですが、動作は変わりませんでした。

rvmxさんがおっしゃられてる「コマンド送信後のステータス」を取得したい
のですが、どのようにやるかヒントをいただけないでしょうか?

dim ans as integer
ans=com5.Write("ATDT 555-0100" & vbCrLf)
print ans

という文ではエラーとなりできませんでした。。。
rvmx
大ベテラン
会議室デビュー日: 2002/09/26
投稿数: 184
お住まい・勤務地: 愛媛県
投稿日時: 2006-12-13 15:29
今日は

ATHやATZの送出は、送受間でコミニューケーションが取れた状態で無いと無理かも知れません。
com5.Write("ATDT 555-0100" & vbCrLf) は戻り値はなかったと思います。

下記に非同期で受信概要を示します(C#ですが)。

System.IO.Ports.SerialPort com5 = new System.IO.Ports.SerialPort();
com5.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(this.com5_DataReceived);
......
com5.open();
......

private void com5_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
byte[] bts=new byte[1024];
int rbyte=com.Read(bts, 0, bts.Length);
まっきまき
会議室デビュー日: 2006/10/27
投稿数: 11
投稿日時: 2006-12-21 17:20
こんにちは、
C#は難しくちょっとわかりませんでした。
以下のページをみつけたので、実行してみたのですが、
私が欲しい結果ではありませんでした。要するに、実際に電話を発信して、
その電話番号が生きていたのかどうか?はこの結果からはわかりませんでした。
実際の動作結果ステータスはどうしたら取得できるのでしょうか・・・?

===参考===
http://msdn2.microsoft.com/ja-jp/library/7ya7y41k(VS.80).aspx

===ソース===
Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click
Using com5 As IO.Ports.SerialPort = _
My.Computer.Ports.OpenSerialPort("COM5", 4800)
com5.DtrEnable = True

Dim i As Integer
Dim returnStr As String = ""

For i = 1 To 4
com5.Write("ATDT 03-0000-31" & i & vbCrLf)
Dim Incoming As String = com5.ReadLine()
MessageBox.Show("今は" & i & "回目でコマンドは" & Incoming & "です")
System.Threading.Thread.Sleep(10000)
Next i
End Using
End Sub

===結果===
(電話をかけた)
今は1回目でコマンドはATDT 03-XXXです

(電話をかけた)
今は2回目でコマンドはOKです

(電話をかけた)
今は3回目でコマンドはATDT 03−XXXです

(電話をかけた)
今は4回目でコマンドはOKです

スキルアップ/キャリアアップ(JOB@IT)