当前位置: 首页 > wzjs >正文

大连住房和城乡建设网站刚刚刚刚刚刚好痛

大连住房和城乡建设网站,刚刚刚刚刚刚好痛,做银行设计有好的网站参考吗,网站vip怎么做目录 0、前言 1、模块划分 2、状态机 3、通信层增强 4、异常处理机制 5、核心代码 关键状态处理示例 6、部署与测试方案 1. 环境要求 2. 性能测试指标 0、前言 这是一个C程序,用于与西门子PLC进行通信,处理SN码、拍照信号、检测结果等流程。代码…

目录

0、前言

1、模块划分

2、状态机

3、通信层增强

4、异常处理机制

5、核心代码

 关键状态处理示例

6、部署与测试方案

1. 环境要求

2. 性能测试指标


0、前言

        这是一个C++程序,用于与西门子PLC进行通信,处理SN码、拍照信号、检测结果等流程。代码中使用了状态机,通过不同的状态来管理交互步骤。

1、模块划分

class PLCManager {          // PLC连接管理 TS7Client* client;       // 通信客户端 ConnectionStatus status; // 连接状态机 
public:bool reconnect(int max_retry);void safeDisconnect();
};class StateProcessor {      // 状态处理器 enum class WorkflowState : uint8_t {WAIT_SN = 0,        // 状态枚举 PROCESS_IMAGE = 50,DEFECT_DETECTION =70 };
public:void transitionState(WorkflowState new_state);
};class DataConverter {       // 数据转换工具 
public:static std::string vectorToPLCFormat(const std::vector<int>& data);static std::vector<int> parsePLCSignal(byte* raw_data);
};

2、状态机

状态转换表

当前状态触发条件下一状态超时时间
WAIT_SN收到DB16.1=1READ_SN30s
READ_SN成功读取SN字符串ACK_SN10s
ACK_SN收到PLC确认信号WAIT_CAPTURE60s

3、通信层增强

连接管理

// 指数退避重连算法 
bool PLCManager::reconnect(int max_retry) {constexpr int base_delay = 1; // 秒 int current_delay = base_delay;for (int i=0; i<max_retry; ++i){if(connect()) return true;std::this_thread::sleep_for(std::chrono::seconds(current_delay));current_delay *= 2; // 退避策略 }return false;
}

数据读写

  • 使用内存映射替代离散读写
#pragma pack(push, 1)
struct PLCDB16 {  // 映射DB16数据结构 byte reserve1[16];uint16_t send_signal;  // 偏移16 uint16_t ack_signal;   // 偏移18 uint16_t result_flag;  // 偏移20 uint16_t subzone[12];  // 偏移22-44 char sn_code[32];      // 偏移46 
};
#pragma pack(pop)// 批量读写示例 
PLCDB16 db_data;
client->DBRead(16, 0, sizeof(PLCDB16), &db_data);

4、异常处理机制

分层错误码设计

@startuml 
enum ErrorCode {NETWORK_FAILURE = 0x1000,PROTOCOL_ERROR  = 0x2000,DATA_INVALID    = 0x3000 
}class RetryStrategy {+ MAX_RETRY_TIMES = 5 + BACKOFF_BASE = 1s 
}PLCManager --> ErrorCode 
PLCManager --> RetryStrategy 
@enduml 

结构化日志输出

class PLCLogger {enum class LogLevel {TRACE,DEBUG,INFO,WARN,ERROR };void log(LogLevel level, const std::string& tag,const std::string& msg) {auto now = std::chrono::system_clock::now();std::cout << fmt::format("[{:%Y-%m-%d %H:%M:%S}] [{}] [{}] {}",now, levelToString(level),tag,msg ) << std::endl;}
};

5、核心代码

PLCManager plc(PLC_IP); 
StateProcessor processor;
DefectDetector detector;plc.connectWithRetry(3);  // 3次重试 while(running) {auto current_state = processor.currentState(); switch(current_state) {case State::WAIT_SN:handleWaitSN(plc, processor);break;case State::IMAGE_CAPTURE:handleImageCapture(plc, detector);break;case State::DEFECT_ANALYSIS:handleDefectAnalysis(plc, detector);break;default:logError("Invalid state");}checkTimeout(processor); // 状态超时检测 
}

 关键状态处理示例

SN码处理流程

void handleSNProcessing(PLCManager& plc, StateProcessor& sp) {PLCDB16 db;plc.readDB16(db);  // 读取完整DB块 if(db.send_signal  == 1) {std::string sn = db.sn_code; if(validateSN(sn)) {sp.transition(State::ACK_SN); plc.writeAckSignal(1);  // 写入确认信号 logInfo(fmt::format("Valid SN: {}", sn));} else {plc.writeErrorCode(0x3001);  // 数据无效错误 logError("Invalid SN format");}}
}

性能监控实现

class PerformanceMonitor {std::map<State, std::chrono::milliseconds> state_durations;std::chrono::time_point<Clock> state_start;public:void onStateChanged(State new_state) {auto duration = Clock::now() - state_start;state_durations[current_state] += duration;state_start = Clock::now();}void printReport() {for(auto& [state, dur] : state_durations) {std::cout << stateToString(state) << ": " << dur.count()  << "ms\n";}}
};

6、部署与测试方案

1. 环境要求

  • 硬件
    • 西门子S7-1200/1500系列PLC
    • 工业级网卡(支持Profinet)
  • 软件
    • Snap7 1.4+ 通信库
    • C++17编译环境

2. 性能测试指标

指标优化前优化后提升率
单次通信耗时45ms28ms38%
状态切换延迟120ms65ms46%
断线恢复时间15s3.2s78%
http://www.dtcms.com/wzjs/519072.html

相关文章:

  • 高端品牌网站建设图片郑州seo排名第一
  • 做网站需要记哪些代码网络舆情分析报告
  • b2b2c电商网站开发推广网站模板
  • 怎样装修公司网站百度100%秒收录
  • 花钱做的网站推广被骗佛山疫情最新消息
  • 电脑安装wordpressseo关键字优化
  • 货运配载做网站安徽新站优化
  • 住房城乡建设部网站诚信培训课程表
  • 网页升级未成年人自行离开南京seo排名公司
  • 一个主机怎么做两个网站百度指数使用方法
  • 建设手机网站的方案移投界seo
  • 企业运营效率的三个指标贵州seo培训
  • 找到做网站的公司网站seo分析常用的工具是
  • 做快餐料包的网站有哪些人际网络营销2900
  • 学校网站建设培训方案模板国内新闻最新消息今天简短
  • 中国建设银行网站查征信企业网站建设哪家好
  • 宜昌商城网站建设北京网络推广
  • 创建网站免费注册搜狗站长平台验证不了
  • 殡葬网站建设知乎推广公司
  • 05网站西安网站推广排名
  • 怎样做一个企业的网站建站网络营销包括的主要内容有
  • dz论坛如何做网站地图北京百度竞价托管公司
  • 公司网站建设属于什么职位有趣的网络营销案例
  • 做淘宝客网站多少钱网络营销推广seo
  • 旅游网站建设的总结seo排名赚
  • 口碑好网站建设价格在线优化网站
  • lamp网站开发网站关键词优化代理
  • 自己做网络棋牌网站流程seo推广外包企业
  • 静态网站怎么在网上推销产品
  • 廊坊网站制作公司排名今日新闻热点