Parameter
Programmierbeispiel
Sind die Daten vom externen Rechner fehlerhaft, akzeptiert der Frequenzumrichter diese Daten
nicht. Sehen Sie daher für den Fehlerfall im Anwendungsprogramm immer ein Programm zur
Ausführung von Wiederholversuchen vor.
Jede Datenübertragung, z.B. der Betriebsanweisungen oder Überwachungsfunktionen, erfolgt
erst nach einer Kommunikationsanforderung des externen Rechners. Ohne eine Anforderung
versendet der Frequenzumrichter keine Daten. Sehen Sie daher im Programm eine Anforde-
rung zum Einlesen der Daten vor.
Im folgenden Beispiel wird das Umschalten in den Betrieb für serielle Datenkommunikation dar-
gestellt. Das Programmierbeispiel ist unter Verwendung von Microsoft
erstellt worden.
#include <stdio.h>
#include <windows.h>
void main(void){
HANDLE
hCom;
DCB
hDcb;
COMMTIMEOUTS
hTim;
char
szTx[0x10];
char
szRx[0x10];
char
szCommand[0x10]; //Befehl
int
nTx,nRx;
int
nSum;
BOOL
bRet;
int
nRet;
int
i;
//**** Öffnet COM1 Port****
hCom = CreateFile ("COM1", (GENERIC_READ | GENERIC_WRITE), 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (hCom != NULL) {
//**** Kommunikationseinstellung des COM1 Ports****
GetCommState(hCom,&hDcb);
hDcb.DCBlength = sizeof(DCB);
hDcb.BaudRate = 19200;
hDcb.ByteSize = 8;
hDcb.Parity = 2;
hDcb.StopBits = 2;
bRet = SetCommState(hCom,&hDcb);
if (bRet == TRUE) {
//**** Timeout-Einstellung des COM1 Ports****
Get CommTimeouts(hCom,&hTim);
hTim.WriteTotalTimeoutConstant = 1000;
hTim.ReadTotalTimeoutConstant = 1000;
SetCommTimeouts(hCom,&hTim);
//**** Setzt den Befehl, um die Betriebsart des Station 1-Umrichters auf Netzwerkbetrieb zu wechseln ****
sprintf(szCommand,"01FB10000");
nTx = strlen(szCommand);
//**** Generiert Summencode****
nSum = 0;
for (i = 0;i < nTx;i++) {
}
//**** Generiert Sende-Daten****
memset(szTx,0,sizeof(szTx));
memset(szRx,0,sizeof(szRx));
sprintf(szTx,"\5%s%02X",szCommand,nSum);
nTx = 1 + nTx + 2;
nRet = WriteFile(hCom,szTx,nTx,&nTx,NULL);
//**** Sendevorgang ****
if(nRet != 0) {
nRet = ReadFile(hCom,szRx,sizeof(szRx),&nRx,NULL);
//**** Empfangsvorgang ****
}
}
CloseHandle(hCom);
}
}
Abb. 6-113:Programmierbeispiel
FR-D700 SC EC
//Kommunikations-Handle
//Structure für die Kommunikationseinstellungen
//Structure für Timeout-Einstellungen
//Sende-Puffer
//Empfangs-Puffer
//Für die Puffergrößen
//Für die Prüfsummen-Berechnung
nSum += szCommand[i];
nSum &= (0xff);
if(nRet != 0) {
//**** Zeigt die Empfangs-Daten an ****
for(i = 0;i < nRx;i++) {
printf("%02X ",(BYTE)szRx[i]); //Konsolenausgabe der Empfangs-Daten
//Stellt den ASCII-Code in Hexadezimal dar. Zeigt 30 bei „0" an.
}
printf("\n\r");
}
Kommunikationsbetrieb und Einstellungen
//Liest aktuelle Kommunikationsinformation aus
//Größe der Structure
//Übertragungsgeschwindigkeit = 19200 bps
//Datenlänge = 8 Bit
//Gerade Parität
//Stoppbit = 2 Bit
//Setzt die geänderten Kommunikationsdaten
//Liest aktuellen Timeout-Wert aus
//Schreibzugriff-Timeout 1 s
//Lesezugriff-Timeout 1 s
//Setzt die geänderte Timeout-Einstellung
//Sende-Daten (Netzwerkbetrieb schreiben)
//Sende-Daten-Größe
//Initialisierung der Prüfsumme
//Berechnet die Prüfsumme
//Maskiert Daten
//Initialisierung des Sende-Puffers
//Initialisierung des Empfangs-Puffers
//ENQ Code+Sende-Daten+Prüfsumme
//Sende-Datenlänge ENQ Code+Länge Sende-Daten+Länge Prüfsumme
//Kommunikations-Port schließen
®
®
Visual C++
(Ver. 6.0)
6 - 213