⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 demo.c

📁 西门子provade通讯代码Sample_VC.rar,版本6.0
💻 C
📖 第 1 页 / 共 4 页
字号:
/****************************************************************************
*
* 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 + -