CRBasic 北斗的异或校验
和校验字段是语句中的最后一个字段,它在定界符“”之后。
和校验是对语句中所有字符的8位(不包括起始和结束位)执行OR(异或)运算。所有字符指在定界符“$”或“!”与“”之间(但不包括这些定界符)的全部字符,其中包括“,”和“^”在内。发送时将16进制的高4位和低4位转换成两个ASCⅡ字符(0—9,A—F)。最高有效位首先发送。
'For programming tips, copy this address to your browser
'search window:https://www.campbellsci.com/videos/datalogger-programming
'To create a different opening program template, type in new
'instructions and select Template | Save as Default Template
'Date:
'Program author:
'Declare Constants
'Example:
'CONST PI = 3.141592654 or Const PI = 4*ATN(1)
'Declare Public Variables
'Example:
Public PTemp, Batt_volt
Public ASCIIString As String * 55 'Source
'Declare Private Variables
'Example:
Public ss(100) As String
Public i,z,length_ss,obj
Public length_str
Public check_str As String * 1000
Public begin As Long
Public str_hex_obj As Long
Public outstring As String *100
'Define Data Tables
DataTable (Test,1,-1) 'Set table size to # of records, or -1 to autoallocate.
DataInterval (0,15,Sec,10)
Minimum (1,Batt_volt,FP2,False,False)
Sample (1,PTemp,FP2)
EndTable
'Define Subroutines
'Sub
'EnterSub instructions here
'EndSub
'Main Program
BeginProg
SerialOpen (ComC1,115200,0,0,100)
Scan (1,Sec,0,0)
PanelTemp (PTemp,15000)
Battery (Batt_volt)
PTemp=INT(PTemp)
Batt_volt=INT(Batt_volt)
'ASCIIString = "12.1,3.4,10.8,12.6,4.4"'change
ASCIIString = "12,34,220"'change
obj = Len(ASCIIString)
For i = 1 To obj
ss(i) =Hex(ASCII(ASCIIString(1,1,i)) )
' midstring= midstring+str_hex(i)
Next i
length_ss = Len(ss)
'
check_str = "CCTXA,0950339,1,2,A4"
' ' Check string
For z =1 To obj
check_str=check_str+ss(z)
Next z
'
'check_str = "CCTXA,0950339,1,2,A431322E312C332E342C31302E382C31322E362C342E34"
length_str = Len(check_str)
'
begin = ASCII(check_str(1,1,1))
For i =2 To length_str
begin = begin XOR ASCII(check_str(1,1,i))
Next i
str_hex_obj = Hex(begin)
'
' length_str_hex_obj=Len( str_hex_obj)
' If length_str_hex_obj<2 Then str_hex_obj ="0"+str_hex_obj
'
' 'string convert to Hex
' lenth_ASCIIString = Len( ASCIIString )
' For i = 1 To lenth_ASCIIString
' ss(i) = ASCII(ASCIIString(1,1,i))
' str_hex(i) = Hex(ss(i))
'' midstring= midstring+str_hex(i)
' Next i
' outstring= "$CCTXA,0950339,1,2,A4"+str_hex(1)+str_hex(2)+str_hex(3)+str_hex(4)+str_hex(5)+str_hex(6)+str_hex(7)+str_hex(8)+str_hex(9)+"*"+str_hex_obj+CHR(13)+CHR(10)
' midstring=""
'Enter other measurement instructions
'Call Output Tables
'Example:
CallTable Test
If IfTime (0,60,Sec) Then SerialOut (ComC1,outstring,"",0,0)
NextScan
EndProg
之前还有个代码,回头用到再确定使用哪个吧。
'CR1000 Series Datalogger
'For programming tips, copy this address to your browser
'search window:https://www.campbellsci.com/videos/datalogger-programming
'To create a different opening program template, type in new
'instructions and select Template | Save as Default Template
'Date:
'Program author:
'Declare Constants
'Example:
'CONST PI = 3.141592654 or Const PI = 4*ATN(1)
'Declare Public Variables
'Example:
Public PTemp, Batt_volt
Public ASCIIString As String * 55 'Source
'Declare Private Variables
'Example:
Public str_hex(9) As String 'change
Public ss(9)
Public i
Public length_str, length_str_hex_obj,lenth_ASCIIString
Public check_str As String * 29
Public begin
Public str_hex_obj As String
Public outstring As String *100
Public midstring As String *100
'Define Data Tables
DataTable (Test,1,-1) 'Set table size to # of records, or -1 to autoallocate.
DataInterval (0,15,Sec,10)
Minimum (1,Batt_volt,FP2,False,False)
Sample (1,PTemp,FP2)
EndTable
'Define Subroutines
'Sub
'EnterSub instructions here
'EndSub
'Main Program
BeginProg
SerialOpen (Com2,115200,0,0,100)
Scan (1,Sec,0,0)
PanelTemp (PTemp,15000)
Battery (Batt_volt)
PTemp=INT(PTemp)
Batt_volt=INT(Batt_volt)
ASCIIString = "12,34,220"'change
' Check string
check_str = "CCTXA,0950339,1,2,A4"+"12,34,220" 'change
length_str = Len(check_str)
begin = ASCII(check_str(1,1,1))
For i =2 To length_str
begin =begin XOR ASCII(check_str(1,1,i))
Next i
str_hex_obj = Hex(begin)
length_str_hex_obj=Len( str_hex_obj)
If length_str_hex_obj<2 Then str_hex_obj ="0"+str_hex_obj
'string convert to Hex
lenth_ASCIIString = Len( ASCIIString )
For i = 1 To lenth_ASCIIString
ss(i) = ASCII(ASCIIString(1,1,i))
str_hex(i) = Hex(ss(i))
' midstring= midstring+str_hex(i)
Next i
outstring= "$CCTXA,0950339,1,2,A4"+str_hex(1)+str_hex(2)+str_hex(3)+str_hex(4)+str_hex(5)+str_hex(6)+str_hex(7)+str_hex(8)+str_hex(9)+"*"+str_hex_obj+CHR(13)+CHR(10)
' midstring=""
'Enter other measurement instructions
'Call Output Tables
'Example:
CallTable Test
If IfTime (0,60,Sec) Then SerialOut (Com2,outstring,"",0,0)
NextScan
EndProg