C++查找modbus从机的表
C++ look-up-table for modbus slave
我有一个实现modbus从机的C固件。一旦收到我的RTU命令(比如func 03"register read"),我只需转到LUT并获取需要返回的数据。我的数据结构是全局的。我的数组看起来像这样:
int* modbusLUT[]={
&motorControl_t.counter.degrees,
&motorControl_t.counter.dir,
&glueControl_t.nozzle.temp,
&paintControl_t.hopper.level,
...
};
我构建了modbus回复,内容如下:
temp = *modbusLUT[startAddr+j];
...
这个单线程代码非常有效。
我现在正在编写单独的C++"系统管理器"代码,这是必不可少的无头代码,它也必须像modbus从属程序一样工作。我打算把这个系统的力学分为三类。每个类都在堆上创建,并启动它自己的线程,等待main()中的事件。类似这样的东西:
m_ptrMotorMachine = new CMotorMachine();
m_ptrGlueMachine = new CGlueMachine();
m_ptrPaintMachine = new CPaintMachine();
...
m_ptrGlueMachine->m_pThread->PostThreadMesageA(SW_PART_IN_PLACE,0,0);
我需要所有三个可用类的参数(成员变量),以便我的modbus处理程序可以访问和读取/写入它们。。。理想情况下就像上面的C数组。
那么,我怎样才能在C++中安全地完成上述操作呢?需要锁吗?类似这样的伪代码:
class CModBusSlave{
void initLUT()
{
int* modbusLUT[]={
&m_ptrMotorMachine->velocity,
&m_ptrMotorMachine->accel,
&m_ptrGlueMachine->psi,
&m_ptrPaintMachine->stroke,
...
};
};
};
任何想法或替代设计都将不胜感激。
如果我理解你的问题,你就不必实现某种线程安全机制,当资源被争用时,你必须担心多线程,使用modbus协议,你有单独的地址和注册地址,通信机制是基于应答/应答的,所以主设备要求做某事,只有感兴趣的从设备在通知地址上做这件事。您可以使用线程来处理信息,并使用管理器来启动正确的线程。如果您严格遵守标准协议,就不会有并发性,所以您不必太担心。也许我们可以在您定义了线程将要执行的操作后进行思考。如果你没有任何特别的问题,我认为你的单线程版本就足够了!
相关文章:
- 正在查找文档以获得PS4平台的C++中的设备信息
- 在C++中查找文件
- 模板元程序查找相似的连续类型名称
- 在UNIX系统中使用DIR查找文件的字节大小
- 查找最接近的大于当前数字的数字的索引
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- 查找后更改类变量
- 使用正则表达式regex_search在字符串中查找字符串
- 使用gcc从静态链接的文件中查找可选符号
- 在C++中查找范围的长度
- 算法问题:查找从堆栈中弹出的所有序列
- 在Windows中查找扬声器输出的当前音量级别
- 如何在C++中使用X509证书模在令牌中查找私钥
- 使用.find函数在c++中查找字符和另一个字符之间的大小
- 在 Windows 上,是否可以让 dll 在不使用 PATH 环境变量的情况下在另一个文件夹中查找依赖项?
- 在 for 循环中查找问题时遇到困难
- 如何在文件中查找字节序列
- 试图创建一个多线程程序来查找0-100000000之间的总素数
- 使用堆查找第K个最大元素的时间复杂性
- C++查找modbus从机的表