|
|
@@ -53,26 +53,25 @@ void CChengzhongWorker::HandleWork()
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- std::string m_chuankou_string = "";
|
|
|
+ std::string m_chuankou_string = "";
|
|
|
|
|
|
- char a[100] = { 0 };
|
|
|
-
|
|
|
- //检查监控模式和波特率,如果变了就关闭掉
|
|
|
while (m_is_work)
|
|
|
{
|
|
|
- memset(a, 0, 100);
|
|
|
+ //不同型号的电子秤,数据格式可能不一样,处理方式不一样
|
|
|
+ if (setting_dianzicheng_xinghao == "dahua_acs")
|
|
|
+ {
|
|
|
+ char a[100] = { 0 };
|
|
|
|
|
|
- //开始读取串口的数据
|
|
|
- DWORD nReaded = 0;
|
|
|
+ memset(a, 0, 100);
|
|
|
|
|
|
- m_serial.readFromComm(a, 100, &nReaded);
|
|
|
+ //开始读取串口的数据
|
|
|
+ DWORD nReaded = 0;
|
|
|
|
|
|
- if (nReaded > 0)
|
|
|
- {
|
|
|
- //不同型号的电子秤,数据格式可能不一样,处理方式不一样
|
|
|
+ m_serial.readFromComm(a, 100, &nReaded);
|
|
|
|
|
|
- if (setting_dianzicheng_xinghao == "dahua_acs")
|
|
|
+ if (nReaded > 0)
|
|
|
{
|
|
|
+
|
|
|
//把所有读到的内容,拼接到m_chuankou_string后面,避免有的数据中间截断导致格式混乱
|
|
|
m_chuankou_string += a;
|
|
|
|
|
|
@@ -142,12 +141,67 @@ void CChengzhongWorker::HandleWork()
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- //暂时不支持的其他型号
|
|
|
+ Sleep(100);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else if (setting_dianzicheng_xinghao == "dingjian_os2x")
|
|
|
+ {
|
|
|
+ char a[16] = { 0 };
|
|
|
+
|
|
|
+ memset(a, 0, 16);
|
|
|
+
|
|
|
+ //开始读取串口的数据
|
|
|
+ DWORD nReaded = 0;
|
|
|
+
|
|
|
+ m_serial.readFromComm(a, 16, &nReaded);
|
|
|
+
|
|
|
+ if (nReaded > 0)
|
|
|
+ {
|
|
|
+ //把所有读到的内容,拼接到m_chuankou_string后面,避免有的数据中间截断导致格式混乱
|
|
|
+ m_chuankou_string = a;
|
|
|
+
|
|
|
+ if (a[0] != 0x01 || a[1] != 0x02 || a[13] != 0x03 || a[14] != 0x04)
|
|
|
+ {
|
|
|
+ //说明这16个字节的数据不是完整的,这个时候处理方式是把错误数据全部读完,但是不处理,然后下次接着处理
|
|
|
+ std::string show_command = "\x01\x02";
|
|
|
+
|
|
|
+ size_t nPos = m_chuankou_string.find(show_command);
|
|
|
+ if (nPos == m_chuankou_string.npos)
|
|
|
+ {
|
|
|
+ //不存在标志服,数据错误
|
|
|
+ m_chuankou_string = "";
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ //把废数据读出来,不处理,下次重新读16个完整的
|
|
|
+ m_serial.readFromComm(a, nPos, &nReaded);
|
|
|
+
|
|
|
+ m_chuankou_string = "";
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ std::string weight = m_chuankou_string.substr(4, 6);
|
|
|
+
|
|
|
+ if (weight.at(0) == '0')
|
|
|
+ {
|
|
|
+ weight = weight.substr(1);
|
|
|
+ }
|
|
|
+
|
|
|
+ m_weight = weight;
|
|
|
+
|
|
|
+ if (m_hwnd != NULL)
|
|
|
+ {
|
|
|
+ ::SendMessage(m_hwnd, WM_CHENGZHONG_SUCCESS, 0, 0);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
Sleep(100);
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
+ //暂时不支持的其他型号
|
|
|
Sleep(100);
|
|
|
}
|
|
|
}
|