Bonjour,
j'ai actuellement plusieurs appareils qui fonctionnent en scpi/ethernet, une alimentation industrielle et un boîtier de mesure. Mon probleme est que si un des appareils est coupé, quand Lazarus envoie la commande, Lazarus plante direct ; le probleme c'est que en cas d'erreur rien ne permet d'arrêter avant que ça plante.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50 cmd2:='CONF:VOLT:DC AUTO , (@'+listeTENSIONS+')'; IP.EcritureIP(IP_KEYSIGHT_VOIE_1,PORT_KEYSIGHT_VOIE_1,cmd2); function TComIP.ecritureIP(IP, port, Txt_cde : string):String; // cette partie là n'est pas dans le méme form (PCommunicationIP) Var sock : TTCPBlockSocket; S : string; begin Sock := TTCPBlockSocket.Create; try Sock.Connect(IP , port); /////// ca plante ici !! Sock.SendString(Txt_cde+#13+#10); Sock.CloseSocket; finally Sock.Free; end; Result := s; end; procedure TBlockSocket.Connect(IP, Port: string); // cette partie là n'est pas dans le méme form (blcksock) var Sin: TVarSin; b: boolean; begin SetSin(Sin, IP, Port); if FLastError = 0 then begin if FSocket = INVALID_SOCKET then InternalCreateSocket(Sin); if FConnectionTimeout > 0 then begin // connect in non-blocking mode b := NonBlockMode; NonBlockMode := true; SockCheck(synsock.Connect(FSocket, Sin)); if (FLastError = WSAEINPROGRESS) OR (FLastError = WSAEWOULDBLOCK) then if not CanWrite(FConnectionTimeout) then FLastError := WSAETIMEDOUT; NonBlockMode := b; end else SockCheck(synsock.Connect(FSocket, Sin)); if FLastError = 0 then GetSins; FBuffer := ''; FLastCR := False; FLastLF := False; end; ExceptCheck; DoStatus(HR_Connect, IP + ':' + Port); end;
Partager