Привет всем.
Прежде всего, я использую Delphi 7, компьютер подключен к «Velleman Part No. VM116» через порт USB, и у меня есть два светодиодных индикатора DMX, подключенных к DMXвывод контроллера.
Я поместил библиотеку K8062d.dll в ту же папку, что и исполняемый файл, но я не подхожу к тому, чтобы заставить свет реагировать.Сложность в том, что это должно быть так же просто, как пирог, учитывая то, что мне пришлось заставить свой 24-канальный стол освещения управлять своими источниками света, этот контроллер должен быть таким же простым, как перетаскивание фигуры на форму.Вот пример кода ...
unit chaser_control;
interface
type
rgb=(
c_red,
c_green,
c_blue);
dmx_offset:array[rgb] of integer=(
1,
2,
3);
dmx_class=class(tobject)
constructor create;
destructor demolish;
procedure initialise;
procedure finish;
procedure set_channel(
can_dmx:integer;
channel:rgb;
c:integer);
end;
var
can:dmx_class;
implementation
// these four external procedures are all that is necessary to address and
// write to any of the 512 DMX channels in the chain
procedure StartDevice; stdcall; external 'K8062d.dll';
procedure SetData(Channel: Longint ; Data: Longint); stdcall; external 'K8062d.dll';
procedure SetChannelCount(Count: Longint); stdcall; external 'K8062d.dll';
procedure StopDevice; stdcall; external 'K8062d.dll';
//
// dmx control
//
constructor dmx_class.create;
begin
inherited;
// the dmx controller is started once when this class is instantiated
initialise;
end;
destructor dmx_class.demolish;
begin
// the dmx controller is closed down when this class is destroyed
finish;
inherited;
end;
procedure dmx_class.initialise;
begin
// call the device DLL
StartDevice;
// allocate 5 channels for led can [two channels are not used]
SetChannelCount(5);
// make sure that channel 1 is set to zero [i never use this channel,
// on the lighting desk it is set to zero]
SetData(1,0);
end;
procedure dmx_class.finish;
begin
// this procedure is called once
StopDevice;
end;
//
// can control
//
procedure dmx_class.set_channel(
can_dmx:integer;
channel:rgb;
c:integer);
var
l1,l2:longint;
begin
// l1 and l2 are longint variables as the arguments passed to the
// DLL are longint even though the data is actually 8 bit
l1:=can_dmx+dmx_offset[channel];
l2:=c;
SetData(l1,l2);
end;
begin
// example call to change the green channel on a can with dmx address 1
// simply assume that 'can' is not created automatically at startup
can:=dmx_class.create;
can.set_channel(1,c_green,240);
// and so on
can.free;
end.
Когда для зеленого канала установлено значение 240, ничего не происходит, освещение работает хорошо, так как им можно управлять со стола освещения, и, как я уже говорил, другимипрограммное обеспечение, которое я написал с использованием MIDI-шоу.Однако проблема с управлением показом состоит в том, что он ограничен 7 битами, поэтому мне нужно, чтобы это новое устройство работало.
TIA
Andrew