根据之前的几篇MODBUS规约介绍,我们发现MODBUS规约是比较简单的一个规约,

如上图,我们可以看到MODBUS_RTU和MODBUS_TCP之间有共同的部分,因此可以考虑用C++中的继承方式。将上图中的红框部分用一个基类来实现,串口方式和网络方式分别继承自此基类。这样就可以同时实现即支持MODBUS_RTU又支持MODBUS_TCP,相当于将MODBUS分成了应用层和链路层。使用共同的应用层代码维护也比较方便。
基类可以这样写:
class CModbusS
{
public:
CModbusS();
protected:
BOOL IsTerminated();
private:
BOOL m_bIsTerminated;
CSync sync_Tag;
bool ProcessSOE();
bool ProcessYX();
CSync m_Sync_Event; // 事件队列用互斥
void AddToEventQueue(TYxValue &signalValue,TSignalAddress &SignalAddr);
// 读取事件,一次一条
BOOL ReadEventQuent(TYxValue &signalValue,TSignalAddress &SignalAddr);
list<TYXData> m_lSOE; // 遥信事件队列
list<TYXData>::iterator m_itrEventPos;
BOOL EventQueueEmpty();
void ActEvent(); // 确认已经发送的事件
public:
//CModbusS();
//~CModbusS();
// 前两个参数,报文和报文实际长度,offset实际报文开始
// 报文主要用于显示,偏

最低0.47元/天 解锁文章
3117

被折叠的 条评论
为什么被折叠?



