Toon posts:

[visual basic/asp] com-poort bedienen via internet

Pagina: 1
Acties:

Verwijderd

Topicstarter
com-poort server aanspreken via t internet!

Als Newbie is t me nu mogelijk mijn 220 Volt lamp-schakeling via de com-poort, wat soldeerwerk en een stukje VB
programmatuur aan te spreken.

Na een eerdere topic hier op GOT is het me nu duidelijk dat ik er een activex.dll van moet maken.... wil ik deze schakeling
via t internet aanspreken (..dus dat ik vanaf een andere pc zeg maar de com-poort van de server aanspreek)

nu gebruik ik de volgende code's


[in de class]

Private Sub Form_Load()
i = OPENCOM("COM2,1200,N,8,1")
If i = 0 Then MsgBox ("RS 232 poort niet gevonden.")
End Sub

Private Sub Command1_Click()
DTR 1
End Sub

Private Sub Command2_Click()
DTR 0
End Sub

[MODULE]

Declare Function OPENCOM Lib "Port" (ByVal A$) As Integer
Declare Sub CLOSECOM Lib "Port" ()
Declare Sub DTR Lib "Port" (ByVal b%)
Declare Sub RTS Lib "Port" (ByVal b%)
Declare Function CTS Lib "Port" () As Integer
Declare Function DSR Lib "Port" () As Integer
Declare Function RI Lib "Port" () As Integer
Declare Function DCD Lib "Port" () As Integer

daarnaast heb ik nog een port.dll die ervoor zorgt dat de poort aanspreekbaar is



De vraag is nu.... kan ik deze code's op exact dezelfde manier opnemen in een ACTIVEX.dll ??
de sub_command1_click waarschijnlijk niet, want die zal die niet herkennen

maar in ieder geval dat ik de desbetreffende DLL die ik hier creeer kan aanspreken via een ASP pagina, wat mij betreft maak
ik meerdere DLL waarbij de een voor DTR de waarde 0 heeft en de ander DTR waarde 1 zodat ik op deze manier de
schakeling bedien! Of is dit omslachtig?

En als laatst hoe roep ik uiteindelijk de gecreeerde DLL aan in een ASP pagina? aanmelden via component services snap ik al!
Het heeft iets te doen met <% Server.CreateObject("compoort.server") %>
Maar zet ik dit in de pagina, dan krijg ik een foutmelding.

Verwijderd

Als je gewoon in V Bzegt dat je een ActiveX component wil maken bij het aanmaken van een nieuw project, dan krijg je gewoon een form te zien waar je controls kan op slepen. Als je dan dubbel op een command button klikt, kan je gewoon dezelfde code gebruiken :).

Je haalt trouwens 2 dingen door elkaar: ASP != ActiveX. Het is zelfs iets geheel anders (serverside vs. clientside)

Verwijderd

Topicstarter
ja ik weet je dat je in een activex_control commands in de form kan slepen.... dit is me ook al gelukt om via activex_control de schakeling te bedienen
Dit is inder daad client side!!

nu zij een andere tweaker tegen me "je moet met activex.DLL werken,... want dat is serverside" zo kun je van afstand de com-poort op de server bedienen !!

Verwijderd

Op zondag 28 april 2002 11:07 schreef KoenM het volgende:
Je haalt trouwens 2 dingen door elkaar: ASP != ActiveX. Het is zelfs iets geheel anders (serverside vs. clientside)
't idee is dat ie een activeX dll maakt (zonder gui dus , en dus zonder drag/drop rommel) z'n asp pagine dit object aanmaakt en daarna z'n lampen aan stuurt, alles geheel serverside dus...

Verwijderd

Topicstarter
klopt Yarvieh,
de GUI komt later wel, de essentie is t bedienen en dit via een ASP pagina

Verwijderd

De asp pagina word je gui.. maargoed je uit eindelijke probleem snap ik nog niet zo? je krijgt je activeX dll niet gemaakt? niet aangesproken in asp? of wat?!

Verwijderd

Sorry, ik las het verkeerd |:(.

Je kan je dll trouwens ook gewoon met regsvr32.exe registreren...

Dat met Server.CreateObject klopt wel, maar je moet de goede string meegeven, waarschijnlijk gaat het daar fout. Wat ik altijd doe, is een nieuw project aanmaken in VB. Daar een referentie naar je dll toevoegen (dan is ie meteen regeristreerd). Vervolgens tik ik 'Dim a As' in en laat autocomplete het werk doen. Als je project Test heet en je class clsTest, zal VB zeggen dat Test.clsTest bestaat. Als VB dat idd doet, is dat ook de string die je moet hebben.

Is dit wat je wilt :?.

Verwijderd

Topicstarter
ja! ik begin te snappen wat je bedoelt!
alleen is dit allemaal nog nieuw voor mij, begin te snappen tijdens t leren, dus is wat je noemt weliswaar te beredeneren,... maar hoe ik dit uiteindelijk in code voor mijn PC-tje duidelijk maak.....??

ik snap dat GOT geen online helpdesk is waar mensen voor mij code voorkauwen... maar zou je iets speciefiek-er kunnen zijn?

:)

Verwijderd

In vb is je prog id helemaal niet zo lastig hoor? Als je je project Frats genoemt hebt en je class Whoha word je progid "Frats.Whoha" eazy as 123? :?

Verwijderd

Op zondag 28 april 2002 11:39 schreef senjee het volgende:
ik snap dat GOT geen online helpdesk is waar mensen voor mij code voorkauwen... maar zou je iets speciefiek-er kunnen zijn?
't werkt hier heel simpel, algemene vraag -> algemeen antwoord, specifieke vraag -> specifiek antwoord, wij kunnen niet raden wat jouw probleem precies is dat zal je zelf op een of andere manier duidelijk aan ons zien te maken..

  • OxiMoron
  • Registratie: November 2001
  • Laatst online: 27-06 10:54
Wat je ook kun doen is om het aansturings programmatje een socket te geven.

Met PHP kun je deze dan openen en "commando's" naar je programma sturen die dan de lamp aan of uit doet.

Op school heb ik een vak Hartware Interface Technieken waar we ons met zulke dingen bezig houden :)

Albert Einstein: A question that sometime drives me hazy: Am I or are the others crazy?


Verwijderd

Op zondag 28 april 2002 13:50 schreef OxiMoron het volgende:
Op school heb ik een vak Hartware Interface Technieken waar we ons met zulke dingen bezig houden :)
Dan heb je toch echt niet opgelet... als je zelfs de vaknaam verkeerd schrijft :+.

Verwijderd

senjee . .. coden is niet een kwestie van geluk ofzo. . maar een kwestie van kennis. .. als ik jou was zou ik bovenaan de help beginnen . .. leer eerst goed met Active-spul omgaan enzo . .dan heb je dit soort "simpele" vragen ook niet meer |:(

Verwijderd

Topicstarter
ok dan Yarvieh >> specifiek bedoel ik t volgende

#1
hoe maak ik van deze code een DLL file die als het ware bij opstarten / aanroepen het DTR signaal op 1 zet,... en dit omgekeerd >>
hoe maak ik een andere DLL die bij opstarten / aanroepen het DTR signaal op 0 zet?

#2
met welke code integreer ik uiteindelijk dit programmeer werk in een ASP pagina??
Stel dat "Lamp.Server" hetgeen zal zijn dat het signaal van DTR op 1zal zetten, dan zal
<%
Server.CreateObject("Lamp.Server")
%>
zeer waarschijnlijk niet voldoende zijn om datgeen op te starten ?!

ps: registreren via "component services" is me bekend!

Verwijderd

Op zondag 28 april 2002 21:51 schreef senjee het volgende:
ok dan Yarvieh >> specifiek bedoel ik t volgende
Heel goed, niet mijn mailbox spammen met dingen die ook best op got kunnen :)
#1
hoe maak ik van deze code een DLL file die als het ware bij opstarten / aanroepen het DTR signaal op 1 zet,... en dit omgekeerd >>
hoe maak ik een andere DLL die bij opstarten / aanroepen het DTR signaal op 0 zet?
Je maakt 'n activeX dll met bv 1 sub
code:
1
2
3
Public Sub SetDtr(ByVal bDtr As Byte)
   Call Dtr(bDtr)
End Sub
#2
met welke code integreer ik uiteindelijk dit programmeer werk in een ASP pagina??
Stel dat "Lamp.Server" hetgeen zal zijn dat het signaal van DTR op 1zal zetten, dan zal
<%
Server.CreateObject("Lamp.Server")
%>
zeer waarschijnlijk niet voldoende zijn om datgeen op te starten ?!
idd het zal iets moeten worden van
lampaan.asp
code:
1
2
3
4
5
<%dim ObjLamp
  set ObjLamp = Server.CreateObject("Lamp.Server")
  call ObjLamp.SetDtr(1)
  set ObjLamp = nothing
%>

Lampuit laat zich raden natuurlijk dan ;)

Verwijderd

Topicstarter
ben al een heel stuk verder, krijg nu alleen een error in de ASP pagina die ik laad via [url="http://localhost/"]http://localhost/[/url] etc...

Lamp2 error '800a0035'

File not found: Port

/http/loco/test.asp, line 9


>> Waar Port hier waarschijnlijk de Port.dll die ervoor zorgt de er gecommuniceerd kan worden met de com....
Deze Port.dll staat tevens in de map waar de rest van mijn files ook staan!

moet ik in DIT geval deze DLL ook registreren? Als ik een standard.exe maak is het plaatsen van deze Port.dll in de map waar de andere files op staan voldoende om mijn lamp te laten branden

Verwijderd

Op maandag 29 april 2002 00:04 schreef senjee het volgende:
Lamp2 error '800a0035'
File not found: Port
/http/loco/test.asp, line 9
Wat staat er op line 9 dan!? :?

die port.dll in je system32 map mikken wil wellicht wel helpen?

Verwijderd

Topicstarter
port.dll in system 32 levert brandende led-jes op, op mijn "gesoldeerde schakeling" .... en geen foutmeldingen meer in de pagina...

iedere keer als ik de pagina refresh, dan knipperen wel beide led > zowel DTR (gedefinieerd in de code) en RTS... dit zal wel te maken hebben met de OPENCOM of Port.dll....
zal nog even uitzoeken hoe ik dit goed krijg / afzonderlijk van elkaar

maar.... vanaf een andere pc, via t internet gebeurt er nog nix bij t laden / refresh van de pagina

dit zal wel te maken hebben met security settings in / van IIS ;?

Verwijderd

Topicstarter
nou ben ik een grote stap verder, via ASP > internet kan ik mijn ledjes op de server laten branden,... maar na vele testen kom ik er niet hoe ip speciefiek kanalen kan bedienen

ik heb de volgende code in de ASP pagina

<%dim ObjLamp2
set ObjLamp2 = Server.CreateObject("Lamp2.Server2")
call ObjLamp2.SetRts(1)
set ObjLamp2 = nothing
%>

verander ik de regel <call Objlamp2.SetRts(1)> of voeg ik die regel toe in SetDtr(1) of SetDtr(0) dan brand mijn DTR signaal, het maakt niet uit of er 1 of o staat

verwijder ik de regel waar mijn RTS signaal geregeld wordt, dan blijft toch het RTS signaal branden

M.A.W. ik kan het signaal niet regelen..........

vraag 1
hoe krijg ik voor elkaar dat het signaal blijft branden als een bepaalde ASP pagina is geladen, en dus niet slecht een halve seconde als e pagina wordt geladen

vraag2
hoe regel ik het RTS signaal?


[ps: dit is de code in de activex.dll]

Public Sub SetDTR(ByVal bDtr As Byte)
Call DTR(bDtr)
End Sub

Public Sub SetRts(ByVal bRts As Byte)
Call RTS(bRts)
End Sub
Private Sub Class_Initialize()
i = OPENCOM("COM2,1200,N,8,1")
If i = 0 Then MsgBox ("RS 232 poort niet gevonden.")
End Sub

[en de module]

Declare Function OPENCOM Lib "Port" (ByVal A$) As Integer
Declare Sub CLOSECOM Lib "Port" ()
Declare Sub DTR Lib "Port" (ByVal b%)
Declare Sub RTS Lib "Port" (ByVal b%)
Declare Function CTS Lib "Port" () As Integer
Declare Function DSR Lib "Port" () As Integer
Declare Function RI Lib "Port" () As Integer
Declare Function DCD Lib "Port" () As Integer

Verwijderd

In je ASP-pagina wordt je COM-poort geopend met de Class_Initialize. Als echter de ASP-pagina 'klaar' is, dan wordt deze (denk ik) ook weer geclosed en de COM-poort 'gereset'.
Je control/component is alleen aktief als de ASP-pagina verwerkt wordt...

Verwijderd

Topicstarter
iemand een idee hoe ik dan de asp zover kan krijgen dat hij de port open oudt?? of moet ik dat toch in VB al doen??

En dan heb ik nog die RTS die t blijkbaar niet nodig vind om gewoon te luisteren naar de commando's

Verwijderd

Knikker je component in je application object tijdens je application_start? Niet de resource vriendelijkste manier maarja als het toch maar is om het licht thuis aan en uit te doen kan je die paar k best missen lijkt me.

Verwijderd

Topicstarter
dim Objlamp2

Public Sub application_start()
Call Objlamp2.SetDtr(1)
End Sub

hier wordt niet op gereageerd
in de module en class heb ik alles wat met RTS te maken heeft verwijderd... toch blijft RTS "getriggerd" worden

Verwijderd

Topicstarter
het is me nu gelukt om de RTS en de DTR afzonderlijk te bedienen via de ASP-site. Als ik klik om de RTS (of DTR) aan te zetten gaat hij een fractie van een seconde aan, daarna gaat ie weer uit. Dit gebeurt als je de muis loslaat na het klikken (mouseUp). Hij stuurt dus wel het goede signaal maar hij schijnt het niet te "onthouden". Ik wil dus dat het lampje aan blijft tot dat ik weer uitzet. Dus niet dat het 1 flitsje geeft.
Bij de aanknop geeft hij 1 flits en bij de uitknop doet hij niks. De basis werkt dus. Nu moet hij nog aanblijven. Heeft iemand een tip hiervoor?

Zo gaat de DTR aan:
<%dim ObjLamp2
set ObjLamp2 = Server.CreateObject("webcam.jopserver")
call ObjLamp2.SetDtr(1)
set ObjLamp2 = nothing
%>

en zo gaat de DTR uit:
<%dim ObjLamp2
set ObjLamp2 = Server.CreateObject("webcam.jopserver")

set ObjLamp2 = nothing
%>

Verwijderd

Je webcam.jopserver eenmalig aanmaken en in je applicatie object stoppen. (dejavu)

Verwijderd

Topicstarter
dit was al gebeurd.... of mis ik nou iets??
via component services > com+ appl. > rechter muisklik > new application .... etc...

Verwijderd

in je application_start je object maken is wat anders dan je object opslaan in je applicatie object.

Verwijderd

Topicstarter
na research te hebben gedaan weet ik niet hoe ik dit aan pak!

specifieke vraag:
hoe maak ik in mn application_start mijn object ?

  • HansMij
  • Registratie: Mei 2002
  • Laatst online: 08-09 21:12
Je kunt het hele programma ook maken door op de PC waar je lamp aan hangt een in VB een progje te maken waarmee je de lamp aan kunt sturen. Vervolgens zorg je dat voor de client-side (een andere PC dus) een VB progje hebt die via een WinSock kan communiceren. Op die manier kun je in het eerste programma reageren wat er in het tweede gebeurt en voila!

Verwijderd

Topicstarter
dat het mogelijk is geloof graag.... maar voor mij is het de uitdaging dit te doen zonder dat een ander iets hoeft te installeren op zijn / haar pc

Dus dat iemand gewoon simpel commands verstuurt naar mijn server via een HTML (ASP) pagina!

Dit heb nou ook practisch voor elkaar, alleen lukt het nog niet het signaal naar keuze aan te laten staan, bij het laden van de commando flikkert het desbetreffende signaal

In de normale VB omgeving was dit makkelijk voor me:
Private Sub Command1_Click()
DTR 1
End Sub

Verwijderd

Topicstarter
yarvieh
ik was wat aan t klooien met die commando's op die MSDN page die je me gaf...... steeds foutmeldingen enzo?!
en toen deed ik iets en nu als ik DTR 1 aanzet... blijft ie aanstaan tot ik hem uitzet, idem voor RTS

en dit afzonderlijk van elkaar
terwijl mn code nog steeds is
<%dim ObjLamp2
set ObjLamp2 = Server.CreateObject("webcam.jopserver")
call ObjLamp2.SetDtr(1)

%>

waarschijnlijk heb ik iets ge-triggerd.......
nu zou ik ook graag willen weten wat????

maar t werkt

:):)

Verwijderd

Jij hebt lopen proberen en spelen en nu mag ik raden waarom het in eens wel werkt!? Ehhh lijkt me 'n typish gevalletje van vrijdag middag, bananen zijn geel en het is westen wind dat helpt natuurlijk ook altijd wel, kortom ik ben net zo cluess als jij :) :) : )

Verwijderd

Topicstarter
t lag niet aan de westen wind of de gele bananen.... maar aan t volgende :? :?

Had vandaag weer t zelfde probleem... ledjes bleven bij aanschakelen niet branden.... heb toen weer ff gekloot en kwam erachter dat als ik de code veranderde in het onderstaande

dit komt van die msdn site:

<% dim ObjLamp2
Set Application("ObjLamp2") = Server.CreateObject("webcam.jopserver")
call ObjLamp2.SetDTR(1)
set ObjLamp2 = nothing
%>

en weer terugvernader in de originele code

<%dim ObjLamp2
set ObjLamp2 = Server.CreateObject("webcam.jopserver")
call ObjLamp2.SetDTR(1)
set ObjLamp2 = nothing
%>

dat het dan weer werkt zoals ik wil! Het continu hoog blijven van het desbetreffende signaal.


het houden van de bovenste code ....Set Application("ObjLamp2") ..... geeft wel een foutmelding trouwens (fout in line 37... wat dus precies de kern van de code is)

let ook op dat (1) of (0) achter SetDtr geen functie heeft als het aankomt op het schakelen van 1 naar o

Verwijderd

Ok jammer dat je ondanks veel hints en tips nog steeds geen idee hebt wat je aan het doen bent....naja dan maar cut'n'paste code.... :'(

in je global.asa
code:
1
2
3
4
5
6
7
Sub Application_OnStart
     Set Application("ObjLamp") = Server.CreateObject("webcam.jopserver") 
End Sub

Sub Application_OnEnd
     Set Application("ObjLamp") = nothing
End Sub

En in je aanroepende pagina.
code:
1
2
3
<% 
 call Application("ObjLamp").SetDTR(1)
%>

Verwijderd

Topicstarter
yarvieh,..

heb rustig alles nog eens doorgenomen, met name dat MSDN stuk en snap nu redelijk wat de bedoeling is!


bedankt voor alle hulp!
Pagina: 1