📄 omt.cpp
字号:
GetOverlappedResult(CommPort, &osWrite, &WriteLen, TRUE);
}
}
else
{
TransmitCommChar(CommPort, SHAKE);
Sleep(500);
WriteLen = 0;
memset(OutBuf, 0, sizeof(OutBuf));
strcpy(OutBuf,EditLineStr);
AppendEditOut(EditLineStr) ;
AppendEditOut("\r\n") ;
SendMessage(hwndEditLine, EM_SETSEL, 0, -1);
SendMessage (hwndListBoxHis, LB_INSERTSTRING, 0, (LPARAM)EditLineStr) ;
strcat(OutBuf, "\x3");
PurgeComm(CommPort, PURGE_TXCLEAR);
WriteFile(CommPort, OutBuf, strlen(OutBuf), &WriteLen, &osWrite);
if(GetLastError() == ERROR_IO_PENDING)
{
GetOverlappedResult(CommPort, &osWrite, &WriteLen, TRUE);
}
}
emCommState = Comm_Idle ;
SetWindowText(hwndStatus, "Command send completed!\r\n") ;
if(FileOpened)
fprintf(LogFile,"%s\n", EditLineStr);
}
}
else
{
MessageBox(hwnd, "Comm port has not been connected!", "Notice", NULL) ;
}
}
//SendMessage (GetParent (hwnd), WM_COMMAND,
// MAKELONG (1, LBN_DBLCLK), (LPARAM) hwnd) ;
//end:
return CallWindowProc (OldList, hwnd, message, wParam, lParam) ;
}
BOOL CALLBACK AboutDlgProc (HWND hDlg, UINT message,
WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_INITDIALOG :
return TRUE ;
case WM_COMMAND :
switch (LOWORD (wParam))
{
case IDOK :
EndDialog (hDlg, 0) ;
return TRUE ;
}
break ;
}
return FALSE ;
}
AskConfirmation (HWND hwnd)
{
return MessageBox ( hwnd, TEXT ("Really want to close OMT?"),
szAppName, MB_YESNO | MB_ICONQUESTION) ;
}
void GenerateDate() //根据日期生成log文件字符串保存在szTimeBuf中
{
time(&tTime) ;
tmTime = localtime( &tTime ) ;
memset(szTimeBuf, 0, 13) ;
strftime( szTimeBuf, 13, "%Y%m%d", tmTime ) ;
}
BOOL OpenComm()
{
if( (CommPort = CreateFile("COM1", GENERIC_READ|GENERIC_WRITE, 0, NULL,OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED, 0))
== INVALID_HANDLE_VALUE)
{
AppendEditOut("Open comm error:\r\n") ;
//emCommState = Comm_Error ;
return false;
}
if (GetCommState(CommPort, &CommDCB) == FALSE)
{
AppendEditOut("Read DCB error:\r\n");
return false;
}
OldCommDCB = CommDCB;
CommDCB.BaudRate = 9600;
CommDCB.Parity = 2;
CommDCB.ByteSize = 7;
CommDCB.StopBits = 0;
CommDCB.XonChar = 17;
CommDCB.XoffChar = 19;
CommDCB.XonLim = 64;
CommDCB.XoffLim = 64;
CommDCB.fErrorChar = 0;
CommDCB.fNull = 0;
CommDCB.fRtsControl = 01;
CommDCB.fDtrControl = 01;
CommDCB.fDsrSensitivity = 0;
CommDCB.fOutX = 1;
CommDCB.fInX = 1;
CommDCB.fErrorChar = 0;
CommDCB.fNull = 0;
CommDCB.fAbortOnError = 0;
CommDCB.fDummy2 = 17;
CommDCB.wReserved1 = 0;
//CommDCB.fTXContinueOnXoff=0;
CommDCB.fOutxCtsFlow = 0;
CommDCB.fOutxDsrFlow = 0;
//CommDCB.wReserved1=1;
if( SetCommState(CommPort, &CommDCB) == FALSE)
{
AppendEditOut("Set DCB error:\r\n");
return false ;
}
MyBufLen.InLen = 10*1024;
MyBufLen.OutLen = 10*1024;
if( SetupComm(CommPort, MyBufLen.InLen, MyBufLen.OutLen)
== FALSE)
{
AppendEditOut("串口缓冲区长度设置出错\r\n");
return false ;
}
if( GetCommTimeouts(CommPort, &CommTimeouts) == FALSE )
{
AppendEditOut("获取时长设置出错\r\n");
return false ;
}
OldCommTimeouts = CommTimeouts;
CommTimeouts.ReadIntervalTimeout = 5 ; //-1;
CommTimeouts.ReadTotalTimeoutMultiplier = 5 ; //0;
CommTimeouts.ReadTotalTimeoutConstant = 50 ; //0;
//CommTimeouts.WriteTotalTimeoutMultiplier = 0;
//CommTimeouts.WriteTotalTimeoutConstant = 10000;
if( SetCommTimeouts(CommPort, &CommTimeouts) == FALSE )
{
AppendEditOut("时长设置出错\r\n");
return false ;
}
emCommState = Comm_Idle ;
JobEnd = TRUE ;
return true ;
}
void CloseComm()
{
SetCommTimeouts(CommPort, &OldCommTimeouts);
SetCommState(CommPort, &OldCommDCB);
if (CloseHandle(CommPort))
{
emCommState = Comm_Close;
}
}
void AppendEditOut(char * tmpstr)
{
EditLen = GetWindowTextLength(hwndEditOut);
SendMessage(hwndEditOut, EM_SETSEL, EditLen, -1);
SendMessage(hwndEditOut, EM_REPLACESEL, 0, (LPARAM)tmpstr);
//SendMessage(hwndEditOut, EM_REPLACESEL, 0, (LPARAM)"\r\n");
}
void SetReadEvent()
{
long EvWait;
if (CommPort == 0) return;
EvWait=EV_RXCHAR+EV_RXFLAG+EV_CTS+EV_DSR+EV_RLSD+EV_BREAK+EV_TXEMPTY+EV_ERR;
if (!SetCommMask(CommPort, EvWait))
AppendEditOut("读线程事件设置出错");
}
BOOL ReadData()
{
memset(szInBuf,0,sizeof(szInBuf));
dwReadLen=0;
if( ClearCommError(CommPort, &dwError, &CommStat) == FALSE)
{
AppendEditOut("Read data error!") ;
return FALSE ;
}
if( (dwReadLen=CommStat.cbInQue) ==0 )
{
return TRUE;
}
if( ReadFile(CommPort,szInBuf, CommStat.cbInQue, &dwReadLen, NULL) == FALSE)
{
AppendEditOut("Read data error1!") ;
return FALSE ;
}
FormatInBuf();
return TRUE;
}
void FormatInBuf()
{
for(ULONG i=0; i<dwReadLen; i++)
{
if(szInBuf[i] == 0)
szInBuf[i]=0x20;
else
szInBuf[i]=toupper(szInBuf[i]);
}
}
void ReadThread( void *dummy )
{
time_t tStartReadTime;
memset(szSave,0,sizeof(szSave));
dwSaveLen=0;
time(&tStartReadTime);
while(1)
{
if(ReadTerminated)
break ;
Sleep(5); //read interval
if( ReadData() )
{
if(dwReadLen>0)
{
emCommState = Comm_Reading ;
JobEnd = FALSE ;
SetWindowText(hwndStatus, "Reading data...") ;
if ( strstr(szInBuf, "\x6\x5\x3") != NULL) //交换机过一段时间会发确认消息来保持连接
{
TransmitCommChar(CommPort, BELL);
memset(OutBuf, 0, sizeof(OutBuf));
strcpy(OutBuf, "\x15");
strcat(OutBuf, "000");
strcat(OutBuf, "\x3");
//PurgeComm(CommPort,PURGE_TXCLEAR);
//WriteFile(CommPort,OutBuf,5,&WriteLen,&osWrite);
WriteFile(CommPort, OutBuf, strlen(OutBuf), &WriteLen, &osWrite);
JobEnd = true;
}
memcpy(&szSave[dwSaveLen],szInBuf,dwReadLen); //or strcat(szSave, zsInBuf);
dwSaveLen += dwReadLen;
if ( strstr(inbuff, "\x3") !=NULL) //振铃通知交换机继续传送
{
TransmitCommChar(CommPort, BELL);
if (strstr(szSave, "END JOB") != NULL)
{
JobEnd = true;
//OneCmdEnd = true;
}
if (strstr(szSave, "END TEXT JOB") != NULL)
{
JobEnd = true;
}
if (strstr(szSave, "SESSION REJECTED") != NULL)
{
JobEnd = true;
}
if (strstr(szSave, "INTERRUPTION TEXT JOB") != NULL)
{
JobEnd = true;
}
}
AppendEditOut(szSave) ;
if(FileOpened)
fprintf(LogFile,"%s", szSave);
memset(szSave,0,sizeof(szSave));
dwSaveLen = 0 ;
emCommState = Comm_Idle ;
}
else
{
Sleep(20); //Wait msc
//if( time(NULL) - tStartReadTime>timeout )
// return FALSE;
}
}
else
{
//if( time(NULL) - tStartReadTime>timeout )
break ;
}
}
AppendEditOut("Read thread terminate!\r\n") ;
_endthread() ;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -