Hi afrob,
du bist der Beste, mit meinen bescheidenen Kenntnissen waere ich NIE darauf gekommen, 1000 Dank! Es laeuft, alles ist gut.
Hier ein bisschen Code, der sendet ein offendes Rechteck an den Laer (falls mal jemand etwas aehnliches machen will):
Code: Alles auswählen
from ctypes import *
from numpy import *
import time
elib = WinDLL("jmlaser.dll")
def dec2bin(val):
nbits = 16
basis = 2**(arange(1-nbits,1,dtype=float))
bin = int8(remainder(floor(val*basis),2))
return bin
def bin2dec(bin):
nbits = 8
basis = 2**arange(0,nbits)[::-1]
val = chr(sum(bin*basis))
return val
def makeFrame(Xdata,Ydata,R=0,G=255,B=0,I=255):
npoints = len(Xdata)
frameob = c_char*(8*npoints)
frame = frameob()
for fid in range(npoints):
idx0 = fid*8
binx = dec2bin(Xdata[fid])
frame.__setitem__(idx0,bin2dec(binx[8::]))
frame.__setitem__(idx0+1,bin2dec(binx[0:8]))
biny = dec2bin(Ydata[fid])
frame.__setitem__(idx0+2,bin2dec(biny[8::]))
frame.__setitem__(idx0+3,bin2dec(biny[0:8]))
frame.__setitem__(idx0+4,chr(R))
frame.__setitem__(idx0+5,chr(G))
frame.__setitem__(idx0+6,chr(B))
frame.__setitem__(idx0+7,chr(I))
return frame
# generate coordinates of an open rectangle
xmax = 2000
Xdata = concatenate((arange(0,xmax,1),ones(xmax)*xmax,arange(xmax,0,-1)))
Ydata = concatenate((ones(xmax)*0,arange(0,xmax,1),ones(xmax)*xmax))
ndata = len(Xdata)
frame = makeFrame(Xdata,Ydata)
speed = 10000
cid = c_int(elib.EasyLaseGetCardNum()-1)
ok = elib.EasyLaseWriteFrame(pointer(cid),pointer(frame),ndata*8,speed)
time.sleep(double(ndata)/speed)
schluss = elib.EasyLaseClose()