Implementing to Read Text File with Many Values

To used ProtocolsDlg to read text file with many values and send it to

Page 1 of 1

1 Replies - 3148 Views - Last Post: 19 January 2010 - 11:33 AM Rate Topic: -----

#1 poxusa  Icon User is offline

  • New D.I.C Head

Reputation: 0
  • View blog
  • Posts: 2
  • Joined: 19-January 10

Implementing to Read Text File with Many Values

Posted 19 January 2010 - 11:27 AM


// ProtocolsDlg.cpp : implementation file
//

#include "stdafx.h"
#include "Protocols.h"
#include "ProtocolsDlg.h"
#include <NIDAQmx.h>
#include <math.h>
#include <time.h>

#include <assert.h>
#include <stdio.h>


#ifdef _DEBUG
#define new DEBUG_NEW
#endif


// CAboutDlg dialog used for App About

class CAboutDlg : public CDialog
{
public:
	CAboutDlg();

// Dialog Data
	enum { IDD = IDD_ABOUTBOX };

	protected:
	virtual void DoDataExchange(CDataExchange* pDX);	// DDX/DDV support

// Implementation
protected:
	DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
END_MESSAGE_MAP()


// CProtocolsDlg dialog




CProtocolsDlg::CProtocolsDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CProtocolsDlg::IDD, pParent)
	, m_iPort(0)
	, m_iCh(0)
	, m_iTrial(0)
{
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CProtocolsDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	DDX_Control(pDX, IDC_AMPC, m_cAmp);
	DDX_CBIndex(pDX, IDC_Port, m_iPort);
	DDX_CBIndex(pDX, IDC_CH, m_iCh);
	DDX_CBIndex(pDX, IDC_TrialNumber, m_iTrial);
}

BEGIN_MESSAGE_MAP(CProtocolsDlg, CDialog)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	//}}AFX_MSG_MAP
	ON_CBN_SELCHANGE(IDC_Port, &CProtocolsDlg::OnCbnSelchangePort)
	ON_BN_CLICKED(IDC_CONNECT, &CProtocolsDlg::OnBnClickedConnect)
	ON_BN_CLICKED(IDC_DISCONNECT, &CProtocolsDlg::OnBnClickedDisconnect)
	ON_BN_CLICKED(IDC_ServoOn, &CProtocolsDlg::OnBnClickedServeron)
	ON_BN_CLICKED(IDC_ServoOff, &CProtocolsDlg::OnBnClickedServooff)
	ON_BN_CLICKED(IDC_ErrReset, &CProtocolsDlg::OnBnClickedErrreset)
	//ON_BN_CLICKED(IDC_BUTTON2, &CProtocolsDlg::OnBnClickedButton2)
	ON_BN_CLICKED(IDC_go, &CProtocolsDlg::OnBnClickedgo)
	ON_BN_CLICKED(IDC_IMStop, &CProtocolsDlg::OnBnClickedImstop)
END_MESSAGE_MAP()


// CProtocolsDlg message handlers

BOOL CProtocolsDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// Add "About..." menu item to system menu.

	// IDM_ABOUTBOX must be in the system command range.
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);

	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != NULL)
	{
		CString strAboutMenu;
		strAboutMenu.LoadString(IDS_ABOUTBOX);
		if (!strAboutMenu.IsEmpty())
		{
			pSysMenu->AppendMenu(MF_SEPARATOR);
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
		}
	}

	// 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

	// TODO: Add extra initialization here




	return TRUE;  // return TRUE  unless you set the focus to a control
}

void CProtocolsDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
	{
		CAboutDlg dlgAbout;
		dlgAbout.DoModal();
	}
	else
	{
		CDialog::OnSysCommand(nID, lParam);
	}
}

// If you add a minimize button to your dialog, you will need the code below
//  to draw the icon.  For MFC applications using the document/view model,
//  this is automatically done for you by the framework.

void CProtocolsDlg::OnPaint()
{
	if (IsIconic())
	{
		CPaintDC dc(this); // device context for painting

		SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

		// Center icon in client rectangle
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		// Draw the icon
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialog::OnPaint();
	}
}

// The system calls this function to obtain the cursor to display while the user drags
//  the minimized window.
HCURSOR CProtocolsDlg::OnQueryDragIcon()
{
	return static_cast<HCURSOR>(m_hIcon);
}


void CProtocolsDlg::OnCbnSelchangePort()
{
	// TODO: Add your control notification handler code here
}

void CProtocolsDlg::OnBnClickedConnect()
{
	long		iRet;
	int			indx;
	CString		sRet;
	short		hTop;
	short		hMain;
	short		hSub;
	long		wKey;
	

	indx = ((CComboBox *)GetDlgItem(IDC_Port))->GetCurSel();
	switch(indx)
	{
		case 0:	m_iPort = 1;	break;
		case 1:	m_iPort = 2;	break;
		case 2:	m_iPort = 3;	break;
		case 3:	m_iPort = 4;	break;
		case 4:	m_iPort = 5;	break;
		case 5:	m_iPort = 6;	break;
		case 6:	m_iPort = 7;	break;
		case 7:	m_iPort = 8;	break;
	}
	indx = ((CComboBox *)GetDlgItem(IDC_CH))->GetCurSel();
	switch(indx)
	{
		case 0:	m_iCh = 0;	break;
		
	}

	iRet = m_cAmp.OpenPort(m_iPort);
	if (iRet == 0)
	{
		iRet = m_cAmp.OpenCh(m_iCh);
		if (iRet == 0)
		{
			m_bConnect = true;

			
		CString	sRetErr;
		long bopExist;
		long wpMainCode;
		long wpSubCode;
		short	hTopErr;
		short	hMainErr;
		short	hSubErr;
		long	wKeyErr;
		long	iRetErr;


		sRetErr=m_cAmp.GetError(m_iCh, &bopExist, &wpMainCode, &wpSubCode, &hTopErr, &hMainErr, &hSubErr, &wKeyErr, &iRetErr);
		if (bopExist == 0)
		{
			m_bResetErr = true;	
		}
		else
			m_bResetErr = false;
 
			ChangeEnable();
			sRet = m_cAmp.ChangeMode(m_iCh, 0, &hTop, &hMain, &hSub, &wKey, &iRet);



		}
	}
	
	
	
	
	// TODO: Add your control notification handler code here
}

void CProtocolsDlg::OnBnClickedDisconnect()
{
	long		iRet;
	iRet = m_cAmp.CloseCh(m_iCh);
	if (iRet == 0)
	{		
		iRet = m_cAmp.ClosePort();
		if (iRet == 0)
		{
			m_bConnect = false;
		}
			CString	sRetErr;
		long bopExist;
		long wpMainCode;
		long wpSubCode;
		short	hTopErr;
		short	hMainErr;
		short	hSubErr;
		long	wKeyErr;
		long	iRetErr;


		sRetErr=m_cAmp.GetError(m_iCh, &bopExist, &wpMainCode, &wpSubCode, &hTopErr, &hMainErr, &hSubErr, &wKeyErr, &iRetErr);
		if (bopExist == 0)
		{
			m_bResetErr = true;	
		}
		else
			m_bResetErr = false;
	
		
		ChangeEnable();
		
	}
	
	
	
	
	
	// TODO: Add your control notification handler code here
}

void CProtocolsDlg::OnBnClickedServeron()
{
	
	CString	sRet;
	short	hTop;
	short	hMain;
	short	hSub;
	long	wKey;
	long	iRet;

	if (m_bConnect == false)	return;

	sRet = m_cAmp.ServoControl(m_iCh, 1, &hTop, &hMain, &hSub, &wKey, &iRet);
	if (iRet == 0)
	{
		m_bServo = true;
	}
		CString	sRetErr;
		long bopExist;
		long wpMainCode;
		long wpSubCode;
		short	hTopErr;
		short	hMainErr;
		short	hSubErr;
		long	wKeyErr;
		long	iRetErr;


		sRetErr=m_cAmp.GetError(m_iCh, &bopExist, &wpMainCode, &wpSubCode, &hTopErr, &hMainErr, &hSubErr, &wKeyErr, &iRetErr);
		if (bopExist == 0)
		{
			m_bResetErr = true;	
		}
		else
			m_bResetErr = false;

		ChangeEnable();
	
	
	// TODO: Add your control notification handler code here
}

void CProtocolsDlg::OnBnClickedServooff()
{
	
		CString	sRet;
	short	hTop;
	short	hMain;
	short	hSub;
	long	wKey;
	long	iRet;

	if (m_bConnect == false)	return;


	sRet = m_cAmp.ServoControl(m_iCh, 0, &hTop, &hMain, &hSub, &wKey, &iRet);
	if (iRet == 0)
	{
		m_bServo = false;
	}
		CString	sRetErr;
		long bopExist;
		long wpMainCode;
		long wpSubCode;
		short	hTopErr;
		short	hMainErr;
		short	hSubErr;
		long	wKeyErr;
		long	iRetErr;


		sRetErr=m_cAmp.GetError(m_iCh, &bopExist, &wpMainCode, &wpSubCode, &hTopErr, &hMainErr, &hSubErr, &wKeyErr, &iRetErr);
		if (bopExist == 1)
		{
			m_bResetErr = true;
		}
		else
			m_bResetErr = false;

			ChangeEnable();
	
	
	
	// TODO: Add your control notification handler code here
}
void CProtocolsDlg::ChangeEnable(void)
{
if (m_bConnect == true)
	{
		(CButton*)GetDlgItem(IDC_CONNECT)->EnableWindow(FALSE);
		(CButton*)GetDlgItem(IDC_DISCONNECT)->EnableWindow(TRUE);

		(CButton*)GetDlgItem(IDC_Port)->EnableWindow(FALSE);
		(CButton*)GetDlgItem(IDC_CH)->EnableWindow(FALSE);
		
		if (m_bResetErr == false)
			(CButton*)GetDlgItem(IDC_ErrReset)->EnableWindow(TRUE);
		else 
			(CButton*)GetDlgItem(IDC_ErrReset)->EnableWindow(FALSE);


		  if (m_bServo == true)
			{								
				(CButton*)GetDlgItem(IDC_ServoOn)->EnableWindow(FALSE);
				(CButton*)GetDlgItem(IDC_ServoOff)->EnableWindow(TRUE);
				(CButton*)GetDlgItem(IDC_go)->EnableWindow(TRUE);
				(CButton*)GetDlgItem(IDC_TrialNumber)->EnableWindow(TRUE);
				(CButton*)GetDlgItem(IDC_IMStop)->EnableWindow(TRUE);
				


			}
			else
			{
				(CButton*)GetDlgItem(IDC_ServoOn)->EnableWindow(TRUE);
				(CButton*)GetDlgItem(IDC_ServoOff)->EnableWindow(FALSE);
				(CButton*)GetDlgItem(IDC_go)->EnableWindow(FALSE);
				(CButton*)GetDlgItem(IDC_TrialNumber)->EnableWindow(FALSE);
				(CButton*)GetDlgItem(IDC_IMStop)->EnableWindow(FALSE);
				
	
			}		
		
	}
	else
	{
		(CButton*)GetDlgItem(IDC_CONNECT)->EnableWindow(TRUE);
		(CButton*)GetDlgItem(IDC_DISCONNECT)->EnableWindow(FALSE);
		(CButton*)GetDlgItem(IDC_Port)->EnableWindow(TRUE);
		(CButton*)GetDlgItem(IDC_CH)->EnableWindow(TRUE);

		(CButton*)GetDlgItem(IDC_ServoOn)->EnableWindow(FALSE);
		(CButton*)GetDlgItem(IDC_ServoOff)->EnableWindow(FALSE);

	(CButton*)GetDlgItem(IDC_ErrReset)->EnableWindow(FALSE);

	
		(CButton*)GetDlgItem(IDC_IMStop)->EnableWindow(FALSE);
		(CButton*)GetDlgItem(IDC_go)->EnableWindow(FALSE);
		(CButton*)GetDlgItem(IDC_TrialNumber)->EnableWindow(FALSE);
		
		

	}
}

void CProtocolsDlg::OnBnClickedErrreset()
{
	// TODO: Add your control notification handler code here

	CString ResetError(long hCh, short* hpTopCode, short* hpMainCode, short* hpSubCode, long* hpKeyCode, long* hpRetCode);

	CString	sRet;
	short	hTop;
	short	hMain;
	short	hSub;
	long	wKey;
	long	iRet;

	if (m_bConnect == false)	return;

	sRet = m_cAmp.ResetError(m_iCh, &hTop, &hMain, &hSub, &wKey, &iRet);
	if (iRet == 0)
	{
		m_bEMStop  = false;
		m_bResetErr = true;
		ChangeEnable();
	}
}


void CProtocolsDlg::OnBnClickedgo()
{
	// TODO: Add your control notification handler code here
if (m_bConnect == false)	return;

		CString	sRetErr;
		long bopExist;
		long wpMainCode;
		long wpSubCode;
		short	hTopErr;
		short	hMainErr;
		short	hSubErr;
		long	wKeyErr;
		long	iRetErr;


		sRetErr=m_cAmp.GetError(m_iCh, &bopExist, &wpMainCode, &wpSubCode, &hTopErr, &hMainErr, &hSubErr, &wKeyErr, &iRetErr);
		if (bopExist == 0)
		m_bResetErr = true;	
		else
		m_bResetErr = false;

		///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
			// load protocols
	// load 1: Acceleration Duration = m_AccDValue in ms
	// load 2: Travel Duration = m_LenDValue in ms
	// load 3: Pause Duration = m_PauseDValue in ms
	// load 4: Travel Velocity = m_VelValue in *10 rps
 

	long myTrial0;//long myTrial[3];
	long myTrial1;
	long myTrial2;
	long myTrial3;


	FILE *fp;
	int	cnt;
	int indx;
  
   indx = ((CComboBox *)GetDlgItem(IDC_TrialNumber))->GetCurSel();
	switch(indx)
	{
		case 0:	
			m_iTrial = 1;
			fopen_s(&fp,"#1.txt", "r");  // load parameters of trial #1 from #1.txt
			break;
		case 1:	
			m_iTrial = 2;	
			fopen_s(&fp,"#2.txt", "r");
			break;
		case 2:	
			m_iTrial = 3;
			fopen_s(&fp,"#3.txt", "r");
			break;
		case 3:	
			m_iTrial = 4;
			fopen_s(&fp,"#4.txt", "r");
			break;
		case 4:	
			m_iTrial = 5;
			fopen_s(&fp,"#5.txt", "r");
			break;
		case 5:	
			m_iTrial = 6;
			fopen_s(&fp,"#6.txt", "r");
			break;
		case 6:	
			m_iTrial = 7;
			fopen_s(&fp,"#7.txt", "r");
			break;
		case 7:	
			m_iTrial = 8;
			fopen_s(&fp,"#8.txt", "r");
			break;
		case 8: 
			m_iTrial = 9;
			fopen_s(&fp,"#9.txt", "r");
			break;
		case 9: 
			m_iTrial = 10;
			fopen_s(&fp,"#10.txt", "r");
			break;
		case 10: 
			m_iTrial =11;
			fopen_s(&fp,"#11.txt", "r");
			break;
		case 11: 
			m_iTrial =12;
			fopen_s(&fp,"#12.txt", "r");
			break;
		case 12: 
			m_iTrial =13;
			fopen_s(&fp,"#13.txt", "r");
			break;
		case 13: 
			m_iTrial =14;
			fopen_s(&fp,"#14.txt", "r");
			break;
		case 14: 
			m_iTrial =15;
			fopen_s(&fp,"#15.txt", "r");
			break;
		case 15: 
			m_iTrial =16;
			fopen_s(&fp,"#16.txt", "r");
			break;
		case 16: 
			m_iTrial =17;
			fopen_s(&fp,"#17.txt", "r");
			break;
		case 17: 
			m_iTrial =18;
			fopen_s(&fp,"#18.txt", "r");
			break;
		case 18: 
			m_iTrial =19;
			fopen_s(&fp,"#19.txt", "r");
			break;
		case 19: 
			m_iTrial =20;
			fopen_s(&fp,"#20.txt", "r");
			break;
		
	}
 	
	

  if (fp != NULL) 
  {			
	 // for (cnt = 0; cnt < 4; ++cnt) 
	 // {	
	  fscanf_s (fp, "%ld", &myTrial0);
	  fscanf_s (fp, "%ld", &myTrial1);
	  fscanf_s (fp, "%ld", &myTrial2);
	  fscanf_s (fp, "%ld", &myTrial3);
	 // }
   fclose (fp);
  }
  
	long m_AccDValue = myTrial0;
	long m_LenDValue  = myTrial1;
	long m_PauseDValue  = myTrial2;
	long m_VelValue  = myTrial3;


	int i=0;
		float64 Rs[5000]; //7000
		float64 value;
		value = m_VelValue*1.5/10;
		int32   	written;



		////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	/// ********* generate analog voltage to servo motor
		TaskHandle taskHandleRs;
		DAQmxCreateTask("",&taskHandleRs);
	   	DAQmxCreateAOVoltageChan(taskHandleRs,"Dev1/ao0","",-10.0,10.0,DAQmx_Val_Volts,NULL);
		DAQmxCfgSampClkTiming(taskHandleRs,"",1000.0,DAQmx_Val_Rising,DAQmx_Val_FiniteSamps,5000);
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		
		
	////// ////////////////  velocity profile 	///////////////////////////////////////
	///***********************************************************************************/////
	
	  if(m_AccDValue>0) // ramp start
		{		
	 	for(i=0;i<m_AccDValue;i++)															///
		 {																					///
			Rs[i]=i*value/(m_AccDValue-1);													///
		 }																					///
		}
	  for(i=m_AccDValue;i<m_AccDValue+m_LenDValue;i++)															///
		 {																					///
			Rs[i]=value;													///
		 }
	  if(m_PauseDValue==0) // keep running until "stop" is clicked
	  {
		  for(i=m_AccDValue+m_LenDValue;i<5000;i++)															///
		 {																					///
			Rs[i]=value;													///
		 }

	  }
	  else // immediate stop or temporary pause
	  {
		  if(m_PauseDValue<1000) // temporary pause: 0 < pause duration < 1 seconds, you can change the value if you want longer pause duration
		  {
			  for(i=m_AccDValue+m_LenDValue;i<m_AccDValue+m_LenDValue+m_PauseDValue;i++)									///
			{																					///
				Rs[i]=0.0;																	///
			}		
				for(i=m_AccDValue+m_LenDValue+m_PauseDValue;i<5000;i++)
			{
				Rs[i]=value; // after a short pause, start running again until the "stop" is clicked
			}
		  }
		 else  // immediately permanently stop
		 {
			for(i=m_AccDValue+m_LenDValue;i<5000;i++)									///
			{																					///
				Rs[i]=0.0;																	///
			}		
		 }
	  }
	///***********************************************************************************/////
	

	  DAQmxWriteAnalogF64(taskHandleRs,5000,0,10.0,DAQmx_Val_GroupByChannel,Rs,&written,NULL);
	  DAQmxStartTask(taskHandleRs);
	  DAQmxWaitUntilTaskDone(taskHandleRs,10.0);
	  DAQmxStopTask(taskHandleRs);
	  DAQmxClearTask(taskHandleRs);

}

void CProtocolsDlg::OnBnClickedImstop()
{
	// TODO: Add your control notification handler code here

	if (m_bConnect == false)	return;

	CString	sRetErr;
		long bopExist;
		long wpMainCode;
		long wpSubCode;
		short	hTopErr;
		short	hMainErr;
		short	hSubErr;
		long	wKeyErr;
		long	iRetErr;


		sRetErr=m_cAmp.GetError(m_iCh, &bopExist, &wpMainCode, &wpSubCode, &hTopErr, &hMainErr, &hSubErr, &wKeyErr, &iRetErr);
		if (bopExist == 0)
		{
			m_bResetErr = true;	
		}
		else
			m_bResetErr = false;

	FILE	*fpp;
	int	cnt;
	int myTrial0;
	int myTrial1;
	int myTrial2;
	int myTrial3;

   fopen_s(&fpp,"#1.txt", "r");
   // for (cnt = 0; cnt < 4; ++cnt) 
	//  {	
	  fscanf_s (fpp, "%d", &myTrial0);
	  fscanf_s (fpp, "%d", &myTrial1);
	  fscanf_s (fpp, "%d", &myTrial2);
	  fscanf_s (fpp, "%d", &myTrial3);

	//  }
  fclose (fpp);
  int m_VelValue  = myTrial3;


		TaskHandle	taskHandle5=0;
		int i=0;
		float64 interOn[4000];
		float64 value;
		value = m_VelValue*1.5/10;

		DAQmxCreateTask("",&taskHandle5);
	 	DAQmxCreateAOVoltageChan(taskHandle5,"Dev1/ao0","",-10.0,10.0,DAQmx_Val_Volts,NULL);
	//	DAQmxCfgSampClkTiming(taskHandle5,"",1000.0,DAQmx_Val_Rising,DAQmx_Val_FiniteSamps,4000); // ramp stop
		DAQmxCfgSampClkTiming(taskHandle5,"",1000.0,DAQmx_Val_Rising,DAQmx_Val_ContSamps,4000);

  
		for(i=0;i<4000;i++)		
		{
		//	interOn[i]=value-i*value/3999; // ramp decrease profile 
			interOn[i]=0.0; // immediate stop
		}
		
	
	  //DAQmxWriteAnalogF64(taskHandle5,4000,0,10.0,DAQmx_Val_GroupByChannel,interOn,&written,NULL);  // ramp stop
		DAQmxWriteAnalogF64(taskHandle5,4000,0,10.0,DAQmx_Val_GroupByChannel,interOn,NULL,NULL);
   		DAQmxStartTask(taskHandle5);
	 // DAQmxWaitUntilTaskDone(taskHandle5,4.0); //// ramp stop
		DAQmxStopTask(taskHandle5);
		DAQmxClearTask(taskHandle5);

}


This post has been edited by JackOfAllTrades: 19 January 2010 - 12:41 PM


Is This A Good Question/Topic? 0
  • +

Replies To: Implementing to Read Text File with Many Values

#2 poxusa  Icon User is offline

  • New D.I.C Head

Reputation: 0
  • View blog
  • Posts: 2
  • Joined: 19-January 10

Re: Implementing to Read Text File with Many Values

Posted 19 January 2010 - 11:33 AM

[quote name='poxusa' date='19 Jan, 2010 - 10:27 AM' post='897385']
//[code] code here bellow

So I am trying to read the values in the text file and assign it to Rs[i] and read those values as the velocity. It need to load only one Travel Velocity. That would read the values in the text file assign it to Travel Velocity and the motor react accordingly. How can I implement when there is float64 and its double array?
// load 1: Acceleration Duration = m_AccDValue in ms
// load 2: Travel Duration = m_LenDValue in ms
// load 3: Pause Duration = m_PauseDValue in ms
// load 4: Travel Velocity = m_VelValue in *10 rps
Was This Post Helpful? 0
  • +
  • -

Page 1 of 1