habe schon alle Beiträge über die Serielle Schnittstelle im Forum gelesen aber habe es noch nicht geschaft einen String bzw. aun Array of Byte über die Serielle Schnittstelle auszugeben.
Wenn ich doch den entscheidenen Beitrag übersehen habe, bitte ich um Nachsicht und bitte um einen Link auf diesen Beitrag.
Habe die PLCWin_NT bzw. RTE gestartet, (beide als Demo) und bekomme bei beiden Systemen das gleiche Fehlverhalten.
Die COM kann geöffnet werden.
Die Function SysComSettings meldet immer nur FALSE zurück,
Die Function SysComWrite gibt als Rückgabewert immer eine 0 zurück,
und schreibt keine Bytes auf die Serielle Schnittstelle.
Die Function SysComClose meldet wieder TRUE, wenn die COM geschlossen wird.
Was mache ich falsch, bzw. welche Einstellungen habe ich übersehen.
(* @NESTEDCOMMENTS := 'Yes' *)(* @PATH := '\/04 COM\/10 COM' *)(* @SYMFILEFLAGS := '2048' *)PROGRAMCOM_Cycle (* ST *)VAR (* COM_Cycle *)  (* Variablen-definition */ /* Addr */ : Typ */ /* Wert */   /* Kommentar 12345678901234*)  (* Variablen-definition */ /* Addr */ : Typ *//* Kommentar 123456789012345678901234567890*)  (*123456789012345678901234*/            Courier New9 *)  xStart           :BOOL   :=FALSE;  uiState           :UINT;  dwHandle          :DWORD;  pt_comsettings       :COMSETTINGS:=(port:=1,dwBaudRate:=9600,byStopBits:=1,byParity:=0,                        dwTimeout:=0,dwBufferSize:=8,dwScan:=0);  _      :_:=(Port:=COM1,dwBaudRate:=38400,byStopBits:=1,byParity:=2,                          dwTimeout:=2000,dwBufferSize:=8,dwScan:=0,cByteSize:=8,                          fOutxCtsFlow:=FALSE,fOutxDsrFlow:=TRUE,                          fDtrControl:=2,fRtsControl:=2);  abWriteBuffer        :ARRAY[0..6]OFBYTE:=50,1,0,3,0,0,54;  dwWriteBytes        :DWORD:=7;  abReadBuffer        :ARRAY[0..6]OFBYTE;  dwReadBytes         :DWORD:=7;  xSysComSettings       :BOOL;  uiErrorState        :UINT;  dwSysComWrite        :DWORD;  dwSysComRead        :DWORD;  xSysComClose        :BOOL;  tonNext           :TON;END_VAR(* @END_DECLARATION := '0' *)  (* ## Erstellt: Gerhard63 / Vers. 1.00 / 03.03.08   Beschreibung    ## Änderung: ______ / __________ / __.__.__   _______________   *)  (* Netzwerk Überschrift */             /* Kommentar *)  COM_INIT();  (*//////////////////////////////////////////////////////////////////////// *)  (* COM Settings vorbelegen *)  gstCOM_Settings.Port:=COM1;  gstCOM_Settings.dwBaudRate:=38400;  gstCOM_Settings.byStopBits:=1;  gstCOM_Settings.byParity:=2;  gstCOM_Settings.dwTimeout:=0;  gstCOM_Settings.dwBufferSize:=8;  gstCOM_Settings.dwScan:=0;  (*//////////////////////////////////////////////////////////////////////// *)  CASEuiStateOF  (*//////////////////////////////////////////////////////////////////////// *)    0:(* Open COM1: *)    IF(dwHandle=0)ANDxStartTHEN      dwHandle:=SysComOpen(Port:=COM1);      IFdwHandle>0THEN        uiState:=uiState+1;      ELSE        uiErrorState:=uiState;        uiState:=99;      END_IF;    END_IF  (*//////////////////////////////////////////////////////////////////////// *)    1: (* Parameter setzen *)(*   xSysComSettings := SysComSetSettings( dwHandle := dwHandle,                      ComSettings := ADR(gstCOM_Settings)); *)    _.Size:=SIZEOF(_);    xSysComSettings:=_(dwHandle:=dwHandle,_:=ADR(_));    uiState:=11;  (*//////////////////////////////////////////////////////////////////////// *)    11:(* Write COM1 *)      dwSysComWrite:=SysComWrite(dwHandle:=dwHandle,                dwBufferAddress:=ADR(abWriteBuffer),                dwBytesToWrite:=dwWriteBytes,                dwTimeout:=0);    uiState:=12;  (*//////////////////////////////////////////////////////////////////////// *)    12:(* Read COM1 *)    dwSysComRead:=SysComRead(dwHandle:=dwHandle,              dwBufferAddress:=ADR(abReadBuffer),              dwBytesToRead:=dwReadBytes,              dwTimeout:=0);    IF(xStart=TRUE)THEN      uiState:=11;    ELSE      uiState:=30;    END_IF;  (*//////////////////////////////////////////////////////////////////////// *)    30:(* Close COM1 *)    xSysComClose:=SysComClose(dwHandle:=dwHandle);    IF(xSysComClose=TRUE)THEN      dwHandle:=0;      uiState:=99;    END_IF  END_CASE  (*//////////////////////////////////////////////////////////////////////// *)  tonNext(IN:=uiState=90,      PT:=t#500ms);  IF(tonNext.Q)THEN    uiState:=0;  END_IF;  (* Ende der Datei *)END_PROGRAM
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Zitat:
Hoffe das hilft dir, ansonsten hätt ich auch ne Library, um z.B. einen Scanner anzusteuern, die auch den Empfang der Antwort übernimmt.
Interesse
Kannst du uns mal zukommen lassen.
Danke
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Das gleiche Programm läuft auf der RTE fehlerfrei,
auf der PLCWinNT kommt immer der Fehler 16#FFFFFFFF
kann COM-Port nicht öffnen.
Was mache ich bei der PLCWin_NT falsch.
Die PLCWinNT währe zum Testen besser, da diese 2 Stunden fäuft und die RTE nur 1 Stunde oder sogar noch kürzer.
Welche Unterschiede gibt es sonst noch zwischen den beiden Versionen. ???
Nochmals Besten Dank im vorraus.
(* @NESTEDCOMMENTS := 'Yes' *)(* @PATH := '\/04 COM\/10 COM' *)(* @SYMFILEFLAGS := '2048' *)PROGRAMCOM_Cycle_Test_1 (* ST *)VAR (* COM_Cycle_Test_1 *)  (* Variablen-definition */  /* Addr */  : Typ */ /* Wert */    /* Kommentar 12345678901234*)  (* Variablen-definition */  /* Addr */  : Typ *//* Kommentar 123456789012345678901234567890*)  (*123456789012345678901234*/            Courier New9 *)  xTestPort          :BOOL;  p_Comsettings        :COMSETTINGS;  dwPortHandle        :DWORD;  bPortState          :BOOL;  iRetVal            :INT;  xSysComClose        :BOOL;END_VAR(* @END_DECLARATION := '0' *)  (*  ## Erstellt: Gerhard63 / Vers. 1.00 / 03.12.07    Beschreibung    ## Änderung: ______ / __________ / __.__.__    _______________  *)  (* Netzwerk Überschrift */              /* Kommentar *)  (*//////////////////////////////////////////////////////////////////////// *)  (* COM Settings vorbelegen *)  p_Comsettings.Port:=2;  p_Comsettings.dwBaudRate:=38400;  p_Comsettings.byParity:=2;  p_Comsettings.byStopBits:=0;  p_Comsettings.dwScan:=0;  IF(xTestPort)THEN    dwPortHandle:=SysComOpen(p_Comsettings.Port);    IFdwPortHandle<>16#FFFFFFFFTHEN      bPortState:=SysComSetSettings(dwPortHandle,ADR(p_Comsettings));      (* COM erfolgreich geöffnet *)      IFbPortState=TRUETHEN        (* COM SetSettings erfolgreich beendet. *)        iRetVal:=1;      ELSE        (* Fehler: COM SetSettings fehlgeschlagen! *)        iRetVal:=-10;      END_IF    ELSE      (* Fehler: COM konnte nicht geöffnet werde *)      iRetVal:=-11;    END_IF    xSysComClose:=SysComClose(dwHandle:=dwPortHandle);  END_IF;  xTestPort:=FALSE;  xSysComClose:=FALSE;  (*//////////////////////////////////////////////////////////////////////// *)  (* Ende der Datei *)END_PROGRAM
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Hallo zusammen,
habe schon alle Beiträge über die Serielle Schnittstelle im Forum gelesen aber habe es noch nicht geschaft einen String bzw. aun Array of Byte über die Serielle Schnittstelle auszugeben.
Wenn ich doch den entscheidenen Beitrag übersehen habe, bitte ich um Nachsicht und bitte um einen Link auf diesen Beitrag.
Habe die PLCWin_NT bzw. RTE gestartet, (beide als Demo) und bekomme bei beiden Systemen das gleiche Fehlverhalten.
Die COM kann geöffnet werden.
Die Function SysComSettings meldet immer nur FALSE zurück,
Die Function SysComWrite gibt als Rückgabewert immer eine 0 zurück,
und schreibt keine Bytes auf die Serielle Schnittstelle.
Die Function SysComClose meldet wieder TRUE, wenn die COM geschlossen wird.
Was mache ich falsch, bzw. welche Einstellungen habe ich übersehen.
Besten Dank im vorraus
COM_CYCLE.ZIP [1.29 KiB]
Hallo zusammen, Question Question
hier nochmals den Source-code,
Nochmals
Besten Dank im vorraus
Mahlzeit
1, Die Definitionen sind ja folgendermassen:
Parity: 0 = NOPARITY, 1 = ODDPARITY, 2 = EVENPARITY
StopBits: 0 = 1 STOPBIT, 1=1.5 STOPBITS, 2=2 STOPBITS
p_Comsettings.Port := COM1;
p_Comsettings.dwBaudRate := 9600;
p_Comsettings.byParity := 0;
p_Comsettings.byStopBits := 0;
p_Comsettings.dwScan := 0;
dwPortHandle := SysComOpen(p_Comsettings.Port);
IF dwPortHandle <> 16#FFFFFFFF THEN
ELSE
END_IF
Hoffe das hilft dir, ansonsten hätt ich auch ne Library, um z.B. einen Scanner anzusteuern, die auch den Empfang der Antwort übernimmt.
Gruss Erik
Hi
@Erik Böhm
Kannst du uns mal zukommen lassen.
Danke
Hallo zusammen,
es hat geklappt.
Habe wohl die Stoppbits falsch gesetzt gehabt.
Jetzt habe ich nur noch einen Punkt zur Kopplung.
Das gleiche Programm läuft auf der RTE fehlerfrei,
auf der PLCWinNT kommt immer der Fehler 16#FFFFFFFF
kann COM-Port nicht öffnen.
Was mache ich bei der PLCWin_NT falsch.
Die PLCWinNT währe zum Testen besser, da diese 2 Stunden fäuft und die RTE nur 1 Stunde oder sogar noch kürzer.
Welche Unterschiede gibt es sonst noch zwischen den beiden Versionen. ???
Nochmals Besten Dank im vorraus.
Hi
@Erik Böhm
Interesse an der Lib für den Scanner besteht,
Da ich meine Kopplung gerade Neu aufbaue, kann ich Informationen immer gebrauchen.
Danke
Dann will ich mal nicht so sein...
Eine Doku hab ich leider keine, bin bei Rückfragen aber zur Auskunft bereit...
AsysScannerLib.zip [4.68 KiB]
Cool Danke
Besten Dank für die Vorlage,
werde diese erst noch durcharbeiten müssen,
bis weitere Fragen kommen.
Bis dahin Danke nochmals