xrms5.0 安装指南

一. 搭建环境apache2.2 + php5.2.5

1. 下载apache2.2.x,安装到目录C:\Program Files\Apache Software Foundation\Apache2.2\

2. 下载php5.2.5,选择安装扩展,安装到目录C:\Program Files\PHP

二. 安装pear.php
a. http://pear.php.net/ 下载pear安装文件,可采用web方式和命令行方式安装
b. 修改%php_home%\php.ini的 include_path,增加指向pear安装目录.

三. 设置xrms参数
1.阅读 xrms\include\install安装提示
2. 修改xrms\include-locations.inc中的路径配置
3。修改xrms\include\vars.php的配置
4. 运行install.php,安装提示进行安装.
#endif#include “XRayControl.h” #include “common\PiercingEyeSetting.h” #include using namespace drive; const int g_SerialFailedTimes = 3; //串口发送重试次数 drive::XRayControl::XRayControl(QObject * parent) :QObject(parent) , m_pXRayHelp(NULL) , m_nOutVol(0) , m_nOutCur(0) , m_nUseTime(0) { } drive::XRayControl::~XRayControl() { delete m_pXRayThread; m_pXRayThread = nullptr; } bool drive::XRayControl::Init() { m_stXRaySettingParams = common::PiercingEyeSetting::GetInstall().GetXRayPortParams(); switch (m_stXRaySettingParams.eXRayType) { case Hamamatsu_L10941_05: if (NULL == m_pXRayHelp) { m_pXRayHelp = new drive::HamamatsuHelp(); } break; case Hamamatsu_L9181_05: break; case Comet_Cube: if (NULL == m_pXRayHelp) { m_pXRayHelp = new drive::CometCubeHelper(); } break; default: break; } for (int i = XRMT_STS; i < XRMT_NUMS; i++) { m_XRayStatusMap[i] = 0; } m_pXRayThread = new QThread; m_pXRayHelp->moveToThread(m_pXRayThread); m_pXRayHelp->SetPortParams(m_stXRaySettingParams.sPortName, (QSerialPort::BaudRate)m_stXRaySettingParams.nBaudRate); connect(m_pXRayThread, &QThread::started, m_pXRayHelp, &SerialPortBase::OnSerialThreadStarted); connect(m_pXRayThread, &QThread::finished, m_pXRayHelp, &QObject::deleteLater); //射线源数据更新 connect(m_pXRayHelp, &SerialPortBase::SigMapParamsUpdate, this, &XRayControl::OnXRayStatusChanged, Qt::UniqueConnection); //射线源使用时间刷新 connect(m_pXRayHelp, &SerialPortBase::SigUpdateXRayUseTime, this, &XRayControl::SigUpdateXRayUseTime); //射线源逆初始化 connect(this, &XRayControl::SigUnInit, m_pXRayHelp, &SerialPortBase::UnInit); //射线源软复位 connect(this, &XRayControl::SigXRayRst, m_pXRayHelp, &SerialPortBase::OnResetXRay); //射线源预热指令 connect(this, &XRayControl::SigXRayWarmUp, m_pXRayHelp, &SerialPortBase::OnWarmUpXRay); //设置电压电流 connect(this, &XRayControl::SigSetXRayElectricParams, m_pXRayHelp, &SerialPortBase::OnSetXRayParams); //开启或关闭射线源 connect(this, &XRayControl::SigSetXRaySwitch, m_pXRayHelp, &SerialPortBase::OnSwitchXRay); m_pXRayThread->start(); return false; } bool drive::XRayControl::UnInit() { emit SigSetXRaySwitch(false); //添加阻塞 QEventLoop loop; connect(m_pXRayHelp, &SerialPortBase::SigUnitFinished, &loop, &QEventLoop::quit); emit SigUnInit(); loop.exec(); m_pXRayThread->quit(); m_pXRayThread->wait(); return false; } void drive::XRayControl::SetXRayRst() { emit SigXRayRst(); } void drive::XRayControl::SetSyncWarmUp() { } void drive::XRayControl::SetWarmUp() { emit SigXRayWarmUp(); } int drive::XRayControl::SetXRaySwitch(bool bIsOpen) { emit SigSetXRaySwitch(bIsOpen); if (!bIsOpen && m_XRayStatus == XRMS_On) //只有开源后关源才设置成准备就绪 { m_XRayStatus = XRMS_StandBy; } return true; } int drive::XRayControl::SetXRayElectricParams(int nVol, int nCur) { emit SigSetXRayElectricParams(nVol, nCur); return 0; } XRayMonitorStatus drive::XRayControl::GetAutoXRaySts() { XRayMonitorStatus nXRaySts = GetXRayStatus(); switch (nXRaySts) { case XRMS_NeedWarmUp: break; case XRMS_WarmUp: break; case XRMS_StandBy: break; case XRMS_On: break; case XRMS_Protected: { SetXRayRst(); QThread::msleep(1000); nXRaySts = GetXRayStatus(); }break; case XRMS_Failure: case XRMS_TsfOn: case XRMS_LockOn: { QThread::msleep(1000); nXRaySts = GetXRayStatus(); }break; default: break; } return nXRaySts; } XRayMonitorStatus drive::XRayControl::GetXRayStatus() { //重新获取下状态 XRayMonitorMap xRayStatus = GetXRayMonitorMap(); OnXRayStatusChanged(xRayStatus); return m_XRayStatus; } int drive::XRayControl::GetXRayUseTime() { return m_nUseTime; } bool drive::XRayControl::SyncXRayClose(int nTime) { SetXRaySwitch(false); int nWait = 0; while (nWait < nTime) { if (m_nOutVol < 1 && m_nOutCur < 1) { //qDebug(“XRayOpen Wait Time == %d ms”, nWait * XRAY_WAIT_TIME); LOG_DEBUG(“XRay Close Wait Time == %d ms”, nWait * XRAY_WAIT_TIME); //QThread::msleep(XRAY_WAIT_TIME); break; } QThread::msleep(XRAY_WAIT_TIME); nWait++; } if (nWait >= nTime) { return false; } m_XRayStatus = XRMS_StandBy; return true; } bool drive::XRayControl::SyncXRayOpen(int nVol, int nCur, int nTime) { SetXRayElectricParams(nVol, nCur); SetXRaySwitch(true); int nIdx = 0; while (nIdx < nTime) { if (nVol<= (m_nOutVol+1)&&nCur <= (m_nOutCur + 1)) { qDebug(“XRayOpen Wait Time == %d ms”, nIdx*XRAY_WAIT_TIME); break; } QThread::msleep(XRAY_WAIT_TIME); nIdx++; } if (nIdx >= nTime) { return false; } return true; } XRayMonitorMap drive::XRayControl::GetXRayMonitorMap() { return m_pXRayHelp->GetXRayMonitorMap(); } bool drive::XRayControl::AutoMotionReady() { switch (m_XRayStatus) { case XRMS_NeedWarmUp: { emit SigRevFrameData(tr(“C_XRayNeedWarmUp”), false); return false; } case XRMS_WarmUp: { emit SigRevFrameData(tr(“C_XRayWarmUp”), false); return false; } break; case XRMS_StandBy: case XRMS_On: { //射线源状态正常 emit SigRevFrameData(tr(“C_XRayReady”), true); }break; case XRMS_Protected: case XRMS_Failure: case XRMS_TsfOn: case XRMS_LockOn: { //启动失败,射线源连锁关闭 emit SigRevFrameData(tr(“C_XRayLockOn”), false); return false; }break; default: break; } return true; } void drive::XRayControl::GetMonitorParams() { m_pXRayHelp->SendCommand(XRSCH_SAR, 0); } void drive::XRayControl::OnXRayStatusChanged(XRayMonitorMap qMapStatus) { XRayMonitorStatus nStatus = XRMS_NeedWarmUp; for (int i = XRMT_STS; i < XRMT_NUMS; i++) { m_XRayStatusMap[i] = qMapStatus[i]; } if (m_XRayStatusMap[XRMT_STS] == 5 && m_XRayStatusMap[XRMT_SIN] == 1) { nStatus = XRMS_LockOn; } else { nStatus = (XRayMonitorStatus)m_XRayStatusMap[XRMT_STS]; } if (m_nOutVol != m_XRayStatusMap[XRMT_SHV] || m_nOutCur != m_XRayStatusMap[XRMT_SCU] || m_XRayStatus != nStatus) { m_nOutVol = m_XRayStatusMap[XRMT_SHV]; m_nOutCur = m_XRayStatusMap[XRMT_SCU]; m_XRayStatus = nStatus; LOG_DEBUG("XRayMonitorStatus:Sts: %d; vol:%d ; Cur:%d ", m_XRayStatus, m_nOutVol, m_nOutCur); emit SigUpdateXRayStatus(m_XRayStatus, m_nOutVol, m_nOutCur); } if (m_nUseTime != m_XRayStatusMap[XRMT_XST_TIME]) { m_nUseTime = m_XRayStatusMap[XRMT_XST_TIME]; emit SigUpdateXRayUseTime(m_nUseTime); } }讲讲这些代码详细一点,逐行讲解,谢谢喽
10-22
/** * @file XRayControl.h * @brief 射线源封装 * * 射线源封装 * * @author jyh * @version 1.0.0 * @date 2023年12月14日 * @note 新建 */ #ifndef XRAYCONTROL_H #define XRAYCONTROL_H #include <QObject> #include <QMap> #include <QtSerialPort/QSerialPort> // 提供访问串口的功能 #include "SerialPortHelp\HamamatsuHelp.h" #include "WebSocket\CometCubeHelper.h" namespace drive { class XRayControl : public QObject { Q_OBJECT public: XRayControl(QObject *parent = Q_NULLPTR); ~XRayControl(); bool Init(); bool UnInit(); void SetXRayRst(); void SetSyncWarmUp(); void SetWarmUp(); int SetXRaySwitch(bool bIsOpen); int SetXRayElectricParams(int nVol, int nCur); XRayMonitorStatus GetAutoXRaySts(); XRayMonitorStatus GetXRayStatus(); int GetXRayUseTime(); bool SyncXRayClose(int nTime = XRAY_SYNC_WAIT); bool SyncXRayOpen(int nVol, int nCur, int nTime = 40); bool AutoMotionReady(); XRayMonitorMap GetXRayMonitorMap(); int GetOutputVoltage() const { return m_nOutVol; } int GetOutputCurrent()const { return m_nOutCur; } private: SerialPortBase* m_pXRayHelp; //射线源串口类 QThread* m_pXRayThread; //射线源子线程 XRayMonitorMap m_XRayStatusMap; //监听数据信息 //XRayType m_XRayType; //射线源类型 XRayMonitorStatus m_XRayStatus; //射线源状态 XRaySettingParams m_stXRaySettingParams; //射线源串口设置参数结构体 int m_nOutVol; //输出电压 int m_nOutCur; //输出电流 int m_nUseTime; /*!< 射线源使用时间 >*/ void GetMonitorParams(); signals: void SigXRayRst(); void SigXRayWarmUp(); void SigRevFrameData(const QString& str, bool nResult); void SigUpdateXRayStatus(XRayMonitorStatus status, int nVol, int nCur); void SigUpdateXRayUseTime(int nUseTime); void SigUnInit(); void SigSetXRayElectricParams(int nVol, int nCur); void SigSetXRaySwitch(bool bStatus); public slots : void OnXRayStatusChanged(QMap<SerialPortCommand, int> qMapStatus); }; } #endif #include "XRayControl.h" #include "common\PiercingEyeSetting.h" #include <QtConcurrent> using namespace drive; const int g_SerialFailedTimes = 3; //串口发送重试次数 drive::XRayControl::XRayControl(QObject * parent) :QObject(parent) , m_pXRayHelp(NULL) , m_nOutVol(0) , m_nOutCur(0) , m_nUseTime(0) { } drive::XRayControl::~XRayControl() { delete m_pXRayThread; m_pXRayThread = nullptr; } bool drive::XRayControl::Init() { m_stXRaySettingParams = common::PiercingEyeSetting::GetInstall().GetXRayPortParams(); switch (m_stXRaySettingParams.eXRayType) { case Hamamatsu_L10941_05: if (NULL == m_pXRayHelp) { m_pXRayHelp = new drive::HamamatsuHelp(); } break; case Hamamatsu_L9181_05: break; case Comet_Cube: if (NULL == m_pXRayHelp) { m_pXRayHelp = new drive::CometCubeHelper(); } break; default: break; } for (int i = XRMT_STS; i < XRMT_NUMS; i++) { m_XRayStatusMap[i] = 0; } m_pXRayThread = new QThread; m_pXRayHelp->moveToThread(m_pXRayThread); m_pXRayHelp->SetPortParams(m_stXRaySettingParams.sPortName, (QSerialPort::BaudRate)m_stXRaySettingParams.nBaudRate); connect(m_pXRayThread, &QThread::started, m_pXRayHelp, &SerialPortBase::OnSerialThreadStarted); connect(m_pXRayThread, &QThread::finished, m_pXRayHelp, &QObject::deleteLater); //射线源数据更新 connect(m_pXRayHelp, &SerialPortBase::SigMapParamsUpdate, this, &XRayControl::OnXRayStatusChanged, Qt::UniqueConnection); //射线源使用时间刷新 connect(m_pXRayHelp, &SerialPortBase::SigUpdateXRayUseTime, this, &XRayControl::SigUpdateXRayUseTime); //射线源逆初始化 connect(this, &XRayControl::SigUnInit, m_pXRayHelp, &SerialPortBase::UnInit); //射线源软复位 connect(this, &XRayControl::SigXRayRst, m_pXRayHelp, &SerialPortBase::OnResetXRay); //射线源预热指令 connect(this, &XRayControl::SigXRayWarmUp, m_pXRayHelp, &SerialPortBase::OnWarmUpXRay); //设置电压电流 connect(this, &XRayControl::SigSetXRayElectricParams, m_pXRayHelp, &SerialPortBase::OnSetXRayParams); //开启或关闭射线源 connect(this, &XRayControl::SigSetXRaySwitch, m_pXRayHelp, &SerialPortBase::OnSwitchXRay); m_pXRayThread->start(); return false; } bool drive::XRayControl::UnInit() { emit SigSetXRaySwitch(false); //添加阻塞 QEventLoop loop; connect(m_pXRayHelp, &SerialPortBase::SigUnitFinished, &loop, &QEventLoop::quit); emit SigUnInit(); loop.exec(); m_pXRayThread->quit(); m_pXRayThread->wait(); return false; } void drive::XRayControl::SetXRayRst() { emit SigXRayRst(); } void drive::XRayControl::SetSyncWarmUp() { } void drive::XRayControl::SetWarmUp() { emit SigXRayWarmUp(); } int drive::XRayControl::SetXRaySwitch(bool bIsOpen) { emit SigSetXRaySwitch(bIsOpen); if (!bIsOpen && m_XRayStatus == XRMS_On) //只有开源后关源才设置成准备就绪 { m_XRayStatus = XRMS_StandBy; } return true; } int drive::XRayControl::SetXRayElectricParams(int nVol, int nCur) { emit SigSetXRayElectricParams(nVol, nCur); return 0; } XRayMonitorStatus drive::XRayControl::GetAutoXRaySts() { XRayMonitorStatus nXRaySts = GetXRayStatus(); switch (nXRaySts) { case XRMS_NeedWarmUp: break; case XRMS_WarmUp: break; case XRMS_StandBy: break; case XRMS_On: break; case XRMS_Protected: { SetXRayRst(); QThread::msleep(1000); nXRaySts = GetXRayStatus(); }break; case XRMS_Failure: case XRMS_TsfOn: case XRMS_LockOn: { QThread::msleep(1000); nXRaySts = GetXRayStatus(); }break; default: break; } return nXRaySts; } XRayMonitorStatus drive::XRayControl::GetXRayStatus() { //重新获取下状态 XRayMonitorMap xRayStatus = GetXRayMonitorMap(); OnXRayStatusChanged(xRayStatus); return m_XRayStatus; } int drive::XRayControl::GetXRayUseTime() { return m_nUseTime; } bool drive::XRayControl::SyncXRayClose(int nTime) { SetXRaySwitch(false); int nWait = 0; while (nWait < nTime) { if (m_nOutVol < 1 && m_nOutCur < 1) { //qDebug("XRayOpen Wait Time == %d ms", nWait * XRAY_WAIT_TIME); LOG_DEBUG("XRay Close Wait Time == %d ms", nWait * XRAY_WAIT_TIME); //QThread::msleep(XRAY_WAIT_TIME); break; } QThread::msleep(XRAY_WAIT_TIME); nWait++; } if (nWait >= nTime) { return false; } m_XRayStatus = XRMS_StandBy; return true; } bool drive::XRayControl::SyncXRayOpen(int nVol, int nCur, int nTime) { SetXRayElectricParams(nVol, nCur); SetXRaySwitch(true); int nIdx = 0; while (nIdx < nTime) { if (nVol<= (m_nOutVol+1)&&nCur <= (m_nOutCur + 1)) { qDebug("XRayOpen Wait Time == %d ms", nIdx*XRAY_WAIT_TIME); break; } QThread::msleep(XRAY_WAIT_TIME); nIdx++; } if (nIdx >= nTime) { return false; } return true; } XRayMonitorMap drive::XRayControl::GetXRayMonitorMap() { return m_pXRayHelp->GetXRayMonitorMap(); } bool drive::XRayControl::AutoMotionReady() { switch (m_XRayStatus) { case XRMS_NeedWarmUp: { emit SigRevFrameData(tr("C_XRayNeedWarmUp"), false); return false; } case XRMS_WarmUp: { emit SigRevFrameData(tr("C_XRayWarmUp"), false); return false; } break; case XRMS_StandBy: case XRMS_On: { //射线源状态正常 emit SigRevFrameData(tr("C_XRayReady"), true); }break; case XRMS_Protected: case XRMS_Failure: case XRMS_TsfOn: case XRMS_LockOn: { //启动失败,射线源连锁关闭 emit SigRevFrameData(tr("C_XRayLockOn"), false); return false; }break; default: break; } return true; } void drive::XRayControl::GetMonitorParams() { m_pXRayHelp->SendCommand(XRSCH_SAR, 0); } void drive::XRayControl::OnXRayStatusChanged(XRayMonitorMap qMapStatus) { XRayMonitorStatus nStatus = XRMS_NeedWarmUp; for (int i = XRMT_STS; i < XRMT_NUMS; i++) { m_XRayStatusMap[i] = qMapStatus[i]; } if (m_XRayStatusMap[XRMT_STS] == 5 && m_XRayStatusMap[XRMT_SIN] == 1) { nStatus = XRMS_LockOn; } else { nStatus = (XRayMonitorStatus)m_XRayStatusMap[XRMT_STS]; } if (m_nOutVol != m_XRayStatusMap[XRMT_SHV] || m_nOutCur != m_XRayStatusMap[XRMT_SCU] || m_XRayStatus != nStatus) { m_nOutVol = m_XRayStatusMap[XRMT_SHV]; m_nOutCur = m_XRayStatusMap[XRMT_SCU]; m_XRayStatus = nStatus; LOG_DEBUG("XRayMonitorStatus:Sts: %d; vol:%d ; Cur:%d ", m_XRayStatus, m_nOutVol, m_nOutCur); emit SigUpdateXRayStatus(m_XRayStatus, m_nOutVol, m_nOutCur); } if (m_nUseTime != m_XRayStatusMap[XRMT_XST_TIME]) { m_nUseTime = m_XRayStatusMap[XRMT_XST_TIME]; emit SigUpdateXRayUseTime(m_nUseTime); } } 讲讲这些代码,仔细讲解每一行,然后给出整体的运行流程
09-26
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值