📄 demo.c
字号:
/****************************************************************************
*
* PROGRAM: DEMO.C
*
* PRODAVE Demo program for S7-200/300/400
*
*
****************************************************************************/
//#define S7_200 Compiler Option
//#define S7_300 Compiler Option
#include <windows.h>
#include "resource.h"
#include <stdio.h>
#include "w95_s7.h"
#include "komfort.h"
#define WM_TELESERVICE WM_USER+501
#define MSG_DIAL 502
#define MSG_RING 503
#define MYTIMER 0x1234
#define MAX_MIX 4
#define MAX_BUFFER 2048
HANDLE hInst,segment_hnd;
char buffer[MAX_BUFFER];
char str[100];
char str1[100];
int res;
WORD * buffer_int = (WORD *)buffer;
unsigned char * buffer_byte = (unsigned char *)buffer;
char text[255];
#pragma pack(1)
adr_table_type adr_table[5] = { {2,0,2,0},
{0,0,2,0},
{0,0,2,0},
{0,0,2,0},
{0,0,0,0}};
char device_name[20] = "S7ONLINE";
int datatype = 'e';
int blockno = 10;
int no = 0;
int bitno = 0;
int amount = 2;
char ssno = 1;
int i;
struct
{
unsigned char type;
unsigned char size;
unsigned short dbno;
unsigned short no;
} mix_tab[30];
#pragma pack()
//char sModemName[80]="Sportster 14400 FAX extern";
char sModemName[80]="Standardmodem";
char sStandortName[80]="Standardstandort";
//char sTelNo[80]="+49 (0721) 595-5587";
char sTelNo[80]="+49 (0171) 2255521";
char sUserName[80]="ADMIN";
char sPassword[80]="admin";
HWND ProgHandle;
LRESULT CALLBACK MainWndProc( HWND, UINT, WPARAM, LPARAM );
BOOL InitApplication(HANDLE);
BOOL InitInstance(HANDLE, int);
BOOL WINAPI LOADBOX ( HWND, UINT, WPARAM, LPARAM );
BOOL WINAPI INFOBOX ( HWND, UINT, WPARAM, LPARAM );
BOOL WINAPI STATUSBOX ( HWND, UINT, WPARAM, LPARAM );
BOOL WINAPI READBOX ( HWND, UINT, WPARAM, LPARAM );
BOOL WINAPI WRITEBOX ( HWND, UINT, WPARAM, LPARAM );
BOOL WINAPI ERRORBOX ( HWND, UINT, WPARAM, LPARAM );
BOOL WINAPI DBBUCHBOX ( HWND, UINT, WPARAM, LPARAM );
BOOL WINAPI MIXBOX ( HWND, UINT, WPARAM, LPARAM );
BOOL WINAPI FLAGBOX ( HWND, UINT, WPARAM, LPARAM );
BOOL WINAPI TSBOX ( HWND, UINT, WPARAM, LPARAM );
/*************************************************************************/
/*************************************************************************/
/*************************************************************************/
/* Funktion: WinMain(HANDLE, HANDLE, LPSTR, int) */
/*************************************************************************/
int CALLBACK WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
MSG msg;
if (!hPrevInstance)
if (!InitApplication(hInstance))
return (FALSE);
if (!InitInstance(hInstance, nCmdShow))
return (FALSE);
while (GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return (msg.wParam);
} /* end of WinMain */
/*************************************************************************/
/*************************************************************************/
/* Function: InitApplication(Handle) */
/*************************************************************************/
BOOL InitApplication(hInstance)
HANDLE hInstance;
{
WNDCLASS wc;
wc.style = 0;
wc.lpfnWndProc = MainWndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = GetStockObject(WHITE_BRUSH);
wc.lpszMenuName = "IDR_MENU1";
wc.lpszClassName = "DemoWClass";
return (RegisterClass(&wc));
} /* end of InitApplication */
/*************************************************************************/
/*************************************************************************/
/* Function: InitInstance(HANDLE, int) */
/*************************************************************************/
BOOL InitInstance(hInstance, nCmdShow)
HANDLE hInstance;
int nCmdShow;
{
HWND hWnd;
hInst = hInstance;
hWnd = CreateWindow(
"DemoWClass",
"PRODAVE DEMO",
WS_OVERLAPPEDWINDOW,
100,
100,
600,
100,
/*
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
*/
NULL,
NULL,
hInstance,
NULL);
if (!hWnd) return (FALSE);
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
return (TRUE);
} /* end of InitInstance */
/*************************************************************************/
/**************************************************************************/
/* Function: MainWndProc(HWND, unsigned, WORD, LONG) */
/**************************************************************************/
LRESULT CALLBACK MainWndProc ( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
char s1[256],s2[256];
int result;
unsigned char UserID[16];
unsigned char MpiAdr;
switch (message) {
case WM_TELESERVICE:
//incomming call from teleservice, remote ts-adapter connected
if (wParam == MSG_RING)
{
strcpy (s1,"RING INDICATION connected");
// userid, asid
result = ts_read_info(&UserID,&MpiAdr);
strcat(s1,"UserID = ");
for (i=0;i<16;i++)
{
sprintf(s2," %2x",UserID[i]);
strcat(s1,s2);
}
sprintf(s2," PLC Adr = %d",MpiAdr);
strcat(s1,s2);
}
//end of asynchronous dial, result in lParam
if (wParam == MSG_DIAL)
{
strcpy(s1,"async dial -> ");
if ((lParam & 0xffff) == TS_CONNECTED) strcat(s1,"connected");
if ((lParam & 0xffff) == TS_DISCONNECTED) strcat(s1,"not connected");
if ((lParam & 0xffff0000) != 0) strcat(s1,"error user or password not correct");
}
MessageBox(hWnd,s1,"TELESERVICE MESSAGE",MB_OK);
break;
case WM_COMMAND:
if (wParam == ID_AGINFO)
{
DialogBox(hInst,MAKEINTRESOURCE(IDD_AGINFO),hWnd,INFOBOX);
break;
}
if (wParam == ID_STATUS)
{
DialogBox(hInst,MAKEINTRESOURCE(IDD_STATUS),hWnd,STATUSBOX);
break;
}
if (wParam == ID_READ)
{
DialogBox(hInst,MAKEINTRESOURCE(IDD_READ),hWnd,READBOX);
break;
}
if (wParam == ID_WRITE)
{
DialogBox(hInst,MAKEINTRESOURCE(IDD_WRITE),hWnd,WRITEBOX);
break;
}
if (wParam == ID_DBBUCH)
{
DialogBox(hInst,MAKEINTRESOURCE(IDD_DBBUCH),hWnd,DBBUCHBOX);
break;
}
if (wParam == ID_MIX)
{
DialogBox(hInst,MAKEINTRESOURCE(IDD_MIX),hWnd,MIXBOX);
break;
}
if (wParam == ID_LOAD)
{
DialogBox(hInst,MAKEINTRESOURCE(IDD_LOAD),hWnd,LOADBOX);
break;
}
if (wParam == ID_UNLOAD)
{
res = unload_tool();
if (res != 0)
DialogBox(hInst,MAKEINTRESOURCE(IDD_ERROR),hWnd,ERRORBOX);
break;
}
if (wParam == ID_FLAG)
{
DialogBox(hInst,MAKEINTRESOURCE(IDD_FLAG),hWnd,FLAGBOX);
break;
}
if (wParam == ID_TS)
{
ProgHandle = hWnd;
DialogBox(hInst,MAKEINTRESOURCE(IDD_TS),hWnd,TSBOX);
break;
}
case WM_DESTROY:
unload_tool();
PostQuitMessage(0);
break;
default: return (DefWindowProc(hWnd, message, wParam, lParam));
}
return (0L);
} /* end of MainWndProc */
/*************************************************************************/
BOOL WINAPI INFOBOX(hDlg, message, wParam, lParam)
HWND hDlg;
UINT message;
WPARAM wParam;
LPARAM lParam;
{
switch (message) {
case WM_INITDIALOG:
CheckDlgButton(hDlg, IDC_VERB1, 1);
return(TRUE);
case WM_COMMAND:
if (wParam == IDOK)
{
// set connection no
if (IsDlgButtonChecked(hDlg, IDC_VERB1)) i=0;
if (IsDlgButtonChecked(hDlg, IDC_VERB2)) i=1;
if (IsDlgButtonChecked(hDlg, IDC_VERB3)) i=2;
if (IsDlgButtonChecked(hDlg, IDC_VERB4)) i=3;
res = new_ss((char)(i+1));
#ifdef S7_200
if (res == 0) res = as200_ag_info(buffer);
#endif
#ifdef S7_300
if (res == 0) res = ag_info(buffer);
#endif
if (res != 0)
{
DialogBox(hInst,MAKEINTRESOURCE(IDD_ERROR),hDlg,ERRORBOX);
EndDialog(hDlg, TRUE);
return (TRUE);
}
SetDlgItemText(hDlg, IDC_AGTYP, &buffer[4]);
#ifdef S7_200
res = as200_ag_zustand(buffer);
#endif
#ifdef S7_300
res = ag_zustand(buffer);
#endif
if (res != 0)
{
DialogBox(hInst,MAKEINTRESOURCE(IDD_ERROR),hDlg,ERRORBOX);
EndDialog(hDlg, TRUE);
return (TRUE);
}
if (buffer[0] == 0) strcpy(buffer,"RUN");
else strcpy(buffer,"STOP");
SetDlgItemText(hDlg, IDC_AGZUSTAND, buffer);
break;
}
if (wParam == IDCANCEL)
{
EndDialog(hDlg, TRUE);
break;
}
default:
return(FALSE);
}
return (TRUE);
} /* end of AGINFOBOX */
/*************************************************************************/
BOOL WINAPI LOADBOX(hDlg, message, wParam, lParam)
HWND hDlg;
UINT message;
WPARAM wParam;
LPARAM lParam;
{
int result;
int show = 0;
static char i;
char szErrorFilePath[MAX_PATH];
char drive[MAX_PATH];
char dir[MAX_PATH];
char fname[MAX_PATH];
char ext[MAX_PATH];
switch (message) {
case WM_INITDIALOG:
i = 0;
CheckDlgButton(hDlg, IDC_VERB1, 1);
itoa(adr_table[i].adr,str,10);
SetDlgItemText(hDlg, IDC_STATIONADR, str);
itoa(adr_table[i].rackno,str,10);
SetDlgItemText(hDlg, IDC_RACKNO, str);
itoa(adr_table[i].segmentid,str,10);
SetDlgItemText(hDlg, IDC_SEGMENTID, str);
itoa(adr_table[i].slotno,str,10);
SetDlgItemText(hDlg, IDC_SLOTNO, str);
// load error text file "error.dat"
GetModuleFileName(NULL,szErrorFilePath,MAX_PATH);
_splitpath(szErrorFilePath,drive,dir,fname,ext);
sprintf(szErrorFilePath,"%s%serror.dat",drive,dir);
error_message(0,szErrorFilePath);
show = 1;
break;
case WM_COMMAND:
if ((wParam == IDC_VERB1) ||
(wParam == IDC_VERB2) ||
(wParam == IDC_VERB3) ||
(wParam == IDC_VERB4))
{
show = 1;
break;
}
if (wParam == IDOK)
{
adr_table[4].adr = 0;
if (IsDlgButtonChecked(hDlg, IDC_VERB1)) ssno=1;
if (IsDlgButtonChecked(hDlg, IDC_VERB2)) ssno=2;
if (IsDlgButtonChecked(hDlg, IDC_VERB3)) ssno=3;
if (IsDlgButtonChecked(hDlg, IDC_VERB4)) ssno=4;
adr_table[i].adr = GetDlgItemInt(hDlg, IDC_STATIONADR, &result,0);
adr_table[i].rackno = GetDlgItemInt(hDlg, IDC_RACKNO, &result,0);
adr_table[i].slotno = GetDlgItemInt(hDlg, IDC_SLOTNO, &result,0);
adr_table[i].segmentid = GetDlgItemInt(hDlg, IDC_SEGMENTID, &result,0);
ssno = 1;
res = unload_tool();
res = load_tool(ssno,NULL,(adr_table_type*)adr_table);
if (res != 0)
{
DialogBox(hInst,MAKEINTRESOURCE(IDD_ERROR),hDlg,ERRORBOX);
EndDialog(hDlg, TRUE);
return (TRUE);
}
EndDialog(hDlg, TRUE);
return (TRUE);
}
if (wParam == IDCANCEL)
{
EndDialog(hDlg, TRUE);
show = 1;
break;
}
default:
return(FALSE);
} // end of case
if (show == 1)
{
adr_table[i].adr = GetDlgItemInt(hDlg, IDC_STATIONADR, &result,0);
adr_table[i].rackno = GetDlgItemInt(hDlg, IDC_RACKNO, &result,0);
adr_table[i].slotno = GetDlgItemInt(hDlg, IDC_SLOTNO, &result,0);
adr_table[i].segmentid = GetDlgItemInt(hDlg, IDC_SEGMENTID, &result,0);
if (IsDlgButtonChecked(hDlg, IDC_VERB1)) i=0;
if (IsDlgButtonChecked(hDlg, IDC_VERB2)) i=1;
if (IsDlgButtonChecked(hDlg, IDC_VERB3)) i=2;
if (IsDlgButtonChecked(hDlg, IDC_VERB4)) i=3;
itoa(adr_table[i].adr,str,10);
SetDlgItemText(hDlg, IDC_STATIONADR, str);
itoa(adr_table[i].rackno,str,10);
SetDlgItemText(hDlg, IDC_RACKNO, str);
itoa(adr_table[i].segmentid,str,10);
SetDlgItemText(hDlg, IDC_SEGMENTID, str);
itoa(adr_table[i].slotno,str,10);
SetDlgItemText(hDlg, IDC_SLOTNO, str);
UpdateWindow(hDlg);
}
return (TRUE);
} /* end of LOADBOX */
/*************************************************************************/
BOOL WINAPI STATUSBOX(hDlg, message, wParam, lParam)
HWND hDlg;
UINT message;
WPARAM wParam;
LPARAM lParam;
{
int result;
int show = 0;
static char i;
char error_txt[256];
switch (message) {
case WM_INITDIALOG:
i = 0;
CheckDlgButton(hDlg, IDC_VERB1, 1);
show = 1;
break;
case WM_COMMAND:
if ((wParam == IDC_VERB1) ||
(wParam == IDC_VERB2) ||
(wParam == IDC_VERB3) ||
(wParam == IDC_VERB4))
{
show = 1;
break;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -