the "port" input. I would really appreciate any help!
For example, my Arduino board is connected to COM 3. The "ports available" component correctly identifies this port, and I know there is nothing wrong with the port itself since the Arduino communicates through COM 3 without problem when using an Arduino sketch.
The runtime error produced by the Firefly open/close port component:
1. Solution exception:Could not load type 'Grasshopper.Instances' from assembly 'Grasshopper, Version=1.0.0.20, Culture=neutral, PulicKeyToken=null'.
System specs:
Windows 7 64-bit
Rhinoceros 4.0 SR 9
Grasshopper Build 0.8.006
Firefly Build 1.0067
Arduino Uno R3
These error messages appear when Grasshopper is loaded from Rhino. They first appeared when Firefly was installed:
Object: Mega_Write (level 1){ Exception has been thrown by the target of an invocation. TargetInvocationException}
Object: Mega_Write (level 2){ Method not found: 'Void Grasshopper.Kernel.GH_PersistentParam`1.SetPersistentData(System.Object[])'. MissingMethodException}
Object: Uno_Write (level 1){ Exception has been thrown by the target of an invocation. TargetInvocationException}
Object: Uno_Write (level 2){ Method not found: 'Void Grasshopper.Kernel.GH_PersistentParam`1.SetPersistentData(System.Object[])'. MissingMethodException}
Object: ArduinoBake (level 1){ Exception has been thrown by the target of an invocation. TargetInvocationException}
Object: ArduinoBake (level 2){ Method not found: 'Void Grasshopper.Kernel.GH_PersistentParam`1.SetPersistentData(System.Object[])'. MissingMethodException}
Thank you for your help!
Colin…
both my plotter/cutter and wide format printer. I had been running the plotter from my main work laptop - a Win10 machine via the plotters USB port. As it turns out you can't get Win XP drivers for this USB connection so I needed another solution.
I tried to use the plotters DB25 serial port connection using an old DB9 to DB25 modem cable I had in my collection = no luck the plotter wouldn't talk. A bit more research and it turns out these plotters need a 'null modem' cross over cable to operate. I found a pic of the correct wiring online and made up my own with some cable and connectors from the local electronics hobby shop.
With this hooked up and using Hyperterminal I was able to fire some codes to the plotter directly and get a response back - winning!
At this point I got my original code working with the 'net use' redirect from LPT1 to COM1.
HOWEVER - being that the plotter was now on a COM port there are a few more interesting things you can do with it - one is being able to read the paper size/cut area from the printer.
So what I needed to to was find a way to send and receive data to/from the plotter using the serial port.
A bit of research into .NET's serial port interface and using a bunch of small pieces of test code I have manged to completely re-jig this driver.
Upgrades include:
- Direct Serial Port comms using Null Modem cable (a USB to serial adaptor + null modem should also work)
- Plot area read from the plotter - a rectangle the size of the plot area is placed on a separate layer and coloured red
- Testing to see if selected plotting curves are both closed and inside of the cutting area - with errors shown and exiting if they are not right.
- After plot 'parking' of the plot head at the end of the cut items + an adjustable offset (currently requires manual resetting of origin on the plotter before for next cut)
Great thing is it is now 100% running within Rhino Python - no DOS command line calls = no flashing up of the CMD wind. Also no temp files needed on the HDD and no limit to number of curves that can be plotted - tested with 200 or so with no issues.
Overall very happy with whole project - have learnt a LOT about Python and .NET interfacing AND ended up with a very handy/useful tool.
Cheers
DK
# This code is a WIP # It plots directly to a DGI Plotter# via the serial port
import System.IO.Ports as Portsimport rhinoscriptsyntax as rsimport time
#Some setup valuescom_port = 'COM1' #change to match plotter port baud_rate = 9600 #change to match plotter settingplotter_step = .025 #mmfinsh_offset = 10 #mm
#Delete old cutting area and cut objectsif rs.IsLayer('Cutting Area'): rs.PurgeLayer('Cutting Area')if rs.IsLayer('Cutting Objects'): rs.PurgeLayer('Cut Objects')
#Setup Serial PortMyport = Ports.SerialPort(com_port)Port_Write = Ports.SerialPort.WriteMyport.BaudRate = baud_rateMyport.ReadTimeout=5000 #5 secsMyport.Close()Myport.Open()
#Setup PlotterPort_Write(Myport, 'PU;PA0,0;IN;\n')Port_Write(Myport, 'SP1;\n')Port_Write(Myport, 'PA;\n')time.sleep(2)
#Read the Paper size from PlotterPort_Write(Myport, 'OH;') #HPGL read limits codetime.sleep(2)
return1 = ''papersize = ''count = 0char_in_buffer = 0chars_in_buffer = Ports.SerialPort.BytesToRead.GetValue(Myport)
if chars_in_buffer == 0: print 'Plotter not ready' Myport.Close() exit()
while (count < chars_in_buffer): return1 = Myport.ReadChar() papersize = papersize + chr(return1) count = count + 1
papersize = papersize.split(",")rect1 = (float(papersize[2])*plotter_step)rect2 = (float(papersize[3])*plotter_step)
print 'Cutting area = ' + str(rect1) + 'x' + str(rect2)
#place cutting area curve on its own layer, make it red and lock itplane = rs.WorldXYPlane()cutting_area = rs.AddRectangle( plane, (rect1), (rect2))rs.AddLayer (name='Cutting Area', color=(255,0,0), visible=True, locked=True, parent=None)rs.ObjectLayer(cutting_area, 'Cutting Area')
#get plotting objects
allCurves = rs.GetObjects("Select curves to plot", rs.filter.curve)
#test to see if these are closed curves - exit if not
for curve in allCurves: test_closed = rs.IsCurveClosed(curve) if test_closed == 0: print "One or move of these curves are not closed" Myport.Close() exit()
#test to see if these are inside cutting area - exit if not
for curve in allCurves: test_inside = rs.PlanarClosedCurveContainment(curve, cutting_area)
if test_inside==0 or test_inside==1: print "One or more of these curves are outside of cut area" Myport.Close() exit()
#All ok - convert to points and send data to printer
rs.AddLayer (name='Cut Objects', color=(0,255,0), visible=False, locked=True, parent=None)
for curve in allCurves: Port_Write(Myport, 'PU;PA;SP1;\n') polyline = rs.ConvertCurveToPolyline(curve,angle_tolerance=5.0, tolerance=0.025, delete_input=False, min_edge_length=0, max_edge_length=0) points = rs.CurveEditPoints(polyline) rs.ObjectLayer(polyline, 'Cut Objects')
# PU to the first point x = points[0][0] y = points[0][1] Port_Write(Myport, 'PU' + str(int(x / plotter_step)) + ',' + str(int(y / plotter_step)) + ';\n') # PD to every subsequent point i = 1 while i < len(points): x = points[i][0] y = points[i][1] Port_Write(Myport, 'PD' + str(int(x / plotter_step)) + ',' + str(int(y / plotter_step)) + ';\n') i += 1
Port_Write(Myport,'PU;\n')
#find the far end of the cutbox = rs.BoundingBox(allCurves)far_end = str(box[1])far_end = far_end.split(",")far_end = far_end[0]far_end = float(far_end)/plotter_stepfar_end = (int(far_end))+ finsh_offsetfar_end = str(far_end)print (far_end)
#return plotter home and close portPort_Write(Myport, 'PU;PA' + far_end + ',0;IN;\n')Port_Write(Myport, 'SP1;\n')Port_Write(Myport, 'PA;\n')Myport.Close()time.sleep(10)…
nually in Rhino works the bool command perfectly (with the GH BReps from your definition).
Have you tested your file in the latest version of GH and have you also Boolen the error?
GH 9.0062 an latest RH 5…
p;xg_source=msg_com_gr_forum
(Below the last post from that discussion).
***************************************
Hi Matthew, Thanks for such a swift response and sorry for the false alarm. After reinstalling Karamba the examples open without a problem.
I hoped that the examples will clarify something, unfortunately you do not use Beam Resultant Forces' output as a source of optimization criteria/objective there.
I am still having problem with the fact that Beam Resultant Forces component gives a list of zeros as a 1st output till it finishes calculation.
This is my case: 1. Karamba calculates normal forces in elements that are in the mast's traversal plane (mast sections, spreaders and wires (shrouds)). 2. Normal forces in forestays and backstays are calculated analytically elsewhere. 3. Having the normal forces in the wires, the algorithm selects the wires' diameters (having given the wires catalogue), calculates their weights and centers of gravity. 4. Objectives are: minimizing the mass and minimizing the VCG (vertical centre of gravity). They are convergent, but constraint (minimal sail area) is dealing with it. 5. The thing is that normal forces from Karamba and calculated analytically arrives at different times (Karamba need a bit more time). I tried to delay the other data (till Karamba finishes calculation) with Data Dam, Anemone's Time Buffer, Phyton/C#/VB components, but all of them caused that Octopus/Wallacei weren't working correctly.
Any idea comes to your mind how this problem might be solved?
Thanks, Mikołaj…
a comes from Chris.
Now, I should think how to connect it to LB sun path. If you look well, LB sun path does not append outputs when the sun is down, whilst isSunUp output of LB sunrise/sunset works for all the hours you connect obviously.
here for you, a couple of images:
Meanwhile you can try the updated version of the component in the attached file.
Hi Mostapha,
During my tests I noted this:
Yellow: LB sun path
Blue: LB sunrise/sunset
Could it be related to the question you have discussed here?
http://www.grasshopper3d.com/group/ladybug/forum/topics/1-hour-missing-ladybug?commentId=2985220%3AComment%3A1515958&xg_source=msg_com_gr_forum
Best
Antonello
…
t creates the file (*.rad & *.dat) and everything goes ok. Actually I have no idea about where the problem is: the command in Python looks fine but I'm not good at programming [line 175: runCmdAndGetTheResults( "/c " + batchFilePath) ].
In addition to this I guess that creating an input (domain 0 -> 1) able to modify the multiplier parameter in the IES file before the conversion to the radiance format would make it complete.
I have attached the IES file to let you try how it runs.
let me know your thought,
Claudio
PS: the IES attached is taken from http://www.zumtobel.com/com-en/products/1338.html?42915795 . It is also quite curious how the component creates two polygons where is applied the light material.
I have found some interesting data sheets about IES file format:
http://www.ltblight.com/English.lproj/LTBLhelp/pages/iesformat.html
http://www.cn-hopu.com/upload/file/IES.pdf
http://docs.autodesk.com/ACD/2013/ENU/index.html?url=files/GUID-45CAAF1C-7C9D-49A7-B18D-00CA5E2ED380.htm,topicNumber=d30e153989…
script, it works fine, however if I copy the example in c# into a c# script, it doesn't recognize the methods. The help files outlines additional steps when coding in c#:
""1. Create a new Visual C# 2005 Console Application project.
2. Add a reference (COM) in the project to the Sap2000.exe.
3. Paste the following code inside function Main():
//dimension variables
Sap2000v15.SapObject mySapObject;
Sap2000.cSapModel mySapModel;
int ret;
int i;""
Is there a way to still script inside a grasshopper component in c# or should I switch to using VBA?…
Firefly_firmata into my Arduino UNO board;
3. I wrote a definition with open port component and serial read (with timer) component, feeding the correct COM number and opening the port in the right time.
All components are grey, but when I connect a panel component I can't see anything but a list of nosense numbers (see attached image).
What am I doing wrong? I also downloaded files from this youtube video, but nothing...
https://www.youtube.com/watch?v=RNoAYWtky6g
I really hope in your help :) thank you in advance…
picture:
... and on a PC without anything attached to the serial port. When you open the port, start the read component and its timer, do you then get a stream of <empty> values in the log output? (hmmm... I suppose that's only reasonable - but still, you are also seeing this?)
I suppose that, because of the mutually exclusive behavior of both the spider and grasshopper (i.e. only one at a time can access the COM port), we can deduce that we are listening on the correct port.
Am I listening on the correct pin (if such a notion makes sense at all)? If I look back to the spider software, I see that 9 channels are listed and that it's only the measured value on channel 0 that changes when I press the load cell. Channels 1, 2, and 3 report OVERFLOW; 4, 5, 6, and 7 are pretty much constant at 0.000 to 0.005 V; and channel 8 says FFFF. I do not know how things like that work so I do not know if they reflect reading from the 9 pins on the D-sub 9 connector.
As for your BTW question: no, I don't need to record all of the sensor values. I suppose that the Out value on the Read component will always reflect the most current value and that's all that I need to get on with life. In the end, the idea is that we have 4 load cells in the 4 corners of a plate onto which a vertical pipe is fixed. Loads are then put on the top end of the pipe and we'll have to visualize both direction and magnitude of the bending moment that is calculated from the compression - tension readings from the load cells... We've done this on a scaled model and streamed load cell information into MatLab. Now we'll have to use a different datalogger and I was hoping to be able to do the post processing in Rhino.
wim…