0

コーディングにいくつかの変更を加えてテストしました。まだ完全に機能していないため、ここで何らかのガイダンスを提供したいと考えています。

Imports System
Imports System.Data
Imports System.Configuration
Imports System.Collections
Imports System.Web
Imports System.Web.Security
Imports System.Web.UI
Imports System.Web.UI.WebControls
Imports System.Web.UI.WebControls.WebParts
Imports System.Web.UI.HtmlControls
Imports System.IO.Ports

Partial Class Main
    Inherits System.Web.UI.Page

Protected Sub form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles form1.Load

    Dim Serialport7 As New IO.Ports.SerialPort

    With Serialport7
        .PortName = "COM7"
        .BaudRate = 9600
        .Parity = Parity.None
        .DataBits = 8
        .StopBits = StopBits.One
    End With

    Try
        Serialport7.Open()
    Catch ex As Exception
        MsgBox(ex.ToString)
    End Try


    Dim ReceivedData As String

    ReceivedData = Serialport7.ReadLine()

    If ReceivedData.Substring(0, 1) = "T" Then

        TextBox1.Text = ReceivedData.Remove(0, 1)

    ElseIf ReceivedData.Substring(0, 1) = "H" Then

        TextBox2.Text = ReceivedData.Remove(0, 1)

    End If

    TextBox3.Text = System.DateTime.Now

    Serialport7.Close()

End Sub

End Class

私が遭遇したエラー:

  • TextBox2 には読みが表示されず、TextBox1 のみに読みが表示されます。

  • Web フォームが更新されないため、測定値が更新されません。Web フォームを自動更新する方法はありますか?

すべてのガイダンスに感謝します。ありがとう。

4

1 に答える 1

0

ページを更新する簡単な解決策があります。サーバーはクライアントの Web ブラウザーを制御できないため、新しいデータが利用可能になるたびに更新されません (そうすべきではありません。不可能ではありませんが、複雑で安全ではありません)。

そこでできることは、ページを定期的に更新する JavaScript コードを追加することです。

最善の方法は、シリアル ポート データを読み取り、データをクライアント ページに送り返す Web サービスに ajax 呼び出しを行う JavaScript 関数を追加することです。そこで、テキストボックスの値を更新できます。

ページを更新するには、次の JavaScript コードを使用できます。window.location.reload() 定期的に更新する必要がある場合は、この SO の質問をご覧ください。

WebフォームにWebサービスを追加して定期的に呼び出すには、次のリンクを参照してください: http://www.asp.net/web-forms/tutorials/aspnet-ajax/understanding-asp-net-ajax-web-services

http://api.jquery.com/

ページを定期的に更新するのではなく、新しいデータが利用可能になったときに値を更新するだけの場合は、websocketsを見てください(私が回答を始めたときに忘れてしまいました)。

websockets に関する編集 [また、メソッドは、さまざまなスレッドで、さまざまなユーザーによって呼び出される可能性があることを考慮する必要があります。そのため、シリアルポートの読み取りをスレッドセーフにし、結果をどこかに保存して、異なるデータを異なるユーザーに送信しないようにする必要があります。] --

あなたのページを更新するユーザーAがいて、ユーザーBがそれを更新するイメージ。ユーザー A がページを呼び出したときに、シリアル ポートから既にいくつかのデータを読み取っているため、ユーザー A とユーザー B には異なるデータが表示されます。

データが1, 2, 3, 4

現在の実装では、ユーザー A に表示され1、ユーザー B に表示されます2

于 2013-03-30T16:16:50.823 に答える