Our full technical support staff does not monitor this forum. If you need assistance from a member of our staff, please submit your question from the Ask a Question page.


Log in or register to post/reply in the forum.

Gill Windmaster Pros with CR1000X


Justin R Apr 21, 2021 04:41 PM

Hello,

I'm working on a system which I have three Gill Windmaster Pros running at 32Hz on a CR1000X. 

I currently have all three working, but on different com port pairs (C1/2, C3/4, C5/6). I'm having issues getting them all to work on the same com port pair (C1/2). 

Does anyone have some advice on how I could get this to work based on my current code?

 

'Structure -- Constants/Variables/Units & Data Tables -- Program

'Current Devices                 
'Windmaster Pro A  C1/2(GI-1561-PK-020/W)  
'Windmaster Pro B  C3/4
'Windmaster Pro C  C5/6

PipeLineMode

Const FAST_SCAN_INTERVAL = 32  'Scan at 32Hz
Const SERIAL_BUFF_SIZE = 48*(Ceiling (32*FAST_SCAN_INTERVAL/1000))+48+1 'Minimum serial buffer size is 48 bytes/record * (Ceiling (32 records/second * SCAN_INTERVAL / 1000)) + 48 + 1 bytes.

'WindMaster Pro A data
Public windA(5)
Alias windA(1) = UxA
Alias windA(2) = UyA
Alias windA(3) = UzA
Alias windA(4) = TsA
Alias windA(5) = diag_3dA
Units windA = m/s
Units TsA = C
Units diag_3dA = unitless
Dim in_bytes_strA As String * 45
Dim nmbr_bytes_rtrndA
Dim gill_checksum_flgA As Boolean
Dim gill_disable_flgA As Boolean

'Windmaster A Data Table
DataTable (ts_dataA,TRUE,-1)
  DataInterval (0,FAST_SCAN_INTERVAL,mSec,0) '32Hz
  TableFile ("CRD:WM_ts_dataA",64,-1,0,1,Hr,UxA,0)'New table each hour
  Sample (5,UxA,IEEE4)
EndTable

'WindMaster Pro B data
Public windB(5)
Alias windB(1) = UxB
Alias windB(2) = UyB
Alias windB(3) = UzB
Alias windB(4) = TsB
Alias windB(5) = diag_3dB
Units windB = m/s
Units TsB = C
Units diag_3dB = unitless
Dim in_bytes_strB As String * 45
Dim nmbr_bytes_rtrndB
Dim gill_checksum_flgB As Boolean
Dim gill_disable_flgB As Boolean

'Windmaster B Data Table
DataTable (ts_dataB,TRUE,-1)
  DataInterval (0,FAST_SCAN_INTERVAL,mSec,0) '32Hz
  TableFile ("CRD:WM_ts_dataB",64,-1,0,1,Hr,UxB,0)'New table each hour
  Sample (5,UxB,IEEE4)
EndTable

'WindMaster Pro C data
Public windC(5)
Alias windC(1) = UxC
Alias windC(2) = UyC
Alias windC(3) = UzC
Alias windC(4) = TsC
Alias windC(5) = diag_3dC
Units windC = m/s
Units TsC = C
Units diag_3dC = unitless
Dim in_bytes_strC As String * 45
Dim nmbr_bytes_rtrndC
Dim gill_checksum_flgC As Boolean
Dim gill_disable_flgC As Boolean

'Windmaster C Data Table
DataTable (ts_dataC,TRUE,-1)
  DataInterval (0,FAST_SCAN_INTERVAL,mSec,0) '32Hz
  TableFile ("CRD:WM_ts_dataC",64,-1,0,1,Hr,UxC,0)'New table each hour
  Sample (5,UxC,IEEE4)
EndTable
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
BeginProg
  Scan (FAST_SCAN_INTERVAL,mSec,200,0)
'Windmaster '38400 bps, no parity, 8 data bits, 1 start bit, 1 stop bit, no flow control
'Windmaster Pro C
    SerialOpen (ComC1,38400,19,0,SERIAL_BUFF_SIZE)
    SerialInRecord (ComC1,in_bytes_strA,&H02,0,&H0D0A,nmbr_bytes_rtrndA,01) 'Capture all the data between the WindMaster Pro start of text (&h02) and the  (&h0D0A).
    SplitStr (UxA,in_bytes_strA,"",5,0) 'Split the string and convert to floats.
    gill_checksum_flgA = ( (HexToDec (Right (in_bytes_strA,2))) EQV (CheckSum (in_bytes_strA,9,Len (in_bytes_strA)-3)) )
    gill_disable_flgA = (NOT (gill_checksum_flgA) OR (nmbr_bytes_rtrndA=0) OR (diag_3dA<>0))
    CallTable ts_dataA
'Windmaster Pro B
    SerialOpen (ComC3,38400,19,0,SERIAL_BUFF_SIZE)
    SerialInRecord (ComC3,in_bytes_strB,&H02,0,&H0D0A,nmbr_bytes_rtrndB,01) 'Capture all the data between the WindMaster Pro start of text (&h02) and the  (&h0D0A).
    SplitStr (UxB,in_bytes_strB,"",5,0) 'Split the string and convert to floats.
    gill_checksum_flgB = ( (HexToDec (Right (in_bytes_strB,2))) EQV (CheckSum (in_bytes_strB,9,Len (in_bytes_strB)-3)) )
    gill_disable_flgB = (NOT (gill_checksum_flgB) OR (nmbr_bytes_rtrndB=0) OR (diag_3dB<>0))
    CallTable ts_dataB
'Windmaster Pro C    
    SerialOpen (ComC5,38400,19,0,SERIAL_BUFF_SIZE)
    SerialInRecord (ComC5,in_bytes_strC,&H02,0,&H0D0A,nmbr_bytes_rtrndC,01) 'Capture all the data between the WindMaster Pro start of text (&h02) and the  (&h0D0A).
    SplitStr (UxC,in_bytes_strC,"",5,0) 'Split the string and convert to floats.
    gill_checksum_flgC = ( (HexToDec (Right (in_bytes_strC,2))) EQV (CheckSum (in_bytes_strC,9,Len (in_bytes_strC)-3)) )
    gill_disable_flgC = (NOT (gill_checksum_flgC) OR (nmbr_bytes_rtrndC=0) OR (diag_3dC<>0))
    CallTable ts_dataC
  NextScan
EndProg

 Thanks!


pokeeffe Apr 22, 2021 03:00 PM

Looks good so far. Why are you trying to use a single com port instead? At that speed, the data is guaranteed to collide and create unusable garbage.


smile Apr 24, 2021 07:19 PM

Hi

It might work but I don't know if much slower. If I remember correctly, the windmaster can have an address and if the 3 windmasters have 3 different addresses, using the "POLLED" mode of returning data on request, each will respond only after being interrogated with its address.

Smile


JDavis Apr 26, 2021 03:03 PM

To coexist on one comport, the sensors must be in RS485 half duplex mode.

The polled mode is often prefered when on the same comport as user smile stated.

The other option is to adjust to output message format to include the sensor address. Then you change the last parameter of SerialInRecord() to 101 for independent buffers. You would also need to change the BeginWord parameter to catch the appropriate sensor address.

Be aware that you might have to drop your output rate with them all on the same port, due to bandwidth limitations at 38,400 baud.

Log in or register to post/reply in the forum.