📄 mfcjogdlg.cpp
字号:
{
// Send the current Jog settings to the controller
UpdateData();
m_Cntl->SetFlag(799+(32*m_Axis),m_JLockoutON,true); // Jog Lockout
m_Cntl->SetFlag(798+(32*m_Axis),m_JLimitsON,true); // Jog Limits Enabled
m_Cntl->SetParmFloat(12334+(256*m_Axis),m_JogLimit2,true); // Pos Limit
m_Cntl->SetParmFloat(12335+(256*m_Axis),m_JogLimit1,true); // Neg Limit
m_Cntl->SetParmFloat(12349+(256*m_Axis),m_JogAcc,true); // Jog Acc
m_Cntl->SetParmFloat(12348+(256*m_Axis),m_JogVel,true); // Jog Vel
m_Cntl->SetParmFloat(12350+(256*m_Axis),m_JogDec,true); // Jog Dec
m_Cntl->SetParmFloat(12351+(256*m_Axis),m_JogJrk,true); // Jog Jrk
}
void CMFCJogDlg::OnJogPos()
{
// Jog Forward
m_Cntl->SetFlag(796 + (m_Axis * 32), true, true);
}
void CMFCJogDlg::OnJogNeg()
{
// Jog in Reverse
m_Cntl->SetFlag(797 + (m_Axis* 32), true, true);
}
void CMFCJogDlg::OnJogStop()
{
// Jog Stop
m_Cntl->SetFlag(796 + (m_Axis * 32), false, true);
m_Cntl->SetFlag(797 + (m_Axis* 32), false, true);
}
void CMFCJogDlg::OnSelchangeCboMaster()
{
// When a different master is choosen, update the status
UpdateData();
if(m_Stat->GetIsOffline()) return;
// initialize realtime status
ostringstream led;
led << _T("P") << 4112 + m_Master << _T(",P4272");
if(m_masterMsgId) m_Stat->DelStatus(m_masterMsgId);
m_masterMsgId = m_Stat->AddACRCustom(led.str().c_str());
UpdateData(FALSE);
}
void CMFCJogDlg::OnSelchangeCboAxis()
{
// When a different axis is choosen, update the status and display of the initial jog settings
UpdateData();
ostringstream axis;
axis << _T("AXIS") << m_Axis;
m_CurrAxis = axis.str().c_str();
if(m_Stat->GetIsOffline()) return;
// initialize realtime status
ostringstream led;
led << _T("P") << 4360 + m_Axis << _T(",P") << 4120 + m_Axis << _T(",P") << 12297 + (256 * m_Axis) << _T(",P") << 12295 + (256 * m_Axis);
if(m_axisMsgId) m_Stat->DelStatus(m_axisMsgId);
m_axisMsgId = m_Stat->AddACRCustom(led.str().c_str());
// P4120 + Axis Number holds the jog flags
SAFEARRAY* pSA1;
long lBound1 = 0;
CComVariant vItem1; // The CComVariant is found in the atlbase.h include file
CComVariant vflags; // it will clean up SAFEARRAY when it goes out of scope.
long holdFlags = 0;
// Get the value of the p_Parm, returned in a safearray
ostringstream pFlag;
pFlag << _T("P") << (4120 + m_Axis);
vflags = m_Stat->GetACRCustom(pFlag.str().c_str());
if(vflags.vt & VT_ARRAY){
pSA1 = vflags.parray;
SafeArrayGetElement(pSA1, &lBound1, &vItem1);
if(vItem1.vt!=VT_EMPTY)
holdFlags = vItem1.lVal;
}else
holdFlags = 0;
bitset<32> bitMask(holdFlags);
m_JLimitsON = bitMask.at(30);
m_JLockoutON = bitMask.at(31);
SAFEARRAY* pSA2;
long lBound2 = 0;
CComVariant vItem2; // The CComVariant is found in the atlbase.h include file
CComVariant vparms; // it will clean up SAFEARRAY when it goes out of scope.
// Get the value of the p_Parm, returned in a safearray
ostringstream pParm;
pParm << _T("P") << (12334 + (256 * m_Axis)) << _T(","); // Pos Jog Limit
pParm << _T("P") << (12335 + (256 * m_Axis)) << _T(","); // Neg Jog Limit
pParm << _T("P") << (12349 + (256 * m_Axis)) << _T(","); // Jog Acc
pParm << _T("P") << (12348 + (256 * m_Axis)) << _T(","); // Jog Vel
pParm << _T("P") << (12350 + (256 * m_Axis)) << _T(","); // Jog Dec
pParm << _T("P") << (12351 + (256 * m_Axis)); // Jog Jrk
vparms = m_Stat->GetACRCustom(pParm.str().c_str());
if(vparms.vt & VT_ARRAY){
pSA2 = vparms.parray;
SafeArrayGetElement(pSA2, &lBound2, &vItem2);
if(vItem2.vt!=VT_EMPTY)
m_JogLimit2 = vItem2.fltVal;
++lBound2;
SafeArrayGetElement(pSA2, &lBound2, &vItem2);
if(vItem2.vt!=VT_EMPTY)
m_JogLimit1 = vItem2.fltVal;
++lBound2;
SafeArrayGetElement(pSA2, &lBound2, &vItem2);
if(vItem2.vt!=VT_EMPTY)
m_JogAcc = vItem2.fltVal;
++lBound2;
SafeArrayGetElement(pSA2, &lBound2, &vItem2);
if(vItem2.vt!=VT_EMPTY)
m_JogVel = vItem2.fltVal;
++lBound2;
SafeArrayGetElement(pSA2, &lBound2, &vItem2);
if(vItem2.vt!=VT_EMPTY)
m_JogDec = vItem2.fltVal;
++lBound2;
SafeArrayGetElement(pSA2, &lBound2, &vItem2);
if(vItem2.vt!=VT_EMPTY)
m_JogJrk = vItem2.fltVal;
}else{
m_JogLimit1 = 0;
m_JogLimit2 = 0;
m_JogAcc = 0;
m_JogVel = 0;
m_JogDec = 0;
m_JogJrk = 0;
}
UpdateData(FALSE);
}
LONG CMFCJogDlg::OnUpdateStats(UINT,LONG xMsgid)
{
// The StatusWaiting event will trigger when ever a status changes. Check
// which status request (for Master info or Axis info) generated the event
// and then read that status request. The status requests are set up at
// connection time or when the dropdown listboxes specifying the master/axis
// are changed.
// NOTE: The radio buttons used to simulate LEDs show as "on" when they are
// set to the value zero, and "off" for non-zero values.
SAFEARRAY* pSA1;
long lBound1 = 0;
CComVariant vItem1; // The CComVariant is found in the atlbase.h include file
CComVariant vaxis; // it will clean up SAFEARRAY when it goes out of scope.
bitset<32> holdDriveFlags(0);
bitset<32> holdJogFlags(0);
// Check on the Axis Status
// index 0 = P4360 + Axis Number
// index 1 = P4120 + Axis Number
// index 2 = P12297 + (Axis Number * 256)
// index 3 = P12295 + (Axis Number * 256)
if(xMsgid == m_axisMsgId){
vaxis = m_Stat->GetStatus(m_axisMsgId);
if(vaxis.vt & VT_ARRAY){
pSA1 = vaxis.parray;
SafeArrayGetElement(pSA1, &lBound1, &vItem1);
if(vItem1.vt!=VT_EMPTY)
holdDriveFlags = vItem1.lVal;
++lBound1;
SafeArrayGetElement(pSA1, &lBound1, &vItem1);
if(vItem1.vt!=VT_EMPTY)
holdJogFlags = vItem1.lVal;
++lBound1;
SafeArrayGetElement(pSA1, &lBound1, &vItem1);
if(vItem1.vt!=VT_EMPTY)
m_JogOffset = vItem1.lVal;
++lBound1;
SafeArrayGetElement(pSA1, &lBound1, &vItem1);
if(vItem1.vt!=VT_EMPTY)
m_SetPoint = vItem1.lVal;
}else{
holdDriveFlags = 0;
holdJogFlags =0;
}
m_Drive = !(holdDriveFlags.at(17));
m_KAMR = !(holdDriveFlags.at(19));
m_JActive = !(holdJogFlags.at(24));
m_JSpeed = !(holdJogFlags.at(26));
m_JStop = !(holdJogFlags.at(27));
}
SAFEARRAY* pSA2;
long lBound2 = 0;
CComVariant vItem2; // The CComVariant is found in the atlbase.h include file
CComVariant vmaster; // it will clean up SAFEARRAY when it goes out of scope.
bitset<32> holdMotion(0);
bitset<32> holdVolt24(0);
// Check on the Master Status
// index 0 = P4112 + Master Number
// index 1 = P4272
if(xMsgid == m_masterMsgId){
vmaster = m_Stat->GetStatus(m_masterMsgId);
if(vmaster.vt & VT_ARRAY){
pSA2 = vmaster.parray;
SafeArrayGetElement(pSA2, &lBound2, &vItem2);
if(vItem2.vt!=VT_EMPTY)
holdMotion = vItem2.lVal;
++lBound2;
SafeArrayGetElement(pSA2, &lBound2, &vItem2);
if(vItem2.vt!=VT_EMPTY)
holdVolt24 = vItem2.lVal;
}else{
holdMotion = 0;
holdVolt24 =0;
}
m_Motion = !(holdMotion.at(4));
m_KAM = !(holdMotion.at(10));
m_24vEnable = !(holdVolt24.at(13));
}
UpdateData(FALSE);
return 0;
}
// The radio buttons are used as a poor man's led, so make them read only.
void CMFCJogDlg::OnLed24venable()
{
UpdateData(FALSE);
}
void CMFCJogDlg::OnLedKam()
{
UpdateData(FALSE);
}
void CMFCJogDlg::OnLedMotion()
{
UpdateData(FALSE);
}
void CMFCJogDlg::OnLedKamr()
{
UpdateData(FALSE);
}
void CMFCJogDlg::OnLedDrive()
{
UpdateData(FALSE);
}
void CMFCJogDlg::OnLedJstop()
{
UpdateData(FALSE);
}
void CMFCJogDlg::OnLedJspeed()
{
UpdateData(FALSE);
}
void CMFCJogDlg::OnLedJactive()
{
UpdateData(FALSE);
}
// **ADDED**
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -