Avatar billede fiskerendk Nybegynder
06. januar 2012 - 10:49 Der er 3 kommentarer og
1 løsning

ASP.NET Serial Kommunikation

Hej er der nogen der har en ide til hvordan man kan lave en lytte funktion i ASP.NET.

Jeg har pt lavet en side som kan sende en RS232 kode (serial kode) og vente på svar fra samme boks.

Dette virker perfekt.

Mit problem er at jeg egentlig gerne vil have koden til at loope sig selv, sådan at programmet hele tiden looper efter om der bliver skrevet noget til den på serial porten. Sådan at jeg kan få websiden til at opdatere når der kommer svar og hvad svar der kommer.

Nedenfor er det jeg har lavet som virker til at kunne sende en kode og derefter modtage et svar.

Envidere har jeg her et link til et script jeg har lavet i VBS. Som gør nogenlunde det jeg gerne ville have i ASP.NET.
http://download.phisk.net/vbs.txt

<code>
<%@ Page Language="VB" Debug="True" %>
<%@ Import Namespace = "System" %>
<%@ Import Namespace = "System.IO.Ports" %>

<script runat="server">

Dim WithEvents serialPort As New IO.Ports.SerialPort

Private Sub Page_Load()

  With serialPort
  .PortName = "COM3"
  .BaudRate = "19200"
  .Parity =  IO.Ports.Parity.None
  .DataBits = "8"
  .StopBits = IO.Ports.StopBits.One
  End With

End Sub


Private Sub OpenPort()

  If Not (serialPort.IsOpen = True) Then

  serialPort.Open()

  End If

End Sub


Private Sub ClosePort()

  If Not (serialPort.IsOpen = False) Then

  serialPort.Close()

  End If

End Sub


Private Sub WriteCommand(ByVal sender As System.Object, ByVal e As System.EventArgs)

  Dim Button As Button = CType(sender, Button)
  Dim strButton As String = Button.ID

  Dim strText As String
  Dim strCommand As String

  Select Case strButton
  Case "Button0"
    strText = "Power Off"
    strCommand = "<0100232132000--->"

  Case "Button1"
    strText = "Vol Down"
    strCommand = "<0100232132001--->"

  Case "Button2"
    strText = "Vol Up"
    strCommand = "<0100232132002--->"

  Case "Button3"
    strText = "Mute"
    strCommand = "<0100232132003--->"

  End Select

  labelText.Text = strText
  labelCommand.Text = strCommand

  OpenPort()

  serialPort.Write(strCommand & vbCr)

  ReadCommand()

End Sub


Private Sub ReadCommand()

  Dim strRespons As String = serialPort.ReadTo(">")
  labelRespons.Text = strRespons & ">"

  ClosePort()

End Sub

</script>


<html>
<body>

  <form runat="server">

  <asp:Button id="Button0" OnClick="WriteCommand" Text="Power Off" runat="server" />
  <asp:Button id="Button1" OnClick="WriteCommand" Text="Vol Down" runat="server" />
  <asp:Button id="Button2" OnClick="WriteCommand" Text="Vol Up" runat="server" />
  <asp:Button id="Button3" OnClick="WriteCommand" Text="Mute" runat="server" />

  <br /><br />

  <asp:Label id="labelText" runat="server" /><br />
  <asp:Label id="labelCommand" runat="server" />

  <br /><br />

  <asp:Label id="labelRespons" runat="server" /><br />

  </form>

</body>
</html>
</code>
Avatar billede platik Nybegynder
06. januar 2012 - 12:48 #1
Msdn har et fint eksempel som du burde kunne bruge dele af.
http://msdn.microsoft.com/en-us/library/system.io.ports.serialport.aspx#Y3369

Hvis jeg har forstået dit ønske korrekt skal du nok have lavet en tråd som kun forsørger at læse indtil den afbrydes.

I følge microsoft egen dokumentation Stopper tråden ved denne: serialPort.ReadTo(">") indtil der er noget at læse. Derfor der nok skal en tråd mere på.

Skal ikke kunne udelukke at der er en bedre fremgangs måde.
Avatar billede arne_v Ekspert
07. januar 2012 - 02:27 #2
Det duer ikke med long blocking kode i en ASP.NET side.

Du boer have noget permanent koerende (windows server eller simpel console app) som laeser fra seriel port og ASP.NET siderne connecter saa til det program og spoerger om der er noget.
Avatar billede fiskerendk Nybegynder
27. juni 2012 - 09:19 #3
Jeg har lavet en application istedet til at styre SerialPorten også ASP.NET til at snakke med det program.
Avatar billede fiskerendk Nybegynder
27. juni 2012 - 09:19 #4
Svaret.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester