提交原始齿轮泵代码

This commit is contained in:
kite_lucs
2026-08-26 16:13:59 +08:00
commit afc8fcf2a4
1688 changed files with 316635 additions and 0 deletions
+469
View File
@@ -0,0 +1,469 @@
#include "modbusserial.h"
#include "InkJetPrinter.h"
#include <QDebug>
#include <QProcess>
#include "LogInfo.h"
/* ----------------------- Modbus includes ----------------------------------*/
#include "mb.h"
#include "mbport.h"
#include "demo.h"
/* ----------------------- Defines ------------------------------------------*/
//#define REG_INPUT_START 1
//#define REG_INPUT_NREGS 400
//#define REG_HOLDING_START 40001
//#define REG_HOLDING_NREGS 400
//#define REG_INPUT_START 1000
//#define REG_INPUT_NREGS 4
//#define REG_HOLDING_START 2000
//#define REG_HOLDING_NREGS 130
/* ----------------------- Static variables ---------------------------------*/
//static USHORT usRegInputStart = REG_INPUT_START;
//USHORT* usRegInputBuf;
//static USHORT usRegHoldingStart = REG_HOLDING_START;
//USHORT* usRegHoldingBuf;
void *uart_receive_thread(void *arg);
ModbusSerial::ModbusSerial(ModbusPrintParas *mPara, const ModbusPrintStatus* mStatus)
{
#ifdef MODBUS
// const UCHAR ucSlaveID[] = { 0xAA, 0xBB, 0xCC };
// qDebug()<< "modbusserial class\r\n";
modbus_status = 0;
modbus_up_QRCODE = 0;
port_num = 0;
input_registers = (uint16_t*) mStatus;
holding_registers = (uint16_t*) mPara;
QProcess process;
process.start("find /dev -name ttyUSB*");
process.waitForFinished();
QByteArray output = process.readAllStandardOutput();
QString str_output = output;
QString str_tmp;
for(int j = 0; j < str_output.length(); j++)
{
if(str_output[j] > '0' && str_output[j] < '9')
str_tmp.append(str_output[j]);
}
port_num = str_tmp.toInt(false, 10);
qDebug()<<"port_num="<<port_num;
if(0 == active_modbus(holding_registers, input_registers, port_num))
{
qDebug()<< "active_modbus success!\r\n";
modbus_status = 1;
}else
{
modbus_status = 0;
qDebug()<< "active_modbus ENOERR!\r\n";
}
#ifdef __com_485_
pthread_t thread1;
int res = pthread_create(&thread1, NULL, uart_receive_thread, NULL);
if(res != 0) {
qDebug()<< "create mqtt connect thread fail \r\n";
}
else
{
qDebug()<< "create mqtt connect thread success \r\n";
}
#endif
modbus_timer = new QTimer();
//connect(modbus_timer, SIGNAL(timeout()), this, SLOT(processCommands()));
//modbus_timer->start(100);
#endif
}
ModbusSerial::~ModbusSerial(void)
{
//#ifdef MODBUS
// disconnect(&serial_thread, SIGNAL(started()), this, SLOT(vPollingThread()));
// if (serial_thread.isRunning()) {
// serial_thread.quit();
// serial_thread.wait();
// }
( void )eMBDisable( );
vSetPollingThreadState( STOPPED );
( void )eMBClose();
//#endif
if(modbus_timer)
{
delete modbus_timer;
}
}
extern InkJetPrinter *pInkJectPrinter;
//void ModbusSerial::vPollingThread()
//{
// Serial_SetPollingThreadState( RUNNING );
//
// if (modbus_status != 1) {
//// char fileName[100];
//// memset(fileName, 0, 100);
//// snprintf(fileName, 100, "/home/plg/doc/104.html");
//// qDebug()<<"fileName:"<<fileName;
//// emit openFile(fileName, false);
// return;
// }
//
// if( eMBEnable( ) == MB_ENOERR )
// {
// do
// {
// if( eMBPoll( ) != MB_ENOERR )
// {
// qDebug()<<"modbus poll error";
// break;
// }
// }
// while( Serial_GetPollingThreadState( ) != SHUTDOWN );
// }
//
// qDebug()<<"eMBEnable( ) fail";
// if( eMBEnable( ) == MB_ENOERR )
// ( void )eMBDisable( );
//
// Serial_SetPollingThreadState( STOPPED );
//
// return;
//}
//
//enum ThreadState ModbusSerial::Serial_GetPollingThreadState()
//{
// enum ThreadState eCurState;
//
// modbusThreadMutex.lock();
// eCurState = Serial_PollThreadState;
// modbusThreadMutex.unlock();
//
// return eCurState;
//}
//
//
//void ModbusSerial::Serial_SetPollingThreadState( enum ThreadState eNewState )
//{
// modbusThreadMutex.lock();
// Serial_PollThreadState = eNewState;
// modbusThreadMutex.unlock();
//}
qint32 ModbusSerial::getModbusStatus()
{
return modbus_status;
}
#if 0
void ModbusSerial::processCommands()
{
QProcess process;
process.start("find /dev -name ttyUSB*");
process.waitForFinished();
QByteArray output = process.readAllStandardOutput();
QString str_output = output;
// qDebug()<< "str_output=\r\n"<<str_output;
#if 0
if( (true != str_output.contains("ttyUSB", Qt::CaseSensitive)) && (modbus_status==1) )
{
modbus_status = 0;
( void )eMBDisable( );
vSetPollingThreadState( STOPPED );
( void )eMBClose();
qDebug()<< "ttyUSB is gone\r\n";
}
#endif //改用板上485通讯
if( (modbus_status != 1) && (true == str_output.contains("ttyUSB", Qt::CaseSensitive)) )
{
QString str_tmp;
for(int j = 0; j < str_output.length(); j++)
{
if(str_output[j] > '0' && str_output[j] < '9')
str_tmp.append(str_output[j]);
}
port_num = str_tmp.toInt(false, 10);
if(0 == active_modbus(holding_registers, input_registers, port_num))
{
// qDebug() << "updateQRcode";
// modbus_up_QRCODE = true;
// emit updateQRcode();
qDebug()<< "active_modbus success!\r\n";
modbus_status = 1;
}else
{
modbus_status = 0;
// qDebug()<< "active_modbus ENOERR!\r\n";
}
}
// qDebug()<<"ModbusStatus: "<< modbus_status;
// qDebug()<<"PollingThreadState:"<< eGetPollingThreadState( );
if(modbus_status == 1)
{
if(holding_registers[0] == PRINT_START_COMMAND) {
holding_registers[0] = NULL_COMMAND;
LogInfo::setRunStatusText(tr("接收到开始打印命令"));
emit startPrint();
}
else if(holding_registers[0] == PRINT_PAUSE_COMMAND) {
holding_registers[0] = NULL_COMMAND;
LogInfo::setRunStatusText(tr("接收到暂停打印命令"));
emit pausePrint();
}
else if(holding_registers[0] == PRINT_STOP_COMMAND) {
holding_registers[0] = NULL_COMMAND;
LogInfo::setRunStatusText(tr("接收到停止打印命令"));
emit stopPrint();
}else if(holding_registers[0] == UPDATE_QRCODE) {
//else if(holding_registers[0] == 34) {
holding_registers[0] = NULL_COMMAND;
input_registers[0] = 0;//sysPara->modbusStatus.printFinishFlag = 0;//置打印标志
LogInfo::setRunStatusText(tr("接收到DM码数据命令"));
qDebug() << "updateQRcode";
modbus_up_QRCODE = true;
emit updateQRcode();
}
}
}
#endif
#ifdef __com_485_
class DevOp;
UCHAR revdata[100];
void ModbusSerial::processCommands()
{
if(revdata[0] == 10)
{
if(revdata[5] == PRINT_START_COMMAND) {
revdata[5] = NULL_COMMAND;
emit startPrint();
}
else if(revdata[5] == PRINT_PAUSE_COMMAND) {
revdata[5] = NULL_COMMAND;
emit pausePrint();
}
else if(revdata[5] == PRINT_STOP_COMMAND) {
revdata[5] = NULL_COMMAND;
emit stopPrint();
}else if(revdata[5] == UPDATE_QRCODE) {
//else if(holding_registers[0] == 34) {
revdata[5] = NULL_COMMAND;
qDebug() << "updateQRcode";
modbus_up_QRCODE = true;
emit updateQRcode();
}
}
}
void *uart_receive_thread(void *arg)
{
QByteArray temp;
QByteArray recResponse;
while(1)
{
if(DevOp::comForRFID->isOpen())
{
//int n = DevOp::comForRFID->write(temp);
//qDebug()<<"power com send "<<n<<"byte";
//return n;
}
else
{
qDebug()<<"read uart for RFID not open!";
return 0;
}
//sleep(200); // 延时200毫秒等待读写器返回数据,延时太小可能无法接收完整的数据包
//MySleep(200);
int n = DevOp::comForRFID->bytesAvailable();
if(n>0)
{
//recResponse.append(DevOp::comForRFID->read(n));
recResponse.clear();
recResponse = DevOp::comForRFID->read(n);
QString str;
str.sprintf("%d - %d - %d- %d", recResponse.at(0),recResponse.at(1),recResponse.at(2),recResponse.at(5));
qDebug()<<str;
memset(revdata,0,sizeof(revdata));
memcpy(revdata, recResponse, n);
if(revdata[0] == 10)
{
temp.clear();
temp.append((char *)revdata,n);
DevOp::comForRFID->write(temp);
qDebug()<<"write response data";
}
}
}
//return n;
}
#endif
qint32 ModbusSerial::processCommands(qint32 index)
{
qint32 rc = 0;
// 打印机指令
if(index == ((offsetof(ModbusPrintParas, printCommand) + sizeof(uint16_t))/2 - 1)) { // 打印控制
if(holding_registers[index] == PRINT_START_COMMAND) {
emit startPrint();
}
else if(holding_registers[index] == PRINT_PAUSE_COMMAND) {
emit pausePrint();
}
else if(holding_registers[index] == PRINT_STOP_COMMAND) {
emit stopPrint();
}
}
else if(index == ((offsetof(ModbusPrintParas, QRcode_buf) + 110)/2 - 1)) { // 传送DM码数据
qDebug() << "updateQRcode";
modbus_up_QRCODE = true;
emit updateQRcode();
}
else if(index == ((offsetof(ModbusPrintParas, selectFileName) + 100)/2 - 1)) { // 打开文件
char fileName[100];
int fileIndex = offsetof(ModbusPrintParas, selectFileName)/2;
memcpy(fileName, &holding_registers[fileIndex], 100);
//qDebug()<<"oopen file: "<<fileName;
if (strlen(fileName)) {
QFile mdOpenFile(QString("/home/plg/doc/%1").arg(fileName));
if (mdOpenFile.exists()) {
emit openFile(mdOpenFile.fileName(), false);
}
}
}
else if(index == ((offsetof(ModbusPrintParas, faultRusume) + sizeof(uint16_t))/2 - 1)) { // 报警恢复
emit faultResume();
}
else if(index == ((offsetof(ModbusPrintParas, setCalendar) + sizeof(calandar_and_dat_t))/2 - 1)) { // 设置计数器1,2
emit writeCalendar();
}
else if(index == ((offsetof(ModbusPrintParas, lineSpaceAndCharSpace) + sizeof(uint32_t))/2 - 1)) { // 设置字符间距和行间距
int lineSpace = holding_registers[index];
int charSpace = holding_registers[index-1];
//qDebug()<<"char space:"<< charSpace;
//qDebug()<<"line space:"<< lineSpace;
emit mbLineAndCharSpace(lineSpace, charSpace);
}
return rc;
}
extern "C" void CallProcessCommands(int index);
void CallProcessCommands(int index)
{
pInkJectPrinter->modbus->processCommands(index);
}
//
//eMBErrorCode
//eMBRegInputCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNRegs )
//{
// eMBErrorCode eStatus = MB_ENOERR;
// int iRegIndex;
//
// if( ( usAddress >= REG_INPUT_START )
// && ( usAddress + usNRegs <= REG_INPUT_START + REG_INPUT_NREGS ) )
// {
// usRegInputBuf = (USHORT*) pInkJectPrinter->modbus->input_registers;
// iRegIndex = ( int )( usAddress - usRegInputStart );
// while( usNRegs > 0 )
// {
// *pucRegBuffer++ = ( unsigned char )(( usRegInputBuf[iRegIndex] >> 8 )& 0xFF);
// *pucRegBuffer++ = ( unsigned char )( usRegInputBuf[iRegIndex] & 0xFF );
// iRegIndex++;
// usNRegs--;
// }
// }
// else
// {
// eStatus = MB_ENOREG;
// }
//
// return eStatus;
//}
//
//eMBErrorCode
//eMBRegHoldingCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNRegs, eMBRegisterMode eMode )
//{
// eMBErrorCode eStatus = MB_ENOERR;
// int iRegIndex;
//
// if( ( usAddress >= REG_HOLDING_START ) &&
// ( usAddress + usNRegs <= REG_HOLDING_START + REG_HOLDING_NREGS ) )
// {
//
// usRegHoldingBuf = (USHORT*) pInkJectPrinter->modbus->holding_registers;
// iRegIndex = ( int )( usAddress - usRegHoldingStart );
// switch ( eMode )
// {
// /* Pass current register values to the protocol stack. */
// case MB_REG_READ:
// while( usNRegs > 0 )
// {
// *pucRegBuffer++ = ( UCHAR ) ( usRegHoldingBuf[iRegIndex] >> 8 );
// *pucRegBuffer++ = ( UCHAR ) ( usRegHoldingBuf[iRegIndex] & 0xFF );
// iRegIndex++;
// usNRegs--;
// }
// break;
//
// /* Update current register values with new values from the
// * protocol stack. */
// case MB_REG_WRITE:
// while( usNRegs > 0 )
// {
// usRegHoldingBuf[iRegIndex] = *pucRegBuffer++ << 8;
// usRegHoldingBuf[iRegIndex] |= *pucRegBuffer++;
// pInkJectPrinter->modbus->processCommands(iRegIndex);
// iRegIndex++;
// usNRegs--;
// }
// }
// }
// else
// {
// eStatus = MB_ENOREG;
// }
// return eStatus;
//}
//
//
//eMBErrorCode
//eMBRegCoilsCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNCoils, eMBRegisterMode eMode )
//{
// Q_UNUSED(pucRegBuffer);
// Q_UNUSED(usAddress);
// Q_UNUSED(usNCoils);
// Q_UNUSED(eMode);
// return MB_ENOREG;
//}
//
//eMBErrorCode
//eMBRegDiscreteCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNDiscrete )
//{
// Q_UNUSED(pucRegBuffer);
// Q_UNUSED(usAddress);
// Q_UNUSED(usNDiscrete);
// return MB_ENOREG;
//}