我是一名学生,正在为我大学的化学系做一个项目。去年,我编写了一个 C++ 程序来控制微型运动平台并让它与压力传感器通信,上下移动平台直到它接触到传感器。我使用公司提供的DLL来编写这个程序。我花了一段时间,但我得到了一切工作。
今年,我将第二阶段合并到程序中,并使用 C# 将整个程序更新为 GUI。第二阶段和力传感器仅提供适用于 C# 的 DLL,而旧阶段则适用于 C++。我能够让这三个都在新的 C# GUI 程序中工作,这一切都差不多完成了,保存了这个问题:
在旧程序中,我能够通过此功能确定舞台上的电机是否正在移动:
#define MOTOR_MOVING 0x01
byte isMoving = LdcnGetStat(pico_addr) & MOTOR_MOVING;
byte LdcnGetStat(byte address) 返回给定地址处模块的最后一个状态字节。根据我的说明手册,假设在电机移动时设置位 0。因此,如果我在我的 C++ 程序中使用 bool 变量对其进行测试,当电机不移动时 isMoving 为 0,当它们移动时为 1,并且在电机停止移动后它立即返回 0。工作正常。
但是在 C# 中,我在合并它时遇到了问题。
byte isMoving = LdcnGetStat(pico_addr) & MOTOR_MOVING;
不起作用,我必须做一些明确的转换。所以我把它改成这样:
bool isMoving = Convert.ToBoolean(LdcnGetStat(pico_addr) &
Convert.ToBoolean(MOTOR_MOVING);
这不会给我一个错误,但 LdcnGetStat(pico_addr) 将始终返回“true”,因为它从不为 0。如果我只是测试 LdcnGetStat() 吐出的值,当电机不移动时,它返回 28,当它正在移动,它返回 s 98。如果我在移动后再次测试,它返回 23。
在 C# 中是否有适当的方法来处理这个问题?我正在考虑检查 LdcnGetStat 是否返回正确的数值,但这似乎不是处理它的正确方法,特别是因为这些值似乎在移动后发生了变化。
谢谢