亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? target_win32_console.c

?? AUTOMGEN runtime is an open source royalty free runtime for open PLCs. By using this runtime, any ta
?? C
字號:
// AUTOMGEN interpretor runtime	 - target
// Target specific file : Windows 32 bits OS - CONSOLE
// (C) 2003-2008 IRAI

#include "windows.h"
#include "stdio.h"
#include "conio.h"
#include "core.h"
#include "com.h"
#include "io.h"


//
// General functions
//

// Must return current time in ms in a DWORD, no matter the starting value
DWORD target_gettimeinms(void)
{
return GetTickCount();
}

// Return RTC time
void target_readrtc(unsigned short *ms,unsigned short *sec,unsigned short *min,unsigned short *hour,unsigned short *day,unsigned short *month,unsigned short *year)
{
SYSTEMTIME st;
GetLocalTime(&st);
*ms=st.wMilliseconds;
*sec=st.wSecond;
*min=st.wMinute;
*hour=st.wHour;
*day=st.wDay;
*month=st.wMonth;
*year=st.wYear;
}

// Called when a fatal error occurs
void target_fatal(void)
{
#ifdef _DEBUG
_asm int 3
#endif
}

// Return a 16 chars string target identifier
char *target_id(void)
{
static char id[16]="WINDOWS32 RTV01";
return id;
}

// Return a byte with bits as follow :
// b0= 0: time base 1ms (alsways 0, for 1 is for backward compatibility)
// b1= 0: integers are coded with LSB first, 1: integers are coded with MSB first 
unsigned char target_confbyte(void)
{
return 0;
} 

//
// Serial communication functions
//

HANDLE hcom=(HANDLE)-1;

// Open a serial port
int target_com_open(unsigned port,unsigned speed,unsigned parity,unsigned databit,unsigned stopbit)
{
DCB dcb;
char szBuff[16];
sprintf(szBuff,"COM%lu",port);
hcom=CreateFile(szBuff, GENERIC_READ | GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED,NULL);
if(hcom==(HANDLE)-1) return -1;
// 4 Ko buffers
SetupComm(hcom, 4096, 4096 ) ;
memset(&dcb,0,sizeof(dcb));
dcb.DCBlength=sizeof(dcb);
dcb.BaudRate=speed;
dcb.fBinary=1;
dcb.ByteSize=databit;
dcb.fRtsControl=RTS_CONTROL_DISABLE;
switch(parity)
	{
	case 'N' : 
		{	
		dcb.fParity=0;
		dcb.Parity=0;
		} break;
	case 'O' : 
		{	
		dcb.fParity=1;
		dcb.Parity=1;
		} break;
	case 'E' : 
		{	
		dcb.fParity=1;
		dcb.Parity=2;
		} break;
	case 'M' : 
		{	
		dcb.fParity=1;
		dcb.Parity=3;
		} break;
	case 'S' : 
		{	
		dcb.fParity=1;
		dcb.Parity=4;
		} break;
	}
switch(stopbit)
	{
	case 1 : dcb.StopBits=0; break;
	case 2 : dcb.StopBits=2; break;
	default : 
		{
		CloseHandle(hcom);
		hcom=(HANDLE)-1;
		return -1;
		}
	}
if(!SetCommState(hcom,&dcb))
	{
	CloseHandle(hcom);
	hcom=(HANDLE)-1;
	return -1;
	}
return 0;
}

OVERLAPPED OVL;

// Send a buffer to serial port
void target_com_send(unsigned char *buff,unsigned len)
{
DWORD dw;
WriteFile(hcom,buff,len,&dw,&OVL);
}


// Is there one or more chars in RX buffer?
int target_com_ischarin(void)
{
COMSTAT CS;
DWORD dw;
ClearCommError(hcom,&dw,&CS);
if(CS.cbInQue>0) 
	{
	return 1;
	}
return 0;
}

// Get one char
int target_com_getchar(void)
{
DWORD dw;
int result=0;
unsigned char c;
ReadFile(hcom,&c,1,&dw,&OVL);
result=c;
if(dw==0) return -1;
return result;
}

// Close serial com port 
void target_com_close(void)
{
if(hcom!=(HANDLE)-1)
	{
	CloseHandle(hcom);
	hcom=(HANDLE)-1;
	}
}

//
// TCP-IP functions
//


#include "winsock.h"							

#define MAXCLIENTSOCK 16			// Max client connections
#define MAX_PENDING_CONNECTS  8     // Maximum length of the queue of pending connections
#define MAXDATAINLEN 0x1000

#pragma pack(1)

typedef enum {NEWCLICONNECTED,CLIENTDATARECEIVED,CLIDECONNECTED} NETEVENTTYPE;

struct _NE
	{
	NETEVENTTYPE event;
	int data1,data2,data3,data4;
	};

WSADATA WSAData;

SOCKET WinSocket=INVALID_SOCKET;
SOCKET ClientSock[MAXCLIENTSOCK]; 
DWORD ClientID[MAXCLIENTSOCK];
SOCKADDR_IN local_sin,accept_sin;
int accept_sin_len;
unsigned maxtramelen;

// TCP-IP initialization
int target_netcom_start(void)
{
unsigned count;
for(count=0;count<MAXCLIENTSOCK;count++)
	{
	ClientSock[count]=INVALID_SOCKET;
	}
if(WSAStartup(MAKEWORD(1,1),&WSAData)!= 0) 
  {
  return -1;
  }
maxtramelen=WSAData.iMaxUdpDg;
if(maxtramelen==0||maxtramelen>0x10000)
	{
	maxtramelen=0x10000;
	}
return 0;
}

// TCP-IP close
int target_netcom_close(void)
{
if(WSACleanup()!=0)
	{
	return -1;
	}
return 0;
}

HANDLE htsrv,htsrvr;
BOOL bStophtsrv,bStophtsrvr;


// Client connection thread
DWORD WINAPI asyncconnectsrv(LPVOID p)
{
int (*netevent)(struct _NE *pne)=(int (*)(struct _NE *pne))p;
do
	{
	unsigned pos;
	SOCKET clisocket;
	accept_sin_len = sizeof (accept_sin);
	clisocket=accept(WinSocket,(struct sockaddr *)&accept_sin,(int *)&accept_sin_len);
	if(clisocket==INVALID_SOCKET||bStophtsrv)
		{
		CloseHandle(htsrv);
		htsrv=NULL;
		ExitThread(0);
		}
	else
		{
		// Search a free space for this connection
		pos=0;
		while(pos<MAXCLIENTSOCK)
			{
			if(ClientSock[pos]==INVALID_SOCKET) break;
			pos++;
			}
		if(pos!=MAXCLIENTSOCK) // Found!
			{
			struct _NE ne;
			ClientSock[pos]=clisocket;
			ne.event=NEWCLICONNECTED;
			ne.data1=pos;
			ne.data2=(int)accept_sin.sin_addr.S_un.S_addr;
			ClientID[pos]=ne.data2;
			(*netevent)(&ne);
			}
		}
	Sleep(10);
	}
while(1);
}

#define MAXRECEIVELEN 0x1000

// Client datas received thread
DWORD WINAPI asyncconnectsrvr(LPVOID p)
{
int (*netevent)(struct _NE *pne)=(int (*)(struct _NE *pne))p;
do
	{
	unsigned count;
	for(count=0;count<MAXCLIENTSOCK;count++)
		{
		if(ClientSock[count]!=INVALID_SOCKET)
			{
			BYTE data[MAXRECEIVELEN];
			int iRet;
			// Available datas ?
			iRet=recv(ClientSock[count],(char *)data,MAXRECEIVELEN,0);
			if(iRet==SOCKET_ERROR)
				{
				DWORD dwerr=WSAGetLastError();
				if(dwerr==WSAEWOULDBLOCK)
					{
					iRet=0;
					}
				}
			if(iRet==SOCKET_ERROR)
				{
				struct _NE ne;
				closesocket(ClientSock[count]);
				ClientSock[count]=INVALID_SOCKET;
				ne.event=CLIDECONNECTED;
				ne.data1=count;
				ne.data2=ClientID[count];
				(*netevent)(&ne);
				}
			else
				{
				if(iRet>0)
					{
					struct _NE ne;
					ne.event=CLIENTDATARECEIVED;
					ne.data1=count;
					ne.data2=ClientID[count];
					ne.data3=iRet;
					ne.data4=(int)(char *)&data;
					(*netevent)(&ne);
					}
				}
			}
		if(bStophtsrvr)
			{
			htsrvr=NULL;
			CloseHandle(htsrvr);
			ExitThread(0);
			}
		}		
	Sleep(10);
	}
while(1);
}

unsigned char cliconnected[MAXCLIENTSOCK];
unsigned datain[MAXCLIENTSOCK][MAXDATAINLEN];
unsigned datainlen[MAXCLIENTSOCK];

int internalnetevent(struct _NE *pne)
{
switch(pne->event)
	{
	case CLIENTDATARECEIVED :
		{
		if(datainlen[pne->data1]+pne->data3<MAXDATAINLEN)
			{
			memcpy(&datain[pne->data1][datainlen[pne->data1]],(void *)pne->data4,pne->data3);
			datainlen[pne->data1]+=pne->data3;
			}
		} break;
	case CLIDECONNECTED :
		{
		cliconnected[pne->data1]=0;
		} break;
	case NEWCLICONNECTED :
		{
		cliconnected[pne->data1]=1;
		datainlen[pne->data1]=0;
		} break;
	}
return 0;
}

// Read datas from a client
int target_netcom_srvread(unsigned client,unsigned char *data,unsigned maxdata)
{
unsigned len;
if(!cliconnected[client]) return -1;
len=min(maxdata,datainlen[client]);
if(len==0) return 0;
memcpy(data,datain[client],len);
if(len<datainlen[client])
	{
	memmove(&datain[client][0],((unsigned char *)&datain[client][0])+1,datainlen[client]-len);
	}	
datainlen[client]-=len;
return len;
}

// How many bytes in RX buffer?
int target_netcom_srvgetlenin(unsigned client)
{
if(!cliconnected[client]) return -1;
return datainlen[client];
}

// Get first connected client number : return -1 if none
int target_netcom_srvgetfirstclient(void)
{
unsigned count;
for(count=0;count<MAXCLIENTSOCK;count++)
	{
	if(cliconnected[count]) return count;
	}
return -1;
}

// Get next connected client : return -1 if none
int target_netcom_srvgetnextclient(unsigned cli)
{
unsigned count;
for(count=cli+1;count<MAXCLIENTSOCK;count++)
	{
	if(cliconnected[count]) return count;
	}
return -1;
}

// Oopen a TCP-IP server
int target_netcom_srvopen(int (*netevent)(struct _NE *pne),WORD port)
{
DWORD tid;
// Create a TCP/IP socket, WinSocket.
if((WinSocket=socket(AF_INET,SOCK_STREAM,0))==INVALID_SOCKET) 
  {
  return -1;
  }
// Fill out the local socket's address information.
local_sin.sin_family = AF_INET;
local_sin.sin_port = htons (port);  
local_sin.sin_addr.s_addr = htonl (INADDR_ANY);
// Associate the local address with WinSocket.
if (bind(WinSocket,(struct sockaddr *) &local_sin,sizeof (local_sin)) == SOCKET_ERROR) 
	{
	closesocket(WinSocket);
    return -2;
	}
// Establish a socket to listen for incoming connections.
if(listen(WinSocket,MAX_PENDING_CONNECTS)==SOCKET_ERROR) 
  {
  closesocket(WinSocket);
  return -3;
  }
bStophtsrv=FALSE;
bStophtsrvr=FALSE;
if(netevent==NULL) netevent=internalnetevent;
// Create thread for clients connection
htsrv=CreateThread(NULL,0,asyncconnectsrv,(PVOID)netevent,0,&tid);
if(htsrv==NULL)
	{
	return -4;
	}
// Create a thread for clients datas RX
htsrvr=CreateThread(NULL,0,asyncconnectsrvr,(PVOID)netevent,0,&tid);
if(htsrvr==NULL)
	{
	bStophtsrv=TRUE;
	WSACancelBlockingCall();
	TerminateThread(htsrv,0);
	CloseHandle(htsrv);
	return -5;
	}
return 0;
}

int target_netcom_srvclose(void)
{
unsigned count;
if(closesocket(WinSocket)!=0) return -1;
for(count=0;count<MAXCLIENTSOCK;count++)
	{
	if(ClientSock[count]!=INVALID_SOCKET)
		{
		// Disable both sending and receiving on ClientSock.
		shutdown(ClientSock[count],0x02);
		closesocket(ClientSock[count]);
		ClientSock[count]=INVALID_SOCKET;
		}
	}
if(htsrv!=NULL)
	{
	bStophtsrv=TRUE;
	WSACancelBlockingCall();
	TerminateThread(htsrv,0);
	CloseHandle(htsrv);
	htsrv=NULL;
	}
if(htsrvr!=NULL)
	{
	bStophtsrvr=TRUE;
	WSACancelBlockingCall();
	TerminateThread(htsrvr,0);
	CloseHandle(htsrvr);
	htsrvr=NULL;
	}
return 0;
}



int target_netcom_srvsenddata(int pos,BYTE *data,int len)
{
if(send(ClientSock[pos],(char *)data,len,0)==SOCKET_ERROR) 
	{
	return -1;
	}
return 0;	
}


//
// Main
//



// Variables
unsigned char i[10000];
unsigned char o[10000];
unsigned char b[10000];
unsigned char t[100*(sizeof(unsigned char)+sizeof(unsigned long)+sizeof(unsigned long))];
unsigned short c[10000];
unsigned short m[10000];
float f[10000];
unsigned long l[10000];
struct _a7int a7int;


// Variable memory and interpretor structure initialization
int init(void)
{
memset(&a7int,0,sizeof(a7int));
a7int.ni=10000;
a7int.no=10000;
a7int.nb=10000;
a7int.nt=100;
a7int.nc=10000;
a7int.nm=10000;
a7int.nf=10000;
a7int.nl=10000;
a7int.pI=i;
a7int.pO=o;
a7int.pB=b;
a7int.pT=t;
a7int.pC=c;
a7int.pM=m;
a7int.pF=f;
a7int.pL=l;			 
a7int.init=1;
return 0;
}

// Execute the program one time
void cycle(void)
{
if(a7int.init) 
	{
	automgenintinit(&a7int);
	a7int.init=0;
	}
if((a7int.run||a7int.step))
	{
	automgenintrun(&a7int);
	if(a7int.pB[SYSTEM_BIT_EMERGENCY_STOP]&TRUEFORBOOL)
		{ // Emergency stop stops the program
		a7int.run=0;
		}
	a7int.step=0;
	}
// Process system variables
automgenintprocesssysvar(&a7int);
}

void uninit(void)
{
}

void main(void)
{
unsigned count=0;
if(init()<0) // Interpretor initialization
	{
	printf("AUTOMGEN INTERPRETOR INITIALIZATION FAILED\n");
	exit(-1);
	}; 
if(initcom()<0) // Communication setup
	{
	printf("AUTOMGEN COMMUNICATION INITIALIZATION FAILED\n");
	exit(-2);
	}
if(initio()<0) // I/O initialization
	{
	printf("AUTOMGEN I/O INITIALIZATION FAILED\n");
	exit(-3);
	}
do
	{
	printf("%c - %c - %4.4X - %u\r",a7int.run?'R':'S',(a7int.pB[SYSTEM_BIT_EMERGENCY_STOP]&TRUEFORBOOL)?'E':' ',a7int.pM[SYSTEM_WORD_ERROR_NUMBER],count++);
	// Process the communication
	processcom(&a7int);
	// Process inputs
	// Reset I/O pos
	a7int.io_i_pos=0;
	a7int.io_o_pos=0;
	a7int.io_m_pos=200;
	readi(&a7int);
	// Ex閏ute the program one time
	cycle();
	// Process outputs
	writeo(&a7int);
	// User interface
	if(kbhit())
		{
		int key=toupper(getch());
		if(key==27) break; // Escape key stops the program
		if(key=='R') a7int.run=1; // R key changes the mode to RUN
		if(key=='S') a7int.run=0; // S key changes the mode to STOP
		}
	}
while(1);
uninitio();	// I/O stop
uninitcom(); // Communication STOP
uninit(); // Interpretor stop
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品国产一区二区亚洲人成毛片| 国产精品白丝jk白祙喷水网站| av在线不卡观看免费观看| 国产女人水真多18毛片18精品视频 | 天天综合色天天综合| 欧美日精品一区视频| 日日摸夜夜添夜夜添精品视频 | 欧美一级午夜免费电影| 免费成人在线观看| 国产偷国产偷亚洲高清人白洁 | 欧美一区二区三区日韩| 精品一区二区三区在线视频| 国产三级欧美三级| 色激情天天射综合网| 午夜成人免费电影| 亚洲精品在线电影| 成人性视频网站| 亚洲亚洲人成综合网络| 日韩欧美三级在线| 成人动漫av在线| 亚洲成人先锋电影| 久久众筹精品私拍模特| 91在线小视频| 美国一区二区三区在线播放| 国产欧美日韩在线| 欧美日韩精品一区二区| 国产精选一区二区三区| 亚洲综合色网站| 精品国产一区二区三区久久久蜜月| youjizz久久| 日本不卡一区二区三区高清视频| 国产欧美日产一区| 91精品免费在线观看| 成人少妇影院yyyy| 久久精品国产77777蜜臀| 亚洲女同一区二区| 久久精品这里都是精品| 欧美精品在欧美一区二区少妇| 国产不卡在线播放| 91免费观看在线| 韩国成人在线视频| 亚洲午夜精品网| 精品视频一区二区三区免费| 色94色欧美sute亚洲线路二| 欧美aⅴ一区二区三区视频| 国产欧美一区二区三区鸳鸯浴| 91亚洲精品乱码久久久久久蜜桃| 日本美女一区二区| 亚洲一区二区视频| 国产精品三级av| 精品日韩99亚洲| 欧美探花视频资源| 91影院在线观看| 国产一区二区三区在线看麻豆| 亚洲电影你懂得| 亚洲精品综合在线| 国产精品护士白丝一区av| xfplay精品久久| 制服丝袜av成人在线看| 欧洲国产伦久久久久久久| 成人午夜视频免费看| 国内国产精品久久| 裸体健美xxxx欧美裸体表演| 丝瓜av网站精品一区二区| 精品午夜一区二区三区在线观看| 亚洲一二三四区不卡| 国产精品网站在线观看| 26uuu色噜噜精品一区二区| 欧美人妖巨大在线| 欧美在线你懂得| 色婷婷av一区二区三区之一色屋| heyzo一本久久综合| 丁香啪啪综合成人亚洲小说 | 在线不卡欧美精品一区二区三区| 日本韩国精品一区二区在线观看| av高清不卡在线| 成人精品视频一区二区三区 | 极品美女销魂一区二区三区| 日本亚洲最大的色成网站www| 午夜日韩在线观看| 亚洲www啪成人一区二区麻豆| 亚洲一区二区在线免费看| 亚洲大片一区二区三区| 五月激情六月综合| 免费成人在线观看| 久久99久久99| 国产成人在线观看| 大桥未久av一区二区三区中文| 成人高清免费在线播放| 一本色道久久综合狠狠躁的推荐| 91成人免费在线视频| 欧美挠脚心视频网站| 日韩免费高清av| 国产农村妇女毛片精品久久麻豆| 成人欧美一区二区三区视频网页 | 日本精品一级二级| 欧美视频第二页| 欧美一级免费观看| 国产网站一区二区| 综合色中文字幕| 亚洲二区视频在线| 极品尤物av久久免费看| 免费看欧美美女黄的网站| 欧美日韩一区不卡| 欧美一区二区福利在线| 精品国产凹凸成av人网站| 国产欧美日韩中文久久| 一区二区三区在线不卡| 日韩不卡手机在线v区| 国产精品一区免费视频| 色婷婷综合久久久中文字幕| 欧美高清激情brazzers| 国产亚洲一区二区三区在线观看| 亚洲女人的天堂| 蜜桃视频在线一区| 99re热这里只有精品视频| 欧美午夜精品理论片a级按摩| 91精品黄色片免费大全| 国产精品女上位| 视频在线观看一区二区三区| 成人午夜看片网址| 欧美日韩高清影院| 国产精品毛片a∨一区二区三区| 亚洲国产中文字幕在线视频综合| 国产一二精品视频| 欧美日韩午夜在线| 国产精品久久久久久久久搜平片 | 成人免费不卡视频| 日韩视频免费观看高清在线视频| 国产精品成人网| 久久激五月天综合精品| 欧美综合一区二区三区| 国产日本一区二区| 一本到不卡精品视频在线观看 | 日韩一级精品视频在线观看| 中文字幕的久久| 日韩精品高清不卡| 色久综合一二码| 中文字幕欧美区| 久热成人在线视频| 欧美日韩午夜在线视频| 亚洲男同性恋视频| 国产69精品久久久久777| 日韩欧美中文字幕一区| 一区二区三区.www| 成人精品鲁一区一区二区| 欧美xxx久久| 亚洲国产毛片aaaaa无费看| 不卡视频一二三| 久久精品视频网| 毛片av一区二区三区| 欧美精品久久久久久久久老牛影院 | 视频一区视频二区中文字幕| 色哟哟精品一区| 中文字幕欧美一区| 成人精品免费看| 中文字幕精品综合| 夫妻av一区二区| 国产欧美日韩在线观看| 国产成人综合亚洲网站| 久久无码av三级| 国产一区二区三区国产| 精品日韩一区二区三区免费视频| 天天综合天天做天天综合| 欧美日韩一区三区四区| 亚洲国产精品精华液网站| 欧美日韩中文国产| 亚洲444eee在线观看| 欧美日本视频在线| 天天影视色香欲综合网老头| 欧美区一区二区三区| 天堂va蜜桃一区二区三区 | 91色porny| 亚洲精品成人a在线观看| 色婷婷精品久久二区二区蜜臀av| 亚洲视频一区二区在线| 色综合久久综合| 亚洲一区自拍偷拍| 91精品国产91久久综合桃花| 免费日本视频一区| 久久午夜国产精品| 成人毛片老司机大片| 亚洲视频资源在线| 欧美日韩精品一区二区三区| 日本特黄久久久高潮| 国产一区在线看| 国产欧美日韩亚州综合| 成人精品视频一区二区三区尤物| 国产精品国产精品国产专区不蜜| av激情综合网| 亚洲一区二区三区小说| 欧美一区二区三区免费观看视频 | 蜜臀久久久久久久| 国产三级久久久| 色综合久久久久| 亚洲18女电影在线观看| 精品国产1区2区3区| 成人av电影在线观看| 亚洲成a人v欧美综合天堂下载| 日韩一本二本av|