📄 simusas.cpp
字号:
#include "simusas.h"static SYC sYCS[] = { {80003,0,0xffff}, {80005,0,0xffff}, {100003,0,0xffff}, {100005,0,0xffff}, {20417,0,0xffff}, {20449,0,0xffff}, {20481,0,0xffff}, {20513,0,0xffff}, {90003,0,0xffff}, {90005,0,0xffff}, {80001,1,0xffff}, {30005,0,0xffff}, {120003,0,0xffff}, {90001,1,0xffff}, {110003,0,0xffff}, {110005,0,0xffff}, {10005,0,0xffff}, {10009,1,0xffff}, {70001,0,0xffff}, {70002,0,0xffff}, {70009,1,0xffff}, {70003,0,0xffff}, {50009,1,0xffff}, {50003,0,0xffff} };static DWORD dwYXS[] = { 20005,10005,20009,20011,10011,10007,20007,10015, 20001,40002,10001,10003,20003,30002,60012,10013,10009};void CCXSerialNo::Init(){ m_pYCChar = sYCS; m_pwYXSerialNo = dwYXS; m_wYCNum = sizeof(sYCS)/sizeof(SYC); m_wYXNum = sizeof(dwYXS)/sizeof(DWORD);}void CSimuSAS::SendCycleData(){ SYC* pYCS; for (BYTE bbb=0; ;bbb++) { pYCS = m_CXSerialNo.GetYCS(bbb); if (pYCS == NULL) { SendYX(); break; } else { CAnalog* pAnalog = m_pAllMgr->GetAnalog(pYCS->m_dwYCNo); if (pAnalog) { float fValue = pAnalog->GetValue(); WORD wValue = FloatToWORD(fValue,pYCS->m_byPointBit); if (wValue != pYCS->m_wValue) { CFrameNode fnS; fnS.m_byCID = 1; fnS.m_wSize = 4; fnS.m_byDesAddr = bbb; fnS.m_bySrcAddr = bbb; pYCS->m_wValue = wValue; WORDToBuf(wValue,fnS.m_pbyData); m_DLService.RESP(&fnS); }// else SendYX(); } } }}void CSimuSAS::SendYX(){ CDigital* pDigital; BYTE abyBuf[4]; DWORD dwValue = 0; for (char b=0;b<32;b++) { WORD wYXX = m_CXSerialNo.GetYXNo(b); if (wYXX != 0xffff) { pDigital = m_pAllMgr->GetDigital(wYXX); if (pDigital) { if (pDigital->GetValue()) { dwValue |= (1<<b); } } } } abyBuf[0] = (BYTE)((dwValue & 0xff000000)>>24); abyBuf[1] = (BYTE)((dwValue & 0x00ff0000)>>16); abyBuf[2] = (BYTE)((dwValue & 0x0000ff00)>>8); abyBuf[3] = (BYTE)(dwValue & 0x000000ff); CFrameNode fnS; fnS.m_byDesAddr = 0; fnS.m_bySrcAddr = 0; fnS.m_byCID = 0; fnS.m_wSize = 4; memcpy(fnS.m_pbyData,abyBuf,4); m_DLService.RESP(&fnS);}/*void CSimuSAS::SetYC(DWORD dwYCNo){ BYTE byYCSerialNo = m_CXSerialNo.GetYCIndex(dwYCNo); BYTE byPointBit = m_CXSerialNo.GetYCPointBit(dwYCNo); if (byYCSerialNo != 0xff) { int Index=g_yck.GetIndex(wYCNo); if(Index==-1) return; CAnalog* pAnalog = g_pData->GetAnalog(Index); if (pAnalog) { float fValue = pAnalog->GetValue(); CSimuFrame frameSimu; BYTE abyBuf[4]; frameSimu.FloatToBuf(fValue,abyBuf,4,byPointBit); frameSimu.SetupFrame(byYCSerialNo,1,abyBuf,4); CMailNode mn; mn.m_lSize = frameSimu.FrameToBuffer(mn.m_pBuf); CMailQueue* pmqSend = m_mail.GetSendMailQueue(); pmqSend->AddMailTail(mn.m_pBuf,mn.m_lSize); } }}void CSimuSAS::SetYX(WORD wYXNo){ BYTE byYXSerialNo = m_CXSerialNo.GetYXIndex(wYXNo); if (byYXSerialNo != 0xff) { BYTE byGroupNo = byYXSerialNo/32; CDigital* pDigital; BYTE abyBuf[4]; DWORD dwValue = 0; WORD m_b=1; for (char b=0;b<32;b++) { WORD wYXX = m_CXSerialNo.GetYXNo(byGroupNo*32+b); if (wYXX != 0xffff) { BOOL bValue; int Index=g_yxk.GetIndex(wYXX); if(Index==-1)continue; pDigital = g_pData->GetDigital(Index); if (pDigital) { if (!(bValue = pDigital->GetValue())) { dwValue |= (1<<b); } } } } abyBuf[0] = BYTE((dwValue & 0xff000000)>>24); abyBuf[1] = BYTE((dwValue & 0x00ff0000)>>16); abyBuf[2] = BYTE((dwValue & 0x0000ff00)>>8); abyBuf[3] = BYTE(dwValue & 0x000000ff); CSimuFrame frameSimu; frameSimu.SetupFrame(byGroupNo,0,abyBuf,4); CMailNode mn; mn.m_lSize = frameSimu.FrameToBuffer(mn.m_pBuf); CMailQueue* pmqSend = m_mail.GetSendMailQueue(); pmqSend->AddMailTail(mn.m_pBuf,mn.m_lSize); }}*/void* CycleSend(void *pVoid){ pthread_setcancelstate(PTHREAD_CANCEL_ENABLE,NULL); pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS,NULL); CSimuSAS *pAS = (CSimuSAS *)pVoid; do { sleep(5); } while (pAS->m_DLService.Status() != 0); while (1) { usleep(200000); pAS->SendCycleData(); }}bool CSimuSAS::Init(){ bool bRet = false; pthread_attr_t attr; pthread_attr_init(&attr); pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_DETACHED); if (pthread_create(&m_hThreadSend,&attr,CycleSend,(void *)this) == 0) bRet = true; else m_hThreadSend = 0; pthread_attr_destroy(&attr); return bRet;}CSimuSAS::CSimuSAS(CAllMgr* pAllMgr,CSerialPortDef* pChannel) : CSAppService(pAllMgr,true) , m_DLService(pChannel){ m_hThreadSend = 0;}CSimuSAS::~CSimuSAS(){ if (m_hThreadSend > 0) { cout << "CSimuSAS" << m_hThreadSend << endl; pthread_cancel(m_hThreadSend); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -