CRBasic 北斗的异或校验

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值