Ved hjælp af følgende programeksempel kan du repræsentere din Web-IO Digital med dens indgange og udgange i et Windows-program. Du kan også skifte mellem Web-IO-udgangene.

Kom i gang - bestil en prøveversion i 30 dage.

Prøv vores produkter fra Wiesemann & Theis gratis i 30 dage ved at skrive det i ordrebekræftelsen: Ønsker at teste produktet.
Hvis du ikke ønsker at gøre brug af din returret inden for 30 dage, skal du blot betale den medfølgende faktura. Gratis forsendelse i Danmark.

Læs produktspecifikationen her:

Kom i gang med at programmere Web-IO-enheder!

Du har allerede angivet din Web-IO Digital

1. Kombination af de forskellige betjeningselementer og displayobjekter i Delphi-format

2. Start af programmet

Opsætning af betjeningselementerne
I første omgang er gruppen med betjeningselementerne til Web-IO spærret for brug. Statuslinjen angiver, at der endnu ikke er en forbindelse.

procedure Twebio_ascii_client.FormCreate(Sender:TObject);
begin
	StatusBar1.SimpleText := 'No Connection';
	bt_disconnect.Enabled := False;
	gb_io.Enabled := False;
end;

3. Kontrol af tilslutning

  • Etablering af forbindelsen

    Forbindelsen åbnes ved at indtaste Web-IO’ens IP-adresse i tekstfeltet ed_ip og klikke på knappen bt_connect.

    procedure Twebio_ascii_client.bt_connectClick(Sender:TObject);
    begin
    	if ed_ip.Text <> '' then
    		begin
    		ClientSocket1.Host := ed_ip.Text;
    		ClientSocket1.Port := strtoint(ed_port.Text);
    		ClientSocket1.Active := True;
    		end;
    end;
  • Forbindelsen er oprettet

    Så snart Web-IO’en accepterer forbindelsen, udfører ClientSocket-kontrolelementet den tilsvarende procedure. Statuslinjen viser, at forbindelsen er etableret, at betjeningselementerne er klar til brug, og at knappen Disconnect er aktiv igen.

    procedure Twebio_ascii_client.ClientSocket1Connect(Sender:TObject;Socket: TCustomWinSocket);
    begin
    	StatusBar1.SimpleText := 'Connected to ' + ed_ip.Text;
    	bt_disconnect.Enabled := True;
    	gb_io.Enabled := True;
    end;
  • Åbning af forbindelsen

    Delphi ClientSocket-kontrollen bruges til at udføre TCP/IP-håndtering.
    Denne kontrol gør det muligt at specificere procedurer og starte dem, når forskellige forbindelsestilstande opstår, her f.eks. ved forsøg på at åbne en forbindelse. Proceduren skriver en tilsvarende besked i statuslinjen og deaktiverer bt_connect-knappen, så brugeren ikke kan starte et nyt forbindelsesforsøg, mens det første stadig er i gang.

    procedure Twebio_ascii_client.ClientSocket1Connecting(Sender:TObject;Socket: TCustomWinSocket);
    begin
    	StatusBar1.SimpleText := 'Try to connect to ' + ed_ip.Text;
    	bt_connect.Enabled := False;
    end;
  • Forbindelsen er oprettet

    Så snart Web-IO’en accepterer forbindelsen, udfører ClientSocket-kontrolelementet den tilsvarende procedure. Statuslinjen viser, at forbindelsen er etableret, at betjeningselementerne er klar til brug, og at knappen Disconnect er aktiv igen.

    procedure Twebio_ascii_client.ClientSocket1Connect(Sender:TObject;Socket: TCustomWinSocket);
    begin
    	StatusBar1.SimpleText := 'Connected to ' + ed_ip.Text;
    	bt_disconnect.Enabled := True;
    	gb_io.Enabled := True;
    end;
  • Frakobling

    Forbindelsen forbliver åben, indtil den afsluttes ved, at brugeren klikker på knappen Afbryd forbindelsen, eller Web-IO’en afslutter forbindelsen.

    procedure Twebio_ascii_client.bt_disconnectClick(Sender:TObject);
    begin
    	ClientSocket1.Active := False;
    end;

    Her påkalder ClientSocket-kontrolelementet igen en tilsvarende procedure

    procedure Twebio_ascii_client.ClientSocket1Disconnect(Sender:TObject;Socket: TCustomWinSocket);
    begin
    	ClientSocket1.Active := False;
    	StatusBar1.SimpleText := 'No Connection';
    	bt_connect.Enabled := True;
    	bt_disconnect.Enabled := False;
    	gb_io.Enabled := False;
    end;
  • Forbindelsesfejl

    Også i tilfælde af en forbindelsesfejl udfører ClientSocket-kontrolelementet en tilsvarende procedure, der i det væsentlige er som Disconnect-proceduren. Statuslinjen angiver også Winsock-fejlnummeret, og ErrorCode sættes derefter til 0, så der ikke opstår nogen runtime-fejl.

    procedure Twebio_ascii_client.ClientSocket1Error(Sender:TObject;Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;var ErrorCode: Integer);
    begin
    	ClientSocket1.Active := False;
    	StatusBar1.SimpleText := 'Error ' + inttostr(ErrorCode) + ' - No Connection';
    	ErrorCode := 0;
    	bt_connect.Enabled := True;
    	bt_disconnect.Enabled := False;
    	gb_io.Enabled := False;
    end;

4. Drift og kommunikation fra klientsiden

Så snart der er oprettet forbindelse til Web-IO’en, kan brugeren bruge de tilsvarende programelementer til at sende kommandoer til Web-IO’en.

  • Indstilling af udgange

    Brugeren indstiller udgangene ved hjælp af de to afkrydsningsfelter cb_outputx. Programmet bruger MouseUP-hændelsen for dette objekt. Hvis der registreres en Mouse Up, dvs. at afkrydsningsfeltet for output slippes, udfører programmet den tilsvarende procedure og – afhængigt af om afkrydsningsfeltet er sat eller ej – sender den relevante kommando til Web-IO.

    procedure Twebio_ascii_client.cb_outputMouseUp(Sender:TObject;Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    begin
    	if sender = cb_output0 then
    		if cb_output0.Checked then
    			ClientSocket1.Socket.SendText('GET/outputaccess0?PW=' + ed_password.Text + '&State=ON&')
    		else
    			ClientSocket1.Socket.SendText('GET/outputaccess0?PW=' + ed_password.Text + '&State=OFF&')
    	else
    		if cb_output1.Checked then
    			ClientSocket1.Socket.SendText('GET/outputaccess1?PW=' + ed_password.Text + '&State=ON&')
    		else
    			ClientSocket1.Socket.SendText('GET/outputaccess1?PW=' + ed_password.Text + '&State=OFF&');
    end;
  • Forespørgsel på output/input-status

    Brugeren kan anmode om status for udgangene og indgangene ved at klikke på den tilsvarende knap.

    procedure Twebio_ascii_client.bt_outputs_readClick(Sender:TObject);
    begin
    	ClientSocket1.Socket.SendText('GET/output?PW=' + ed_password.Text + '&');
    end;
    procedure Twebio_ascii_client.bt_inputs_readClick(Sender:TObject);
    begin
    	ClientSocket1.Socket.SendText('GET/input?PW=' + ed_password.Text + '&');
    end;
  • Læs slettede tællere

    Indgangstællernes tællertilstande kan også aflæses eller slettes.

    procedure Twebio_ascii_client.bt_counter_readClick(Sender:TObject);
    begin
    	if sender = bt_counter_read0 then
    		ClientSocket1.Socket.SendText('GET/counter0?PW=' + ed_password.Text + '&')
    	else
    		ClientSocket1.Socket.SendText('GET/counter1?PW=' + ed_password.Text + '&');
    end;
    procedure Twebio_ascii_client.bt_counter_clearClick(Sender:TObject);
    	begin
    		if sender = bt_counter_clear0 then
    			ClientSocket1.Socket.SendText('GET /counterclear0?PW='+ ed_password.Text + '&')
    		else
    			ClientSocket1.Socket.SendText('GET /counterclear1?PW='+ ed_password.Text + '&');
    	end;

    Naturligvis kan alle tællere aflæses eller slettes på samme tid.

    procedure Twebio_ascii_client.bt_counter_readallClick(Sender:TObject);
    begin
    	ClientSocket1.Socket.SendText('GET/counter?PW=' + ed_password.Text + '&')
    end;
    procedure Twebio_ascii_client.bt_counter_clearallClick(Sender:TObject);
    begin
    	ClientSocket1.Socket.SendText('GET /counterclear?PW=' + ed_password.Text + '&')
    end;

5. Modtagelse af data fra Web-IO

Behandle og vise de modtagne data

Alle kommandoer og anmodninger til Web-IO kvitteres med en svarstreng. Svarene har en bestemt struktur afhængigt af typen.

  • For udgangene: output;<binær værdi af udgangsstatus i hexadecimalt format>
  • For indgangene: input;<binær værdi af indgangsstatus i hexadecimalt format>
  • For tællerne: counterx;<decimal tællerstatus>
  • eller counter;<decimal counter state 0 >; <decimal counter state 0 >;….. hvis du vil læse alle tællere på samme tid.
  • Alle svarstrenge afsluttes med en 0-byte.
  • Hvis der modtages data fra ClientSocket-kontrolelementet, påkalder sidstnævnte den tilsvarende procedure
procedure Twebio_ascii_client.ClientSocket1Read(Sender:TObject;Socket: TCustomWinSocket);
var ReceiveString : String;
	OutputValue : word;
	InputValue : word;
begin
	ReceiveString := ClientSocket1.Socket.ReceiveText;
	if Receivestring[1] = 'o' then
		begin
		OutputValue := HextoInt(copy(ReceiveString,pos(';',ReceiveString)+1,length(ReceiveString)-pos(';',ReceiveString)-1));
			if OutputValue and 1 = 1 then
				cb_output0.Checked := True
			else
				cb_output0.Checked := False;
			if OutputValue and 2 = 2 then
				cb_output1.Checked := True
			else
				cb_output1.Checked := False;
		end;
	if Receivestring[1] = 'i' then
		begin
		InputValue := HextoInt(copy(ReceiveString,pos(';',ReceiveString)+1,length(ReceiveString)-pos(';',ReceiveString)-1));
			if InputValue and 1 = 1 then
				cb_input0.Checked := True
			else
				cb_input0.Checked := False;
			if InputValue and 2 = 2 then
				cb_input1.Checked := True
			else
				cb_input1.Checked := False;
		end;
	if Receivestring[1] = 'c' then
		begin
		if copy(ReceiveString, 8, 1) = '0'then
			ed_counter0.Text := copy(ReceiveString,10,length(ReceiveString)-10);
		if copy(ReceiveString, 8, 1) = '1'then
			ed_counter1.Text := copy(ReceiveString,10,length(ReceiveString)-10);
		if copy(ReceiveString, 8, 1) = ';'then
			begin
				ReceiveString[8] := ' ';
				ed_counter0.Text := copy(ReceiveString,9, pos(';',ReceiveString)-9);
				ed_counter1.Text := copy(ReceiveString, pos(';',ReceiveString)+1,length(ReceiveString)-pos(';',ReceiveString)-1);
			end;
		end;
end;

Modtagelsesproceduren bruger det første tegn i de modtagne data til at kontrollere, om det er en input-, output- eller tællerbesked. Afhængigt af dette bestemmes det for eksempel, hvilken udgang der har hvilken status. Da outputstatussen sendes i hexadecimalt format, skal den først konverteres til en heltalsværdi for at kunne beregne de efterfølgende trin. Til konverteringen er der indbygget en tilsvarende funktion i programmet. Når det gælder tællerne, er det også muligt at aflæse individuelle tællerværdier eller at aflæse alle tællerne på én gang. De enkelte tællertilstande udlæses derefter i decimalformat i en semikolonafgrænset streng.

function HexToInt(HexString: String) : longWord;
var CharCount : integer;
	HexCharValue : longWord;
	HexValue : longWord;
begin
	HexValue := 0;
	HexString := UpperCase(HexString);
	for CharCount := 1 to length(HexString) do
	begin
		HexCharValue := ord(HexString[CharCount]);
		if HexCharValue > 57 then
			HexCharValue := HexCharValue -55
		else
			HexCharValue := HexCharValue -48;
			HexCharValue := HexCharValue shl ((length(HexString)- CharCount) * 4);
			HexValue := HexValue or HexCharValue;
	end;
	HexToInt := HexValue;
end;

6. Afstemning

Cyklisk afstemning af bestemte værdier

For at muliggøre automatisk opdatering af displayet bruges en timer.
Afhængigt af afkrydsningsfelterne for output-, input- og tællerpolling hentes de tilsvarende oplysninger fra Web-IO med et indstillet interval.

procedure Twebio_ascii_client.timer_pollingTimer(Sender:TObject);
begin
	if	ClientSocket1.Active and cb_output_polling.Checked then
			ClientSocket1.Socket.SendText('GET /output?PW=' + ed_password.Text + '&');
	if	ClientSocket1.Active and cb_input_polling.Checked then
			ClientSocket1.Socket.SendText('GET /input?PW=' + ed_password.Text + '&');
	if	ClientSocket1.Active and cb_counter_polling.Checked then
			ClientSocket1.Socket.SendText('GET /counter?PW=' + ed_password.Text + '&');
end;

Det ønskede interval kan indtastes i det tilsvarende tekstfelt. Når der foretages ændringer, justeres timerintervallet automatisk.

procedure Twebio_ascii_client.ed_intervalChange(Sender:TObject);
begin
	timer_polling.Interval := strtoint(ed_interval.Text);
end;

Eksempelprogrammet understøtter alle almindelige funktioner i Web-IO i kommandostrengstilstand, optimeret til Web-IO 2x Digital Input, 2x Digital Output PoE. For de andre Web-IO-modeller kan det være nødvendigt at tilpasse programmet. Yderligere programeksempler til socket-programmering kan findes på værktøjssiderne for Web-IO. En detaljeret beskrivelse af socket-grænsefladen til Web-IO Digital-modellerne findes i referencemanualen.

Download programeksempel

Wiesemann & Theis GmbH blev grundlagt i 1979 af Reinhard Wiesemann og Rüdiger Theis. Med 50 ansatte producerer virksomheden mikrocomputer- og netværksteknologi i Wuppertal. I 2001 introducerede Wiesemann & Theis den første industrielle temperatursensor med et netværksinterface, Web-Thermometer, og har næsten 20 års erfaring inden for områderne Industri 4.0 og Internet of Things.

Active Communication har været distributør for W&T siden 1992 i Danmark og siden 2002 også i Sverige, Norge og Island. W&T’s produkter er ekstremt brugervenlige og pålidelige til en konkurrencedygtig pris.