Note that there are some explanatory texts on larger screens.

plurals
  1. POLogging picologger to excel using vba
    primarykey
    data
    text
    <p>I have a picolog 1012 datalogger which I have to take a large amount of data on. The default software is really unpleasant to use and PicoTech provides some simple <a href="http://dl.picotech.com/drivers/PL1000sdk_r10_5_0_19.zip" rel="nofollow">example script</a> to allow data recording in excel. Unfortunately it only logs data from two channels and I have nine.</p> <p>I have managed to adjust the logging interval and time but I can't get the number of channels to work correctly.</p> <pre><code>' Excel Macro for the PicoLog 1000 series ' Pico Technology 2009 Declare Function pl1000OpenUnit Lib "pl1000.dll" (ByRef handle As Integer) As Long Declare Function pl1000CloseUnit Lib "pl1000.dll" (ByVal handle As Integer) As Long Declare Function pl1000GetUnitInfo Lib "pl1000.dll" (ByVal handle As Integer, ByVal S As String, ByVal lth As Integer, ByRef requiredSize As Integer, ByVal info As Integer) As Integer Declare Function pl1000SetTrigger Lib "pl1000.dll" (ByVal handle As Integer, ByVal enabled As Integer, ByVal enable_auto As Integer, ByVal auto_ms As Integer, ByVal channel As Integer, ByVal dir As Integer, ByVal threshold As Integer, ByVal hysterisis As Integer, ByVal delay As Single) As Integer Declare Function pl1000SetInterval Lib "pl1000.dll" (ByVal handle As Integer, ByRef us_for_block As Long, ByVal ideal_no_of_samples As Long, channels As Integer, ByVal No_of_channels As Integer) As Long Declare Function pl1000GetValues Lib "pl1000.dll" (ByVal handle As Integer, ByRef values As Integer, ByRef no_of_values As Long, ByRef overflow As Integer, ByRef triggerIndex As Long) As Long Declare Function pl1000Run Lib "pl1000.dll" (ByVal handle As Integer, ByVal no_of_values As Long, ByVal method As Integer) As Integer Declare Function pl1000Ready Lib "pl1000.dll" (ByVal handle As Integer, ByRef ready As Integer) As Long Declare Function pl1000MaxValue Lib "pl1000.dll" (ByVal handle As Integer, ByRef maxValue As Integer) As Long Dim status As Long Dim handle As Integer Dim values(200) As Integer Dim channels(22) As Integer Dim nValues As Long Dim ok As Integer Dim ready As Integer Dim requiredSize As Integer Dim S As String * 255 Public port As Integer Public product As Integer Dim maxValue As Integer Function adc_to_mv(value As Integer) As Integer adc_to_mv = value / maxValue * 2500 End Function Sub GetPl1000() ' Open device status = pl1000OpenUnit(handle) opened = handle &lt;&gt; 0 If opened Then 'Get the maximum ADC value for this variant status = pl1000MaxValue(handle, maxValue) ' Get the unit information Cells(9, "p").value = "Unit opened" SLegnth = pl1000GetUnitInfo(handle, S, 255, requiredSize, 3) Cells(10, "P").value = S SLegnth = pl1000GetUnitInfo(handle, S, 255, requiredSize, 4) Cells(11, "P").value = S SLegnth = pl1000GetUnitInfo(handle, S, 255, requiredSize, 1) Cells(12, "P").value = S ' No Trigger Call pl1000SetTrigger(handle, False, 0, 0, 0, 0, 0, 0, 0) ' Say that we want to take [W3] readings in [W4] s ' from channels 1 and 2 'Set number of samples to read Dim samplenum As Integer samplenum = Worksheets("Sheet1").Range("W3").value 'Reads number of samples from W3 nValues = samplenum channels(0) = 1 channels(1) = 2 channels(2) = 3 channels(3) = 4 channels(4) = 5 channels(5) = 6 channels(6) = 7 channels(7) = 8 channels(8) = 9 'Set test length Dim sampleInterval As Long Dim microsecs_for_block As Long Dim testlength As Integer testlength = Worksheets("Sheet1").Range("$w$4").value microsecs_for_block = testlength * 1000000 status = pl1000SetInterval(handle, microsecs_for_block, nValues, channels(0), 2)''&lt;changing the 2 to a nine really made the data go odd&gt; status = pl1000Run(handle, nValues, 0) ready = 0 Do While ready = 0 status = pl1000Ready(handle, ready) Loop ' Get a block of 100 readings... ' we can call this routine repeatedly ' to get more blocks with the same settings Dim triggerIndex As Long Dim overflow As Integer status = pl1000GetValues(handle, values(0), nValues, overflow, triggerIndex) ' Copy the data into the spreadsheet For i = 0 To nValues - 1 Cells(i + 4, "A").value = adc_to_mv(values(2 * i)) Cells(i + 4, "B").value = adc_to_mv(values(2 * i + 1)) '''&lt;I am not sure what this command is doing so I have tried simply expanding it into other columns. The sheet does add data into cells C-E but it appears to be duplicate data from A and B&gt; Cells(i + 4, "C").value = adc_to_mv(values(2 * i + 2)) Cells(i + 4, "D").value = adc_to_mv(values(2 * i + 3)) Cells(i + 4, "E").value = adc_to_mv(values(2 * i + 4)) Next i ' Close the unit when finished to drop the driver Call pl1000CloseUnit(handle) Else MsgBox "Unable to open device", vbCritical End If End Sub </code></pre> <p>Can anyone shed any insight?</p> <p>Is this something that anyone who knows anything about VBA could solve, or do you need to have picolog knowledge too? Obviously if nothing else, one needs a picologger to test the code properly.</p>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload