浏览代码

发送完电压后,需要手动置为0电压,才能中断发送;

scbc.sat2 5 年之前
父节点
当前提交
ee528afb40
共有 1 个文件被更改,包括 66 次插入18 次删除
  1. 66 18
      DAControl/DAControl/DAControl.cpp

+ 66 - 18
DAControl/DAControl/DAControl.cpp

@@ -20,6 +20,8 @@ float g_fMaxVoltage = 0.0;
 #define new DEBUG_NEW
 #endif
 
+unsigned char Integer2Hex(int val);
+
 #ifdef __CONSOLE__ 
 // 唯一的应用程序对象
 
@@ -41,17 +43,31 @@ int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
 	else
 	{
 		// TODO: 在此处为应用程序的行为编写代码。
+#if 1
 		// 获取个位数和小数位;
 		int a = 0, b = 0;  // 个位数,小数位;
 		TCHAR szVolt[16] = {0};
-		_gcvt_s(szVolt, 1.256, 3);
+		_gcvt_s(szVolt, 3.256, 4);
 		sscanf_s(szVolt, _T("%d.%d"), &a, &b);
 
-		byte szSendData[SENDLEN] = {0};
-		_stprintf_s((TCHAR*)szSendData, SENDLEN, _T("%c%c%c%c%c"), 0x5A, 0, a, b, 0xA5);
-		int len = sizeof(szSendData);
+		for ( int i = 1; i >= 0; i--) {
+			byte szSendData[10] = {0};
+			_stprintf_s((TCHAR*)szSendData, 10, _T("%c%c%c%c%c"), 0x5A, 0, i ? Integer2Hex(a) : 0, i ? Integer2Hex(b) : 0, 0xA5);
+			int len = sizeof(szSendData);
 
-		printf("%s, %d,%d\n", szSendData, a, b);
+			printf("%s, %d,%d\n", szSendData, a, b);
+		}
+#else
+		// 打开设备;
+		if ( OpenDevice(3, 19200, 8, 0, 1) )
+		{
+			// 加载指定的电压表;
+			if ( OpenXML(_T("E:\\bin\\DAControl\\demo.xml")) == 0 )
+			{
+				SendKey(_T("left"));
+			}
+		}
+#endif
 	}
 
 	system("pause");
@@ -95,6 +111,29 @@ std::string toupper(const char *p)
 	return str;
 }
 
+// 数字转16进制,如:12 => 0x12
+unsigned char Integer2Hex(int val)
+{
+	// 只取10数和个数;
+	while( val > 99 )
+		val = val/10;
+
+	char Numb1 = val/10 + '0';	// 10位数;
+	char Numb2 = val%10 + '0';	// 个位数;
+
+	if (Numb1 >= 'A')
+		Numb1 = (toupper(Numb1) - '0' - 7) * 16;
+	else
+		Numb1 = (Numb1 - '0') * 16;
+
+	if (Numb2 >= 'A')
+		Numb2 = (toupper(Numb2) - '0' - 7);
+	else
+		Numb2 = (Numb2 - '0');
+
+	return (Numb1 + Numb2);
+}
+
 int __LoadXML(LPCTSTR lpXMLPath)
 {
 	if ( !lpXMLPath || !PathFileExists(lpXMLPath) )
@@ -111,14 +150,18 @@ int __LoadXML(LPCTSTR lpXMLPath)
 		if (_tcsicmp(pXmlRoot->Value(), "KeyList") == 0) {
 			// 属性;
 			const tinyxml2::XMLAttribute *pAttr = pXmlRoot->FirstAttribute();
-			if (pAttr) {
+			while (pAttr) {
 				if (_tcsicmp(pAttr->Name(), "MaxVolt") == 0) {
 					// 读出最大电压值;
 					const char* pVal = pAttr->Value();
 					if ( pVal ) {
 						g_fMaxVoltage = _tstof(pVal);
 					}
+
+					break;
 				}
+
+				pAttr = pAttr->Next();
 			}
 			
 			// 没有限制电压值;
@@ -230,20 +273,25 @@ DACONTROL_API bool SendKey(LPCTSTR lpKeyName)
 	// 获取个位数和小数位;
 	int a = 0, b = 0;  // 个位数,小数位;
 	TCHAR szVolt[16] = {0};
-	_gcvt_s(szVolt, pkeyItem->keyVolt, 3);
+	_gcvt_s(szVolt, pkeyItem->keyVolt, 4);
 	sscanf_s(szVolt, _T("%d.%d"), &a, &b);
 
 	// 封装发送包[0x5A, <通道号>, <电压个位数>, <电压小数位>, <A5>];
 	// 串口返回:原样返回数据;
-	byte szSendData[SENDLEN] = {0};
-	_stprintf_s((TCHAR*)szSendData, SENDLEN, _T("%c%c%c%c%c"), 0x5A, pkeyItem->keyIndex, a, b, 0xA5);
+	for ( int i = 1; i >= 0; i--) {
+		byte szSendData[SENDLEN] = {0};
+		_stprintf_s((TCHAR*)szSendData, SENDLEN, _T("%c%c%c%c%c"), 0x5A, pkeyItem->keyIndex, i ? Integer2Hex(a) : 0, i ? Integer2Hex(b) : 0, 0xA5);
 
-	DWORD dwNumberOfBytesWritten = g_synSerial.WriteComm(szSendData, SENDLEN - 1);
-	if ( dwNumberOfBytesWritten != (SENDLEN - 1) )
-		return false;
+		DWORD dwNumberOfBytesWritten = g_synSerial.WriteComm(szSendData, SENDLEN - 1);
+		if ( dwNumberOfBytesWritten != (SENDLEN - 1) )
+			return false;
+
+		DWORD dwNumberOfBytesRead = g_synSerial.ReadComm(szSendData, dwNumberOfBytesWritten);
+		//return dwNumberOfBytesRead ? true : false;
+		Sleep(300);
+	}
 
-	DWORD dwNumberOfBytesRead = g_synSerial.ReadComm(szSendData, dwNumberOfBytesWritten);
-	return dwNumberOfBytesRead ? true : false;
+	return true;
 }
 
 #ifdef __MAKE_PYD__
@@ -257,7 +305,7 @@ static PyObject* OpenXML(PyObject* self, PyObject* args)
 		return NULL;
 
 	// 加载成功返回0;
-	return Py_BuildValue("i", ::OpenXML(pszXmlPath));
+	return Py_BuildValue("i", OpenXML(pszXmlPath));
 }
 
 static PyObject* LoadXML(PyObject* self, PyObject* args)
@@ -268,7 +316,7 @@ static PyObject* LoadXML(PyObject* self, PyObject* args)
 		return NULL;
 
 	// 加载成功返回0;
-	return Py_BuildValue("i", ::LoadXML(pszXmlPath));
+	return Py_BuildValue("i", LoadXML(pszXmlPath));
 }
 
 static PyObject* OpenDevice(PyObject* self, PyObject* args)
@@ -277,7 +325,7 @@ static PyObject* OpenDevice(PyObject* self, PyObject* args)
 	if (!PyArg_ParseTuple(args, "i", &nPort))
 		return NULL;
 
-	return Py_BuildValue("b", ::OpenDevice(nPort, 9600, 8, 0, 1));	// 返回None;
+	return Py_BuildValue("b", OpenDevice(nPort, 9600, 8, 0, 1));	// 返回None;
 }
 
 //描述:连接设备,默认连接索引为0的设备;
@@ -293,7 +341,7 @@ static PyObject* SendKey(PyObject* self, PyObject* args)
 	if (!PyArg_ParseTuple(args, "s", &pszKenName))
 		return NULL;
 
-	return Py_BuildValue("b", ::SendKey(pszKenName));
+	return Py_BuildValue("b", SendKey(pszKenName));
 }