|
@@ -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));
|
|
|
}
|
|
|
|
|
|
|