天天微头条丨用VC6.0实现上位机串口通信
串口是常用的计算机与外部串行设备之间的数据传输通道,由于串行通信方便易行,所以应用广泛。我们可以利用Windows API 提供的通信函数编写出高可移植性的串行通信程序。本实例介绍在Visual C++6.0下如何利用Win32 API 实现串行通信程序。程序编译运行后的界面效果如图一所示:
一、实现方法在Win16中,可以利用OpenComm()、CloseComm()和WriteComm()等函数打开、关闭和读写串口。但在Win32中,串口和其他通信设备均被作为文件处理,串口的打开、关闭和读写等操作所用的API函数与操作文件的函数相同。可通过CreateFile()函数打开串口;通过CloseFile()函数关闭串口;通过DCB结构、CommProp()、GetCommProperties()、SetCommProperties()、GetCommState()及SetCommState()等函数设置串口状态,通过函数ReadFile()和WritFile()等函数读写串口。下面来详细介绍其实现原理。
对于串行通信设备,Win32 API支持同步和异步两种I/O操作。同步操作方式的程序设计相对比较简单,但I/O操作函数在I/O操作结束前不能返回,这将挂起调用线程,直到I/O操作结束。异步操作方式相对要复杂一些,但它可让耗时的I/O操作在后台进行,不会挂起调用线程,这在大数据量通信的情况下对改善调用线程的响应速度是相当有效的。异步操作方式特别适合同时对多个串行设备进行I/O操作和同时对一个串行设备进行读/写操作。
【资料图】
串行设备的初始化
串行设备的初始化是利用CreateFile()函数实现的。该函数获得串行设备句柄并对其进行通信参数设置,包括设置输出/接收缓冲区大小、超时控制和事件监视等。 例如下面的代码实现了串口的初始化:
//串行设备句柄; HANDLE hComDev=0; //串口打开标志; BOOL bOpen=FALSE; //线程同步事件句柄; HANDLE hEvent=0; DCB dcb; COMMTIMEOUTS timeouts; //设备已打开 if(bOpen) return FALSE; //打开COM1 if((hComDev=CreateFile(“COM1”,GENERICREAD|GENERICWRITE,0,NULL,OPENEXISTING,FILEATTRIBUTENORMAL,NULL))==INVALIDHANDLEVALUE)
return FALSE; //设置超时控制 SetCommTimeouts(hComDev,&timeouts); //设置接收缓冲区和输出缓冲区的大小 SetupComm(hComDev,1024,512); //获取缺省的DCB结构的值 GetCommState(hComDev,&dcb); //设定波特率为9600 bps dcb.BaudRate=CBR9600; //设定无奇偶校验 dcb.fParity=NOPARITY; //设定数据位为8 dcb.ByteSize=8; //设定一个停止位 dcb.StopBits=ONESTOPBIT; //监视串口的错误和接收到字符两种事件 SetCommMask(hComDev,EVERR|EVRXCHAR); //设置串行设备控制参数 SetCommState(hComDev,&dcb); //设备已打开 bOpen=TRUE; //创建人工重设、未发信号的事件 hEvent=CreateEvent(NULL,FALSE,FALSE, “WatchEvent”); //创建一个事件监视线程来监视串口事件 AfxBeginThread(CommWatchProc,pParam); }
在设置串口DCB结构的参数时,不必设置每一个值。首先读出DCB缺省的参数设置,然后只修改必要的参数,其他参数都取缺省值。由于对串口进行的是同步I/O操作,所以除非指定进行监测的事件发生,否则WaitCommEvent()函数不会返回。在串行设备初始化的最后要建立一个单独的监视线程来监视串口事件,以免挂起当前调用线程,其中pParam可以是一个对事件进行处理的窗口类指针。
如果要进行异步I/O操作,打开设备句柄时,CreateFile的第6个参数应增加FILEFLAGOVERLAPPED 标志。
数据发送
数据发送利用WriteFile()函数实现。对于同步I/O操作,它的最后一个参数可为NULL;而对异步I/O操作,它的最后一个参数必需是一个指向OVERLAPPED结构的指针,通过OVERLAPPED结构来获得当前的操作状态。
BOOL WriteComm(LPCVOID lpSndBuffer,DWORD dwBytesToWrite) { //lpSndBuffer为发送数据缓冲区指针, dwBytesToWrite为将要发送的字节长度 //设备已打开 BOOL bWriteState; //实际发送的字节数 DWORD dwBytesWritten; //设备未打开 if(!bOpen) return FALSE; bWriteState=WriteFile(hComDev,lpSndBuffer,dwBytesToWrite,&dwBytesWritten,NULL); if(!bWriteState || dwBytesToWrite!=dwBytesWritten)
//发送失败
return FALSE; else
//发送成功
return TRUE; }
数据接收
接收数据的任务由ReadFile函数完成。该函数从串口接收缓冲区中读取数据,读取数据前,先用ClearCommError函数获得接收缓冲区中的字节数。接收数据时,同步和异步读取的差别同发送数据是一样的。
DWORD ReadComm(LPVOID lpInBuffer,DWORD dwBytesToRead) { //lpInBuffer为接收数据的缓冲区指针, dwBytesToRead为准备读取的数据长度(字节数) //串行设备状态结构 COMSTAT ComStat; DWORD dwBytesRead,dwErrorFlags; //设备未打开 if(!bOpen) return 0; //读取串行设备的当前状态 ClearCommError(hComDev,&dwErrorFlags,&ComStat); //应该读取的数据长度 dwBytesRead=min(dwBytesToRead,ComStat.cbInQue); if(dwBytesRead>0)
//读取数据
if(!ReadFile(hComDev,lpInBuffer,dwBytesRead,&dwBytesRead,NULL))
dwBytesRead=0; return dwBytesRead; }
事件监视线程
事件监视线程对串口事件进行监视,当监视的事件发生时,监视线程可将这个事件发送(SendMessage)或登记(PostMessage)到对事件进行处理的窗口类(由pParam指定)中。
UINT CommWatchProc(LPVOID pParam) { DWORD dwEventMask=0; //发生的事件; while(bOpen) {
//等待监视的事件发生
WaitCommEvent(hComDev, &dwEventMask,NULL);
if ((dwEventMask & EVRXCHAR)==EVRXCHAR)
……//接收到字符事件后,可以将此消息登记到由pParam有指定的窗口类中进行处理
if(dwEventMask & EVERR)==EVERROR)
……//发生错误时的处理 } SetEvent(hEvent); //发信号,指示监视线程结束 return 0; }
关闭串行设备
在整个应用程序结束或不再使用串行设备时,应将串行设备关闭,包括取消事件监视,将设备打开标志bOpen置为FALSE以使事件监视线程结束,清除发送/接收缓冲区和关闭设备句柄。
void CloseSynComm() { if(!bOpen) return; //结束事件监视线程 bOpen=FALSE; SetCommMask(hComDev,0); //取消事件监视,此时监视线程中的WaitCommEvent将返回 WaitForSingleObject(hEvent,INFINITE); //等待监视线程结束 CloseHandle(hEvent); //关闭事件句柄 //停止发送和接收数据,并清除发送和接收缓冲区 PurgeComm(hComDev,PURGETXABORT| PURGERXABORT|PURGETXCLEAR|PURGERXCLEAR); //关闭设备句柄 CloseHandle(hComDev); }
二、编程步骤1、 启动Visual C++6.0,生成一个基于对话框的的应用程序,将该程序命名为“SerealCom”;
2、 按照图一的界面设计对话框,具体设置参见代码部分;
3、 使用Class Wizard为对话框的按钮添加鼠标单击消息响应函数;
4、 添加代码,编译运行程序。
1 #if !defined(_COMM_ACCESS_FUNCTIONS_AND_DATA) 2 #define _COMM_ACCESS_FUNCTIONS_AND_DATA 3 #if _MSC_VER > 1000 4 #pragma once 5 #endif // _MSC_VER > 1000 6 #define EVENTCHAR 0x0d 7 #define MAXBLOCKLENGTH 59 8 9 extern BYTE XwCom; 10 extern BYTE sCom1[5],sCom2[MAXBLOCKLENGTH+12]; 11 extern sCom3[MAXBLOCKLENGTH+12]; 12 extern BYTE opation; 13 extern short ComNum; 14 15 #define FC_DTRDSR 0x01 16 #define FC_RTSCTS 0x02 17 #define FC_XONXOFF 0x04 18 #define ASCII_BEL 0x07 19 #define ASCII_BS 0x08 20 #define ASCII_LF 0x0A 21 #define ASCII_CR 0x0D 22 #define ASCII_XON 0x11 23 #define ASCII_XOFF 0x13 24 25 class CComStatus 26 { 27 public: 28
HANDLE m_hCom; 29
BYTE m_bComId; 30
BYTE m_bByteSize; 31
BYTE m_bStopBits; 32
BYTE m_bParity; 33
DWORD m_dwBaudRate; 34 35
//WORD m_fChEvt; 36 37
char m_bEvtChar; 38
DWORD m_fBinary; 39
BOOL m_bConnected; 40
BOOL m_fXonXoff; 41
BOOL m_bFlowCtrl; 42
OVERLAPPED m_rdos; 43
OVERLAPPED m_wtos; 44 45
//functions 46 47
CComStatus(); 48
CComStatus(BYTE bComId,BYTE bByteSize,BYTE bStopBits,BYTE bParity, 49
DWORD dwBaudRate,/*WORD fChEvt,*/char bEvtChar,DWORD fBinary); 50
BOOL OpenConnection(); 51
BOOL CloseConnection(); 52
BOOL SetupConnection(); 53
BOOL IsConnected(); 54 }; 55 56 UINT CommWatchProc( LPVOID lpData ); 57 BOOL WriteCommBlock( CComStatus& comDev, LPSTR lpByte , DWORD dwBytesToWrite); 58 int ReadCommBlock(CComStatus& comDev,LPSTR lpszBlock, int nMaxLength ); 59 int ReadCommBlockEx(CComStatus& comDev,LPSTR lpszBlock, int nMaxLength,DWORD dwTimeOut); 60 #endif 61 62 /// 63 64 #include "stdafx.h" 65 #include "com232.h" 66 67 BYTE XwCom=0x40; 68 BYTE sCom1[5],sCom2[MAXBLOCKLENGTH+12],sCom3[MAXBLOCKLENGTH+12]; 69 BYTE opation; 70 short ComNum; 71 CComStatus::CComStatus() 72 { 73 m_hCom = NULL; 74 m_bComId = (char)ComNum;//COM1 75 m_bByteSize=8; 76 m_bStopBits=ONESTOPBIT; 77 m_bParity=NOPARITY; 78 m_dwBaudRate=9600; 79 m_bEvtChar=EVENTCHAR; 80 m_fBinary=1; 81 m_bConnected = FALSE; 82 m_bFlowCtrl = FC_XONXOFF ; 83 m_fXonXoff = FALSE; 84 } 85 86 CComStatus::CComStatus(BYTE bComId,BYTE bByteSize,BYTE bStopBits,BYTE bParity,DWORD dwBaudRate,/*WORD fChEvt,*/char bEvtChar,DWORD fBinary) 87 { 88 m_hCom = NULL; 89 m_bComId = bComId; 90 m_bByteSize=bByteSize; 91 m_bStopBits=bStopBits; 92 m_bParity=bParity; 93 m_dwBaudRate=dwBaudRate; 94 m_bEvtChar=bEvtChar; 95 m_fBinary=fBinary; 96 m_bConnected = FALSE; 97 m_bFlowCtrl = FC_XONXOFF ; 98 m_fXonXoff = FALSE; 99 }100 101 BOOL CComStatus::OpenConnection()102 {103 char csCom[10];104 COMMTIMEOUTS CommTimeOuts ;105 if((m_bComId < 0) || (m_bComId > 4))106
return FALSE;//从COM1到COM4107 if(m_hCom)//if already open108 return FALSE;109 110 //OVERLAPPED包含异步I/O信息111 112 m_rdos.Offset = 0;113 m_rdos.OffsetHigh = 0;114 m_rdos.hEvent = CreateEvent(NULL,TRUE,FALSE,NULL);115 if(m_rdos.hEvent == NULL)116
return FALSE;117 m_wtos.Offset = 0;118 m_wtos.OffsetHigh = 0;119 m_wtos.hEvent = CreateEvent(NULL,TRUE,FALSE,NULL);120 if(m_wtos.hEvent == NULL)121 {122
CloseHandle(m_rdos.hEvent);123
return FALSE;124 }125 126 wsprintf(csCom,"COM%d",m_bComId);127 128 m_hCom = CreateFile(csCom,GENERIC_READ | GENERIC_WRITE, 0,NULL, OPEN_EXISTING,ILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED,NULL);129 130 if(m_hCom == INVALID_HANDLE_VALUE) {131
//dwError = GetLastError();132
// handle error 133
return FALSE;134 }135 else136 {137
SetCommMask( m_hCom, EV_RXCHAR ) ; // get any early notifications138
SetupComm( m_hCom, 4096, 4096 ) ; // setup device buffers139
// purge any information in the buffer140 141
PurgeComm( m_hCom, PURGE_TXABORT | PURGE_RXABORT |PURGE_TXCLEAR | PURGE_RXCLEAR ) ;142 143
// set up for overlapped I/O144 145
DWORD dwTemp = 1000 / (this->m_dwBaudRate / 8);146
CommTimeOuts.ReadIntervalTimeout = 0xFFFFFFFF ;147
CommTimeOuts.ReadTotalTimeoutMultiplier = 0;//((dwTemp > 0) ? dwTemp : 1);148
CommTimeOuts.ReadTotalTimeoutConstant = 1000 ;149 150
// CBR_9600 is approximately 1byte/ms. For our purposes, allow151
// double the expected time per character for a fudge factor.152 153
CommTimeOuts.WriteTotalTimeoutMultiplier =2*CBR_9600/this->m_dwBaudRate;//( npTTYInfo ) ;154
CommTimeOuts.WriteTotalTimeoutConstant = 0;//1000 ;155 156
SetCommTimeouts( m_hCom, &CommTimeOuts ) ;157 }158 if(!SetupConnection())159 {160
CloseConnection();161
return FALSE;162 }163 EscapeCommFunction( m_hCom, SETDTR );164 m_bConnected = TRUE;165 return TRUE;166 }167 168 BOOL CComStatus::CloseConnection()169 {170 if (NULL == m_hCom)171
return ( TRUE ) ;172 // set connected flag to FALSE173 m_bConnected = FALSE;174 // disable event notification and wait for thread175 // to halt176 SetCommMask( m_hCom, 0 ) ;177 EscapeCommFunction( m_hCom, CLRDTR ) ;178 // purge any outstanding reads/writes and close device handle179 PurgeComm( m_hCom, PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR ) ;180 CloseHandle( m_hCom ) ;181 m_hCom = NULL;182 183 // change the selectable items in the menu184 185 CloseHandle(m_rdos.hEvent);186 CloseHandle(m_wtos.hEvent);187 return ( TRUE ) ;188 }189 190 BOOL CComStatus::SetupConnection()191 {192 BOOL fRetVal ;193 BYTE bSet ;194 DCB dcb ;195 if(m_hCom == NULL)196
return FALSE; 197 dcb.DCBlength = sizeof( DCB ) ;198 GetCommState( m_hCom, & dcb ) ;199 dcb.BaudRate = this->m_dwBaudRate;200 dcb.ByteSize = this->m_bByteSize;201 dcb.Parity = this->m_bParity;202 dcb.StopBits = this->m_bStopBits ;203 dcb.EvtChar = this->m_bEvtChar ;204 // setup hardware flow control205 bSet = (BYTE) ((m_bFlowCtrl & FC_DTRDSR) != 0) ;206 dcb.fOutxDsrFlow = bSet ;207 if (bSet)208
dcb.fDtrControl = DTR_CONTROL_HANDSHAKE ;209 else210
dcb.fDtrControl = DTR_CONTROL_ENABLE ;211 bSet = (BYTE) ((m_bFlowCtrl & FC_RTSCTS) != 0) ;212 dcb.fOutxCtsFlow = bSet ;213 if (bSet)214
dcb.fRtsControl = RTS_CONTROL_HANDSHAKE ;215 else216
dcb.fRtsControl = RTS_CONTROL_ENABLE ;217 // setup software flow control218 bSet = (BYTE) ((m_bFlowCtrl & FC_XONXOFF) != 0) ;219 dcb.fInX = dcb.fOutX = bSet ;220 dcb.XonChar = ASCII_XON ;221 char xon = ASCII_XON ;222 dcb.XoffChar = ASCII_XOFF ;223 char xoff = ASCII_XOFF ;224 dcb.XonLim = 100 ;225 dcb.XoffLim = 100 ;226 // other various settings227 dcb.fBinary = TRUE ;228 dcb.fParity = TRUE ;229 fRetVal = SetCommState( m_hCom, &dcb ) ;230 return ( fRetVal ) ;231 } // end of SetupConnection()232 233 BOOL CComStatus::IsConnected()234 {235 return m_bConnected;236 }237 238 UINT CommWatchProc( LPVOID lpData )239 {240 DWORD dwEvtMask ;241 //NPTTYINFO npTTYInfo = (NPTTYINFO) lpData ;242 OVERLAPPED os ;243 int nLength ;244 //BYTE abIn[ MAXBLOCK + 1] ;245 246 CComStatus * pCom = (CComStatus *)lpData;247 memset( &os, 0, sizeof( OVERLAPPED ) ) ;248 // create I/O event used for overlapped read249 250 os.hEvent = CreateEvent( NULL, // no security251
TRUE, // explicit reset req252
FALSE, // initial event reset253
NULL ) ; // no name254 255 if (os.hEvent == NULL)256 {257
MessageBox( NULL, "Failed to create event for thread!", "TTY Error!",MB_ICONEXCLAMATION | MB_OK ) ;258
return ( FALSE ) ;259 }260 if (!SetCommMask( pCom->m_hCom, EV_RXCHAR ))261
return ( FALSE ) ;262 char buf[256];263 while ( pCom->m_bConnected )264 {265
dwEvtMask = 0 ;266
WaitCommEvent( pCom->m_hCom, &dwEvtMask, NULL );267
if ((dwEvtMask & EV_RXCHAR) == EV_RXCHAR)268
{269
if ((nLength = ReadCommBlock( *pCom, (LPSTR) buf, 255 )))270
{271
//WriteTTYBlock( hTTYWnd, (LPSTR) abIn, nLength ) ;272
buf[nLength]="\0";273
AfxMessageBox(buf);274
}275
}276 }277 CloseHandle( os.hEvent ) ;278 return( TRUE ) ;279 } // end of CommWatchProc()280 281 int ReadCommBlock(CComStatus& comDev,LPSTR lpszBlock, int nMaxLength )282 {283 BOOL fReadStat ;284 COMSTAT ComStat ;285 DWORD dwErrorFlags;286 DWORD dwLength;287 DWORD dwError;288 289 char szError[ 10 ] ;290 291 // only try to read number of bytes in queue292 293 ClearCommError( comDev.m_hCom, &dwErrorFlags, &ComStat ) ;294 dwLength = min( (DWORD) nMaxLength, ComStat.cbInQue ) ;295 296 if (dwLength > 0)297 {298
fReadStat = ReadFile( comDev.m_hCom, lpszBlock,dwLength, &dwLength, & (comDev.m_rdos) ) ;299
if (!fReadStat)300
{301
if (GetLastError() == ERROR_IO_PENDING)302
{303
OutputDebugString("\n\rIO Pending");304
while(!GetOverlappedResult( comDev.m_hCom ,&(comDev.m_rdos), & dwLength, TRUE ))305
{306
dwError = GetLastError();307
if(dwError == ERROR_IO_INCOMPLETE)308
// normal result if not finished309
continue;310
else311
{312
// an error occurred, try to recover313
wsprintf( szError, "", dwError ) ;314
ClearCommError( comDev.m_hCom , &dwErrorFlags, &ComStat ) ;315
break;316
}317
}318
}319
else320
{321
// some other error occurred322
dwLength = 0 ;323
ClearCommError( comDev.m_hCom , &dwErrorFlags, &ComStat ) ;324
}325
}326 }327 return ( dwLength ) ;328 } // end of ReadCommBlock()329 330 int ReadCommBlockEx(CComStatus& comDev,LPSTR lpszBlock, int nMaxLength,DWORD dwTimeOut)331 {332 LPSTR lpOffset=lpszBlock;333 int nReadCount = 0;334 char chBuf;335 //time_t beginTime,endTime;336 if(!comDev.m_hCom)337
return 0;338 if(dwTimeOut <= 0)339
return 0;340 MSG msg;341 //time(&beginTime);342 DWORD dwLastTick,dwNowTick,dwGoneTime;343 dwGoneTime = 0;344 dwLastTick = GetTickCount();345 dwNowTick = dwLastTick;346 // double diftime;347 do348 {349
if(PeekMessage(&msg,NULL,0,0,PM_REMOVE))350
{351
::TranslateMessage(&msg);352
::DispatchMessage(&msg);353
}354
if(ReadCommBlock(comDev,&chBuf,1) > 0)355
{356
//TRACE("----get a char----\n");357
*lpOffset = chBuf;358
lpOffset ++;359
nReadCount ++;360
}361
dwNowTick = GetTickCount();362
if(dwNowTick < dwLastTick)363
{364
dwLastTick = dwNowTick;365
}366 367
dwGoneTime = dwNowTick - dwLastTick;368 369
//TRACE("gon time = %lu\n",dwGoneTime);370 371 }while((nReadCount < nMaxLength) && (dwGoneTime < dwTimeOut));372 return (nReadCount);373 }//end ReadCommBlockEx374 375 BOOL WriteCommBlock( CComStatus& comDev, LPSTR lpByte , DWORD dwBytesToWrite)376 {377 BOOL fWriteStat ;378 DWORD dwBytesWritten ;379 DWORD dwErrorFlags;380 DWORD dwError;381 DWORD dwBytesSent=0;382 COMSTAT ComStat;383 384 char szError[ 128 ] ;385 386 fWriteStat = WriteFile( comDev.m_hCom , lpByte, dwBytesToWrite,&dwBytesWritten, &( comDev.m_wtos) ) ;387 if (!fWriteStat)388 {389
if(GetLastError() == ERROR_IO_PENDING)390
{391
while(!GetOverlappedResult( comDev.m_hCom,&(comDev.m_wtos), & dwBytesWritten, TRUE ))392
{393
dwError = GetLastError();394
if(dwError == ERROR_IO_INCOMPLETE)395
{396
// normal result if not finished397
dwBytesSent += dwBytesWritten;398
continue;399
}400
else401
{402
// an error occurred, try to recover403
wsprintf( szError, "", dwError ) ;404
ClearCommError( comDev.m_hCom, &dwErrorFlags, &ComStat ) ;405
break;406
}407
}408
dwBytesSent += dwBytesWritten;409
if( dwBytesSent != dwBytesToWrite )410
wsprintf(szError,"\nProbable Write Timeout: Total of %ld bytes sent", dwBytesSent);411
else412
wsprintf(szError,"\n%ld bytes written", dwBytesSent);413
OutputDebugString(szError);414
}415
else416
{417
// some other error occurred418
ClearCommError( comDev.m_hCom, &dwErrorFlags, &ComStat ) ;419
return ( FALSE );420
}421 }422 return ( TRUE ) ;423 } // end of WriteCommBlock()
四、小结 以上给出了用Win32 API设计串行通信的基本思路,在实际应用中,我们可以利用Win32 API设计出满足各种需要的串行通信程序。
欢迎各位电子爱好者转载。
PS原文出自http://soft.yesky.com/50/2214050_2.shtml
标签:
相关推荐:
精彩放送:
- []每日快报!粘胶短纤维市场现状是什么?粘胶短纤维的未来发展趋势
- []数据结构试题有哪些?数据结构试题及评分解析
- []热议:c语言餐桌游戏有哪些?教会你这十款酒桌游戏让你在朋友圈稳站“C”位!
- []招行信用卡荣获“2022年度金质信用卡天玑奖”
- []“快闪”成都,五粮浓香兔年生肖酒打响旺季攻势、抢跑“春节档”!
- []挑选运动耳机不踩雷!一篇文章告诉你想知道的所有
- []全球观点:【东海期货12月8日宏观金融日报】:国内疫情防控措施进一步优化
- []中信建投期货12月8日早间交易策略
- []视讯!苏州高新发行3亿元超短期融资券 利率2.48%
- []焦点信息:央行:支持房地产市场平稳健康发展 用好“保交楼”专项借款加大对房企贷款投放力度
- []锋龙股份:公司首发募集资金和可转债募集资金投资项目正按项目计划在紧锣密鼓地建设和筹备工作中
- []科恒股份:公司的主营业务为锂电智能装备及锂离子正极材料,没有涉足下游电芯制造
- []世界速看:普洛斯仓储物流封闭式基础设施公募REITs状态更新为“已反馈”
- []世界热文:ST爱迪尔:公司负债及现金流情况详见公司最新定期报告
- []【热闻】雅居乐集团与农行广东分行签约 后者在同等条件下优先为雅居乐提供必要综合融资服务
- []广州知识城携北京华瑞锦泰以3.07亿元竞得广州黄埔区一宗商地
- []骏成科技:此轮疫情对公司的生产以及业绩影响不大,从公司公布的三季报数据可见
- []成人补钙吃什么钙片好?金丐醋酸钙科学补钙更轻松
- []环球今亮点!深圳峰汇创投发展拟转让长兴中建投38.5%股权 底价1.62亿元
- []重庆轮船集团挂牌宜宾天港物流40%股权及债权 转让底价为199万元
- []侨银股份新增投资霸州侨银环保科技 持股比例100%
- []华发股份:公司已披露定增预案,具体内容详见公司于12月6日上海证券交易所网站披露的公告
- []一起教育科技发布2022年三季度财报:业绩稳中向好,连续四个季度实现盈利
- []全球观天下!安徽滁州超29亿元成交九宗地块 总出让面积848亩
- []长春3.86亿元挂牌5宗地 总出让面积37.28万平米
- []当前快讯:珍宝岛:公司的参股公司安徽九洲方圆制药有限公司有饮片业务,据了解,目前业务规模营收亿元左右
- []全球快消息!海航科技与天津信托和解
- []当前速讯:卖地发工资的逻辑
- []全球视讯!“三支箭”出弓地产度过“最难时光”?43只地产债大幅反弹近一月涨幅翻倍
- []互联网巨头也要跨界储能?
- []当前消息!1000000000元!环保龙头成立电池储能公司
- []机会?蔚蓝锂芯电池生产线改造投产
- []全球时讯:3分钟!电池储能安全问题解决了?
- []什么是分布式储能?分布式储能系统有哪些功能?
- []环球报道:自费社保一年需交多少 社保自费一年得交多少钱
- []微资讯!从上海离职了怎么把公积金取出来,可分为三个步骤
- []天天滚动:青竹画材科创板IPO进程终止:原计划募资4亿元,刘其通为控股股东
- []【全球新视野】中国电气装备集团12.84亿元上海静安拿地 将建总部大楼
- []当前报道:德国股市收低;截至收盘DAX 30下跌0.57%
- []每日消息!保险公司的分类
- []养老保险能退吗
- []天天热点!公积金绑定哪个银行卡 公积金绑定的是哪个银行卡
- []央行营业管理部:加大对房地产企业和建筑企业的贷款投放力度
- []环球快消息!一笔关联交易 建发国际“低价”购入上海闵行两宗地
- []朗进科技:公司未参与沙特的“The Line”未来城市项目
- []简讯:中梁控股1月至11月合约销售额620亿元 销售面积594万平
- []朗进科技:12月6日公司高管张进、张永利减持公司股份合计1.2万股
- []环球新消息丨数码视讯:12月6日公司高管郑海涛减持公司股份合计8万股
- []世界今日讯!科华数据:12月6日公司高管林清民增持公司股份合计7300股
- []当前焦点!美瑞新材:12月6日公司高管任光雷减持公司股份合计10万股
- []每日看点!容知日新5名股东合计减持201.64万股 套现2.23亿 2022年前三季度公司净利4470.9万
- []每日热文:德信中国1-11月合约销售金额约336亿元
- []信息:海航投资将延期至12月21日前回复深交所半年报问询函
- []【世界新视野】福州1-9月累计住房公积金提取72亿 为23风险楼盘放款4.23亿
- []【环球时快讯】光大地产至11月底接近4000套房屋全部提前交付
- []宣泰医药提示风险 熊去氧胆酸胶囊产品不涉及新冠病毒防治
- []世界短讯!道通科技:12月2日詹金勇减持公司股份合计8750股
- []今日聚焦!珀莱雅:12月6日公司高管方玉友减持公司股份合计24万股
- []今日报丨ST宏达实控人被证监会拟罚1000万元 律师明确可索赔区间
- []远洋集团11月协议销售额108.6亿 前11月累计销售895亿元
- []财面儿|金地商置与金地集团续订两个服务协议 自明年1月1日起生效
- []快看点丨财面儿丨中国金茂1-11月累计取得签约销售金额共1374.8亿元
- []每日头条!粤水电:公司本次重组已取得中国证监会的核准批复,相关工作正在进行当中
- []每日动态!上坤地产:2022年前11个月合约销售额约79.2亿元
- []全球热讯:财面儿|金地“21金地MTN007”将于12月15日偿付利息6060万元
- []旭辉控股集团前11月合同销售1175.9亿元
- []天天消息!二手房周报 | 15城成交再降8%,京蓉等皆不及年内周均(11.28-12.4)
- []韦尔股份:公司会一如既往的努力加强经营管理,努力做好经营,提升公司竞争力,实现稳定的业绩增长回馈股东
- []今日播报!宜昌城发地产底价29.6亿竞得宜昌市伍家岗4宗地块
- []香港11月底官方外汇储备资产增加60亿美元
- []全球微资讯!中天金融:公司逾期债务对应的担保余额15.1亿元
- []新华都:北京重力久致科技有限公司将在经营范围内开展工作
- []武商集团:公司目前仅在南昌有酒店项目
- []天天热消息:江苏无锡支持“外摆位” 打造“夜市经济”
- []快看:印度股市年均回报率接近20%,IT、材料、工业等行业回报率高
- []国际航协:全球航空业今年亏损收窄,明年将回归盈利
- []头条:龙光集团境内债整体展期获得通过 累计展期规模超223亿元
- []环球今头条!上海中海物业因未履行二次供水水质检测等被处罚6000元
- []环球焦点!沃森生物:公司在研新冠疫苗项目均在努力推进上市进程,公司将根据临床进度和数据情况开展上市申报
- []全球快讯:英飞拓:公司暂未开展与卡塔尔世界杯足球赛相关业务
- []天天快资讯丨上坤地产:前11月合约销售金额约为79.2亿元
- []讯息:世茂股份:1-11月销售签约金额约86亿,销售签约面积约66万平方米
- []环球速看:2023年楼市怎么走,房价涨不涨?最早一份机构预测出炉
- []环球观速讯丨九丰能源:目前,公司境外主要货源地在马来西亚、印度尼西亚、澳大利亚、卡塔尔等地,气源供应优质、稳定
- []天天讯息:天虹股份:可以通过天虹APP及天虹小程序购买天优酱酒
- []环球微头条丨风能相关上市公司有哪些?风能上市公司龙头有哪些?
- []盐上市公司有哪些?相关上市公司龙头一览?
- []全球热门:安防概念股票有哪些?安防概念股龙头有哪些?
- []【环球新要闻】2021年地热概念股有哪些?相关地热概念股一览?
- []腾讯上市公司股票有哪些?相关腾讯上市公司有哪些?
- []龙光成第二家境内债整体展期房企 展期规模约220亿元
- []2021年超导概念股有哪些?超导概念龙头股一览?
- []全球视讯!安科生物股票今天多少钱一股?安科生物股票代码是多少?
- []讯息:2021年铜龙头概念股有哪些?铜概念股一览?
- []化纤行业板块上市公司有哪些?2021年化纤行业板块股票一览?
- []环球播报:雄安股票有哪些?相关雄安概念股票有哪些?
- []2021年新冠核酸上市公司龙头股票有哪些?2021年新冠核酸概念股有哪些?
- []2021年农林牧渔板块龙头股有哪些?股票代码是多少?
- []环球关注:万里扬: 公司在浙江省的独立储能电站项目都在正常推进中
- []人民币贬值受益股有哪些?人民币贬值板块股票2020一览?
- B站注册资本增幅400%至5亿 目前由陈睿全资持股
- 光源资本出任独家财务顾问 沐曦集成电路10亿元A轮融资宣告完成
- 巨轮智能2021年上半年营收11.24亿元 期内研发费用投入增长19.05%
- 红枣期货尾盘拉升大涨近6% 目前红枣市场总库存约30万吨
- 嘉银金科发布2021年Q2财报 期内净利润达1.27亿元同比增长208%
- 成都银行2021上半年净利33.89亿元 期内实现营收同比增长17.27亿元
- 汽车之家发布2021年第二季度业绩 期内新能源汽车品牌收入增长238%
- 中信银行上半年实现净利润290.31亿元 期末不良贷款余额706.82亿元
- 光伏概念掀起涨停潮交易价格创新高 全天成交额达1.29亿元
- 上半年生物药大增45% 关键财务指标好转营收账款持续下降
- 【全球新要闻】煤炭股票有哪些?煤炭概念股一览?
- 哪些是智能手表概念股?智能手表概念股名单一览?
- 高新兴股票价格是多少?高新兴公司经营范围有哪些?
- 焦点热讯:橡胶V带概念股票有哪些?橡胶V带概念股一览?
- 微动态丨石墨烯上市公司股票有哪些?石墨烯上市公司龙头一览?
- 【天天报资讯】OLED概念股有哪些?相关OLED概念股一览?
- 【热闻】永太科技:公司以含氟技术为核心,在氟苯精细化学品领域发展多年,产品种类繁多
- 水泥概念龙头股有哪些?水泥概念股有哪些?
- 环球热消息:中国铁建拟发行22亿元中期票据用于偿还到期债务
- 世界聚焦:ST宏达:公司目前尚未达到撤销其他风险警示的条件,相关事项请关注公司后续披露
- 国际金价下方支撑仍看向1758美元
- 天天看热讯:美原油交易策略:供给过剩担忧升温,油价或剑指70关口
- 天天资讯:数据 | 我国国际航线旅客量创疫情3年新高,但航班量相比全球仍处较低水平
- 世界快资讯:现货黄金交易策略:逢低买盘支撑金价,但下行压力依然较大
- 天天观点:内部收益率54.56% 联泓新科碳酸酯锂电材料项目将于月底前中交
- 全球通讯!华富储能股东江苏华富股份被司法冻结 占公司总股本11.96%
- 今日讯!一张图:交易品种枢纽点+多空占比一览(2022/12/07周三)
- 今日精选:里程碑丨热烈庆祝阿诗特能源第十万台户用储能电池模组下线!
- 【世界快播报】南瑞继保助力国家电投西藏5站光伏增配储能保供任务
- 当前观察:元旦假期公布,旅游平台机票、酒店搜索应声上涨超6倍
- 世界观速讯丨中国机场数字化转型的现实难题
- 天天快报!贵州山东杭州等地取消落地检,热门景区酒店还查核酸吗?
- 德银称近期金价可能测试1750美元支撑,2023年料相对稳定!
- 每日热文:各地优化疫情防控措施带动出游热,旅游产业链全面恢复尚需时间
- 丰原药业:注射用尿促性素属于促性腺激素药物
- 环球快资讯:12月7日如意集团涨停分析:抗菌面料,纺织服装,防护服概念热股
- 世界热讯:12月7日民和股份涨停分析:养鸡,大农业概念热股
- 4700米!融和元储助力世界海拔最高的储能电站并网投运
- 每日速读!境内债整体展期获得通过,龙光将回归良性健康发展轨道
- 【当前热闻】12月7日力合科创涨停分析:新冠病毒防治,医疗器械,碳基材料概念热股
- 江山经开区发展1.13亿元竞得衢州江山1宗商住用地
- 实时焦点:安澜城建3.68亿元竞得舟山岱山县1宗商住用地
- 方远房地产7.62亿元竞得台州三门县1宗商住用地 溢价率12.06%
- 环球关注:首开股份50亿元公司债券已获上交所受理
- 郭广科院长医美科普为什么有些隆胸术后会很假?
- 环球精选!12月7日汉王科技涨停分析:基因测序,流感/口罩,医疗信息化概念热股
- 55%看好杭州楼市!贝壳研究院发布购房者置业信心报告
- 北京煤医田秋梅:想咨询“花蕊私密整形”又羞于启齿?
- 北京嘉佩乐医院靠谱吗 正规可靠、保护患者就医权益
- 三维天地助力动物疫控预警预报系统升级改造
- vollgas花式助力葡萄牙,陪你世界杯熬夜看球
- 摩洛哥首度晋级八强,海信电视见证世界杯黑马诞生
- 1场进3球! 海信电视见证21岁葡萄牙小将一战成名
- 即时焦点:浅议当下奢华酒店产品和服务
- 全球快资讯丨中信建投期货12月7日早间交易策略
- 天天热消息:碧桂园拟配售17.8亿股 总筹48.06亿港元
- 立方数科:有关股东人数请您届时参看定期报告有关内容
- 学单词怕忘记——背词神器小z口袋单词卡帮你巩固记忆
- 北京发布“助企纾困12条”支持开发贷款等存量融资合理展期
- 天天即时看!悦心健康:截止11月30日,公司股东总户数82,729户,机构股东609户
- 环球即时:融创发布最新境内债重组方案 未到期债务展期4年
- 环球新消息丨化妆品板块反弹!产业链有望复苏,机构预计这些个股明年净利大增
- 每日看点!绿地控股:拟向不超过35名特定投资者非公开发行股票 募资用于保交楼相关项目
- 今亮点!龙湖发布中期股息以股代息计划 涉及23亿美元债券
- 天天热资讯!千味央厨:有关公司的战略规划,请查阅公司披露的定期报告
- 当前速读:雪榕生物:《OEM交易基础合同》为框架性协议,该合同的签订不会对公司本年度业绩造成重大影响
- 每日简讯:外汇交易提醒:美元逼近200日均线,看涨信号增加,关注加拿大央行决议
- 全球讯息:融资端困难解决之后 房地产下一个问题应如何化解?
- 今日精选:淄博房屋建设开发拟转让淄博齐轩地产100%股权 挂牌价2210万元
- 每日热闻!江西赣东路桥建设挂牌转让华辰置业30%股权 底价为875万元
- 汉马科技:公司指定信息披露媒体为《中国证券报》《上海证券报》及上海证券交易所网站
- 每日头条!270亿龙头出手 风口赛道现30亿并购案
- 焦点!中粮糖业:公司今年甜菜采收状况稳定
- 上海东浩兰生国贸集团拟2.17亿元转让灏震国际物流100%股权
- 全球短讯!皖新文化产业投资挂牌重庆皖新文投置业100%股权 底价仅1元
- 【世界新要闻】航企收钱的门道:创新支付方式
- 12月7日重点数据和大事件前瞻
- 【全球快播报】TD早报 | 海南多地调整跨省政策,三亚机票酒店预订量激增3倍
- 全球聚焦:怎么可以全部提取公积金,有以下四步
- 养老保险余额在哪里查询 如何查询养老保险余额
- 全球滚动:业绩快报 | 中海前11月合约物业销售2567亿 绿城合约销售2630亿
- 天天滚动:中装建设:中国邮政储蓄银行深圳分行与公司联合推进的数字人民币劳务薪资发放系统上线了公司智链平台
- 【全球新视野】公积金能补缴吗 可以补交公积金吗
- 聚焦:怎么查孩子交没交学平险 如何查询学平险有没有买
- 全球看点:辞职了公积金怎么取,去公积金中心提取
- 利空加元!加银本周将进一步激进加息?专家称市场对此缺乏信心
- 焦点!【实探】北京有序恢复堂食,火锅店接到20余桌预订!理发店也要排长队……
- 华仁药业:公司管理团队的简历情况请查阅公司在巨潮资讯网披露的《2021年年度报告》
- 京基智农拟为3家子公司提供合计不超过6.16亿元担保
- 建发国际完成配股 获得8亿港元现金
- 【环球快播报】财面儿丨绿地控股:拟向不超过35名特定投资者非公开发行股票
- 世界微资讯!物业丨新大正:1.28亿股限售股将于12月12日解禁上市
- 山东章鼓:12月5日公司高管许春东、王崇璞减持公司股份合计18.38万股
- 鼎龙股份:12月5日公司高管苏敏光减持公司股份合计1000股
- 今热点:财面儿|融信中国前11月合约销售额567.97亿元
- 祥生控股前11月合约销售额228.75亿元
- 热议:中科信息:12月5日公司高管王晓宇减持公司股份合计16.5万股
- 财面儿丨保利置业前11月合同销售额450亿元
- 环球简讯:泰福泵业:12月5日公司高管毛世良减持公司股份合计2.23万股
- 保隆科技:12月5日公司高管尹术飞减持公司股份合计6000股
- 艾迪精密:12月5日公司高管宋飞增持公司股份合计8.14万股
- 当前通讯!“第三支箭”发力,房企洗牌加速,中小市值国央企存中期成长机会
- 【环球新要闻】沃森生物:疫苗行业具有高投入、高壁垒、高回报、长周期的特点
- 环球热门:资本月报 | 房企融资利好政策频出,近期将迎来一波配股潮(2022年11月)
- 简讯:奥园集团公开招标:出让奥园健康29.9%股权
- 政策支持房地产平稳健康发展,金科近期利好频传
- 全球观天下!道通科技3名股东合计减持865.76万股 套现合计2.96亿 2022年前三季度公司净利1.02亿
- 金科股份与中国光大银行重庆分行签订战略合作协议
- 天天观察:海南多地调整省外来(返)人员政策,三亚“小院儿”民宿预订量环比增六成
- 当前信息:贝壳静默期后回购重启,12月5日耗资200万美元