几个简单的问题。我有一个要尝试控制的DMX King USB照明控制器。

它基于Open DMX协议(来自Entec),该协议提供了c#类。
我已将设备插入RGB罐中,如果我用其驱动程序测试USB设备,它将连接至COM4,然后在将其软件切换为传输模式时,便可以设置各个DMX通道。

使用他们的OpenDMX类,进行一些修改(核心是相同的,我刚刚添加了一些额外的错误检查,我可以找到设备,查询它的信息等。
当我打开设备时,我得到了一个手柄。
我可以使用FT_Write写入该设备,但是无论我做什么,实际上都不会亮灯。

以下是一些相关的代码段:

public static byte[] buffer;

[DllImport("FTD2XX.dll")]
public static extern FT_STATUS FT_Open(UInt32 uiPort, ref uint ftHandle);
[DllImport("FTD2XX.dll")]
public static extern FT_STATUS FT_Write(uint ftHandle, IntPtr lpBuffer, UInt32 dwBytesToRead, ref UInt32 lpdwBytesWritten);

public static void writeData()
{
    while (!done)
    {
        try
        {
            initOpenDMX();
            status = FT_SetBreakOn(handle);
            status = FT_SetBreakOff(handle);
            bytesWritten = write(handle, buffer, buffer.Length);
            if (bytesWritten == 0)
            {
                break;
            }

            System.Threading.Thread.Sleep(25);
        }
        catch (Exception)
        {
            break;
        }
    }
    Connected = false;
    done = false;
}


所有状态返回为FT_Ok,字节写入的返回为512(此USB控制器上的通道数)

我一直在想我错过了将设备设置为传输模式或类似模式(它只有一个DMX插槽)之类的东西。

public static void initOpenDMX()
{
    status = FT_ResetDevice(handle);
    status = FT_SetDivisor(handle, (char)12); // set baud rate
    status = FT_SetDataCharacteristics(handle, BITS_8, STOP_BITS_2, PARITY_NONE);
    status = FT_SetFlowControl(handle, (char)FLOW_NONE, 0, 0);
    status = FT_ClrRts(handle);
    status = FT_SetLatencyTimer(handle, (byte)40);
    status = FT_Purge(handle, PURGE_TX);
    status = FT_Purge(handle, PURGE_RX);
}


我还尝试了Entec OpenDMX类,但没有做任何修改,它似乎也没有任何作用。

只想强调他们的控制软件工作正常,因此照明灯和控制器兼容。我认为使用FTD2xx的方式中缺少某些内容。
没有出现任何错误(一切都是FT_OK),因此这表明DLL正在工作-尤其是因为我可以使用FT_ListDevices和FT_GetDeviceInfo方法查询设备。

有任何想法吗?

加雷斯

最佳答案

为了解决这个问题,我给制造商发送了电子邮件。
事实证明该设备不是OpenDMX,实际上是DMXProUSB
该协议非常相似,它基于FTDI芯片,这就是为什么代码可以部分起作用的原因,但其中包含一个微控制器。
我将C ++示例控制器文件转换为C#,并使其全部正常工作。
如果再次出现这种情况,我很乐意为DMXProUSB共享生成的c#代码,但是没有支持。
我已将代码通过电子邮件发送给制造商(dmxking),并将副本放在github上:https://github.com/agrath/Sniper.Lighting.Dmx

谢谢你的帮助

07-26 02:12