📄 rytestdlg.cpp
字号:
// RYTestDlg.cpp : implementation file
#include "stdafx.h"
#include "RYTest.h"
#include "RYTestDlg.h"
#include "ceddk.h"
#pragma comment(lib,"ceddk.lib")
#include <windows.h>
#include <commctrl.h>
#include <Afxwin.h>
#include <Afxmt.h>
#include <Winsock2.h>
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
BYTE count[8]={0,0,0,0,0,0,0,0};
BYTE watch[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
static BYTE crc_t1[]=
{
0x00,0x00,0xC1,0xC0,0x81,0xC1,0x40,0x01,0x01,0xC3,0xC0,0x03,0x80,0x02,0x41,0xC2,
0x01,0xC6,0xC0,0x06,0x80,0x07,0x41,0xC7,0x00,0x05,0xC1,0xC5,0x81,0xC4,0x40,0x04
};
static BYTE crc_t2[]=
{
0x00,0x00,0x01,0xCC,0x01,0xD8,0x00,0x14,0x01,0xF0,0x00,0x3C,0x00,0x28,0x01,0xE4,
0x01,0xA0,0x00,0x6C,0x00,0x78,0x01,0xB4,0x00,0x50,0x01,0x9C,0x01,0x88,0x00,0x44
};
#define PORT1 502
#define PORT2 1028
//#define PORT3 1026
#define DEST_IP_ADDR1 "192.168.1.27"
#define DEST_IP_ADDR2 "192.168.0.3"
#define DEST_IP_ADDR3 "192.168.1.26"
HANDLE m_hPort1=INVALID_HANDLE_VALUE,m_hPort2=INVALID_HANDLE_VALUE,
m_hPort3=INVALID_HANDLE_VALUE,m_hPort7=INVALID_HANDLE_VALUE,
m_hPort4=INVALID_HANDLE_VALUE,m_hPort5=INVALID_HANDLE_VALUE;
CWinThread *hCOM1Thread,*hCOM2Thread,*hCOM3Thread,*hCOM7Thread,*hCOM4Thread,*hCOM5Thread,
*TCPSlave1,*Rys,*Ryr,*Monitor;
UINT COM1Thread(LPVOID pArg);
UINT COM2Thread(LPVOID pArg);
UINT COM3Thread(LPVOID pArg);
UINT COM7Thread(LPVOID pArg);
UINT COM4Thread(LPVOID pArg);
UINT COM5Thread(LPVOID pArg);
UINT MBTCPSlaveThread1(LPVOID pArg);
UINT MonitorThread(LPVOID pArg);
UINT RySThread(LPVOID pArg);
UINT RyRThread(LPVOID pArg);
DWORD WINAPI send1(LPVOID pArg);
DWORD WINAPI send2(LPVOID pArg);
DWORD WINAPI send3(LPVOID pArg);
DWORD WINAPI send4(LPVOID pArg);
DWORD WINAPI send5(LPVOID pArg);
DWORD WLDCRC(BYTE *pBuffer,int nSize);
DWORD CRC16(unsigned char *codebuf,int len);
void watdog(unsigned char a);
SOCKET newSocket1=INVALID_SOCKET,newSocket2=INVALID_SOCKET,
newSocket3=INVALID_SOCKET,newSocket4=INVALID_SOCKET,newSocket5=INVALID_SOCKET;
HANDLE hsend1,hsend2,hsend3,hsend4,hsend5;
CMutex grc2041(FALSE,NULL),grc2042(FALSE,NULL),mmpr(FALSE,NULL),mlpr(FALSE,NULL),pt(FALSE,NULL),
lsa1145(FALSE,NULL),lsa1146(FALSE,NULL),dev(FALSE,NULL),ejw2000(FALSE,NULL),chymlx(FALSE,NULL);
unsigned char COM1Send[2][900]={{0x00,0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00,0X00}};
unsigned char COM2Send[2][900]={{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}};
unsigned char COM3Send[2][900]={{0x00,0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00,0X00}};
unsigned char COM7Send[40]={0x00,0x00,0x00,0x00,0x00};
unsigned char COM4Send[2][900]={{0x00,0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00,0X00}};
unsigned char COM5Send[2][900]={{0x00,0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00,0x00}};
BYTE serflag[220]={0x00,0xaa,0x00};
BOOL COM1flag,COM2flag,COM3flag,COM7flag,COM4flag,COM5flag,COM6flag,COM8flag,SOCKflag,send1flag,
send2flag,send3flag,send4flag,send5flag,send6flag,Rysflag,Ryrflag,Monitorflag,sendflag,
revflag;
unsigned char SingalRead(ULONG Addr,unsigned char b);
void InitCol();
void FlashCol(unsigned char PI,unsigned char num);
//void FlashCol2(unsigned char PI,unsigned char num);
unsigned char STATUS=0xFF,STATUS2=0xFF;
unsigned char time[10],DI[2];
/////////////////////////////////////////////////////////////////////////////
// CRYTestDlg dialog
CRYTestDlg::CRYTestDlg(CWnd* pParent /*=NULL*/)
: CDialog(CRYTestDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CRYTestDlg)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CRYTestDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CRYTestDlg)
// NOTE: the ClassWizard will add DDX and DDV calls here
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CRYTestDlg, CDialog)
//{{AFX_MSG_MAP(CRYTestDlg)
ON_BN_CLICKED(IDC_BUTTON1, OnSTART)
ON_BN_CLICKED(IDC_BUTTON2, OnSTOP)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CRYTestDlg message handlers
BOOL CRYTestDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
CenterWindow(GetDesktopWindow()); // center to the hpc screen
// TODO: Add extra initialization here
//初始化serflag标志数组
serflag[8]=0,serflag[9]=0x14; //通信服务器正常工作时钟信号
serflag[40]=0,serflag[41]=0x02; //控制器当前使用通信以太网口数量
serflag[42]=0,serflag[43]=0x06; //控制器当前使用串口数量
serflag[44]=0,serflag[45]=0x02; //串口1下挂设备数量
serflag[46]=0,serflag[47]=0x00; //串口1下挂设备通信波特率,0=4800,1=9600,2=19600,3=39200,4=78400,5=115.2K 6=356.2K
serflag[48]=0,serflag[49]=0x01; //串口1下最多允许通信出错数量
serflag[50]=0,serflag[51]=0x02; //串口2下挂设备数量
serflag[52]=0,serflag[53]=0x01; //串口2下挂设备通信波特率,0=4800,1=9600,2=19600,3=39200,4=78400,5=115.2K 6=356.2K
serflag[54]=0,serflag[55]=0x01; //串口2下最多允许通信出错数量
serflag[56]=0,serflag[57]=0x02; //串口3下挂设备数量
serflag[58]=0,serflag[59]=0x01; //串口3下挂设备通信波特率,0=4800,1=9600,2=19600,3=39200,4=78400,5=115.2K 6=356.2K
serflag[60]=0,serflag[61]=0x01; //串口3下最多允许通信出错数量
serflag[62]=0,serflag[63]=0x01; //串口4下挂设备数量
serflag[64]=0,serflag[65]=0x01; //串口4下挂设备通信波特率,0=4800,1=9600,2=19600,3=39200,4=78400,5=115.2K 6=356.2K
serflag[66]=0,serflag[67]=0x01; //串口4下最多允许通信出错数量
serflag[68]=0,serflag[69]=0x01; //串口5下挂设备数量
serflag[70]=0,serflag[71]=0x01; //串口5下挂设备通信波特率,0=4800,1=9600,2=19600,3=39200,4=78400,5=115.2K 6=356.2K
serflag[72]=0,serflag[73]=0x01; //串口5下最多允许通信出错数量
serflag[74]=0,serflag[75]=0x00; //串口6下挂设备数量
serflag[76]=0,serflag[77]=0x00; //串口6下挂设备通信波特率,0=4800,1=9600,2=19600,3=39200,4=78400,5=115.2K 6=356.2K
serflag[78]=0,serflag[79]=0x01; //串口6下最多允许通信出错数量
serflag[80]=0,serflag[81]=0x02; //串口7下挂设备数量
serflag[82]=0,serflag[83]=1200; //串口7下挂设备通信波特率,0=4800,1=9600,2=19600,3=39200,4=78400,5=115.2K 6=356.2K
serflag[84]=0,serflag[85]=0x14; //串口7下最多允许通信出错数量
serflag[86]=0,serflag[87]=0x02; //串口8下挂设备数量
serflag[88]=0,serflag[89]=0x00; //串口8下挂设备通信波特率,0=4800,1=9600,2=19600,3=39200,4=78400,5=115.2K 6=356.2K
serflag[90]=0,serflag[91]=0x00; //串口8下最多允许通信出错数量
InitCol();
if(serflag[1]=0xaa)
{
//读取抢占式DI信号
SingalRead(0xDE010,5);
if(DI[0]==1)
{
SingalRead(0xDE020,1); //写DO信号告诉对方已抢权
serflag[3]=0x00;
serflag[5]=0x03;
LPVOID COM1hWnd=NULL,COM2hWnd=NULL,COM3hWnd=NULL,COM7hWnd=NULL,COM4hWnd=NULL,
COM5hWnd=NULL,MBTCPSlave1Wnd=NULL,RyshWnd=NULL,MonitorhWnd=NULL;
COM1flag=TRUE,COM2flag=TRUE,COM3flag=TRUE,COM5flag=TRUE,COM4flag=TRUE;
COM7flag=TRUE,COM8flag=TRUE;
send1flag=TRUE,send2flag=TRUE;
SOCKflag=1,Rysflag=1,Monitorflag=1,sendflag=1;
hCOM1Thread=AfxBeginThread(COM1Thread,COM1hWnd,THREAD_PRIORITY_NORMAL,0,0,NULL);
hCOM2Thread=AfxBeginThread(COM2Thread,COM2hWnd,THREAD_PRIORITY_NORMAL,0,0,NULL);
hCOM3Thread=AfxBeginThread(COM3Thread,COM3hWnd,THREAD_PRIORITY_NORMAL,0,0,NULL);
hCOM7Thread=AfxBeginThread(COM7Thread,COM7hWnd,THREAD_PRIORITY_NORMAL,0,0,NULL);
hCOM4Thread=AfxBeginThread(COM4Thread,COM4hWnd,THREAD_PRIORITY_NORMAL,0,0,NULL);
hCOM5Thread=AfxBeginThread(COM5Thread,COM5hWnd,THREAD_PRIORITY_NORMAL,0,0,NULL);
TCPSlave1=AfxBeginThread(MBTCPSlaveThread1,MBTCPSlave1Wnd,THREAD_PRIORITY_NORMAL,0,0,NULL);
Sleep(8000);
Rys=AfxBeginThread(RySThread,RyshWnd,THREAD_PRIORITY_NORMAL,0,0,NULL);
Monitor=AfxBeginThread(MonitorThread,MonitorhWnd,THREAD_PRIORITY_BELOW_NORMAL,0,0,NULL);
SingalRead(0xDE021,1); //程序正常运行
}
else if(DI[0]==0)
{
serflag[3]=0xaa;
serflag[5]=0x04;
LPVOID MBTCPSlave1Wnd=NULL,RyrhWnd=NULL;
SOCKflag=1,Ryrflag=1,revflag=1;
Ryr=AfxBeginThread(RyRThread,RyrhWnd,THREAD_PRIORITY_NORMAL,0,0,NULL);
Sleep(1000);
TCPSlave1=AfxBeginThread(MBTCPSlaveThread1,MBTCPSlave1Wnd,THREAD_PRIORITY_NORMAL,0,0,NULL);
}
}
else if(serflag[1]=0x00)
{
LPVOID COM1hWnd=NULL,COM2hWnd=NULL,COM3hWnd=NULL,COM7hWnd=NULL,COM4hWnd=NULL,
COM5hWnd=NULL,MBTCPSlave1Wnd=NULL,RyshWnd=NULL,MonitorhWnd=NULL;
COM1flag=TRUE,COM2flag=TRUE,COM3flag=TRUE,COM5flag=TRUE,COM4flag=TRUE;
COM7flag=TRUE,COM8flag=TRUE;
//send1flag=TRUE,send2flag=TRUE;
SOCKflag=1,Rysflag=1,Monitorflag=1,sendflag=1;
hCOM1Thread=AfxBeginThread(COM1Thread,COM1hWnd,THREAD_PRIORITY_NORMAL,0,0,NULL);
hCOM2Thread=AfxBeginThread(COM2Thread,COM2hWnd,THREAD_PRIORITY_NORMAL,0,0,NULL);
hCOM3Thread=AfxBeginThread(COM3Thread,COM3hWnd,THREAD_PRIORITY_NORMAL,0,0,NULL);
hCOM7Thread=AfxBeginThread(COM7Thread,COM7hWnd,THREAD_PRIORITY_NORMAL,0,0,NULL);
hCOM4Thread=AfxBeginThread(COM4Thread,COM4hWnd,THREAD_PRIORITY_NORMAL,0,0,NULL);
hCOM5Thread=AfxBeginThread(COM5Thread,COM5hWnd,THREAD_PRIORITY_NORMAL,0,0,NULL);
TCPSlave1=AfxBeginThread(MBTCPSlaveThread1,MBTCPSlave1Wnd,THREAD_PRIORITY_NORMAL,0,0,NULL);
//此监视线程同冗余时的监视线程不完全一样
Monitor=AfxBeginThread(MonitorThread,MonitorhWnd,THREAD_PRIORITY_NORMAL,0,0,NULL);
}
return TRUE; // return TRUE unless you set the focus to a control
}
void CRYTestDlg::OnSTART()
{
// TODO: Add your control notification handler code here
}
void CRYTestDlg::OnSTOP()
{
// TODO: Add your control notification handler code here
COM1flag=0,COM2flag=0,COM3flag=0,COM5flag=0,COM4flag=0;
COM7flag=0,COM8flag=0,send1flag=0,send2flag=0;
send3flag=0,send4flag=0,send5flag=0,send6flag=0;
SOCKflag=0,Rysflag=0,Monitorflag=0,Ryrflag=0,sendflag=0;
revflag=0;
}
UINT MonitorThread(LPVOID pArg)
{
BYTE num[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
BYTE l1,l2,l3,l4,l5,l6;
DWORD LpExit[8];
Sleep(8000);
while(Monitorflag)
{
//Sleep(90000);
// watdog(0x04);
/*if(watch[0]==count[0])
{
num[0]++;
if(num[0]>=3)
{
//测试通过
GetExitCodeThread(hCOM1Thread->m_hThread,&LpExit[0]);
TerminateThread(hCOM1Thread->m_hThread,LpExit[0]);
//CloseHandle(m_hPort1);
hCOM1Thread->m_hThread=NULL;
//m_hPort1=NULL;
//写DO信号
Sleep(1000);
if(hCOM1Thread->m_hThread==NULL)
{
LPVOID COM1hWnd=NULL;
hCOM1Thread=AfxBeginThread(COM1Thread,COM1hWnd,THREAD_PRIORITY_NORMAL,0,0,NULL);
}
}
}
else num[0]=0;
if(watch[1]==count[1])
{
num[1]++;
if(num[1]>=3)
{
GetExitCodeThread(hCOM2Thread->m_hThread,&LpExit[1]);
TerminateThread(hCOM2Thread->m_hThread,LpExit[1]);
hCOM2Thread->m_hThread=NULL;
//写DO信号
Sleep(1000);
if(hCOM2Thread->m_hThread==NULL)
{
LPVOID COM2hWnd=NULL;
hCOM2Thread=AfxBeginThread(COM2Thread,COM2hWnd,THREAD_PRIORITY_NORMAL,0,0,NULL);
}
}
}
else num[1]=0;
if(watch[2]==count[2])
{
num[2]++;
if(num[2]>=3)
{
GetExitCodeThread(hCOM3Thread->m_hThread,&LpExit[2]);
TerminateThread(hCOM3Thread->m_hThread,LpExit[2]);
hCOM3Thread->m_hThread=NULL;
//写DO信号
Sleep(1000);
if(hCOM3Thread->m_hThread==NULL)
{
LPVOID COM3hWnd=NULL;
hCOM3Thread=AfxBeginThread(COM3Thread,COM3hWnd,THREAD_PRIORITY_NORMAL,0,0,NULL);
}
}
}
else num[2]=0;
if(watch[3]==count[3])
{
num[3]++;
if(num[3]>=3)
{
GetExitCodeThread(hCOM7Thread->m_hThread,&LpExit[3]);
TerminateThread(hCOM7Thread->m_hThread,LpExit[3]);
hCOM7Thread->m_hThread=NULL;
//写DO信号
Sleep(1000);
if(hCOM7Thread->m_hThread==NULL)
{
LPVOID COM7hWnd=NULL;
hCOM7Thread=AfxBeginThread(COM7Thread,COM7hWnd,THREAD_PRIORITY_NORMAL,0,0,NULL);
}
}
}
else num[3]=0;
if(watch[4]==count[4])
{
num[4]++;
if(num[4]>=3)
{
GetExitCodeThread(hCOM4Thread->m_hThread,&LpExit[4]);
TerminateThread(hCOM4Thread->m_hThread,LpExit[4]);
hCOM4Thread->m_hThread=NULL;
//写DO信号
Sleep(1000);
if(hCOM4Thread->m_hThread==NULL)
{
LPVOID COM4hWnd=NULL;
hCOM4Thread=AfxBeginThread(COM4Thread,COM4hWnd,THREAD_PRIORITY_NORMAL,0,0,NULL);
}
}
}
else num[4]=0;
if(watch[5]==count[5])
{
num[5]++;
if(num[5]>=3)
{
GetExitCodeThread(hCOM5Thread->m_hThread,&LpExit[5]);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -