⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gprs.zrg

📁 透明传输的DTU。实现配置:microchip 18F6520,协议DL/T645。 全部C源码文件。
💻 ZRG
📖 第 1 页 / 共 2 页
字号:
***HZP
***05.5.18
define database A
表号			: C,	9
标志			: N,	1
表时钟			: C,	8
掌时钟			: C,	8
时段费率			: C,	72
编程时间			: C,	8
反向时间			: C,	8
反累时间			: N,	9
状态字			: C,	1
脉冲累计总		: N,	2
脉冲累计峰		: N,	2
脉冲累计平		: N,	2
脉冲累计谷		: N,	2
当月有功总		: N,	6,	2
当月有功峰		: N,	6,	2
当月有功平		: N,	6,	2
当月有功谷		: N,	6,	2
上月有功总		: N,	6,	2
上月有功峰		: N,	6,	2
上月有功平		: N,	6,	2
上月有功谷		: N,	6,	2
上上有功总		: N,	6,	2
上上有功峰		: N,	6,	2
上上有功平		: N,	6,	2
上上有功谷		: N,	6,	2
反电量总 		: N,	6,	2
反电量峰 		: N,	6,	2
反电量平 		: N,	6,	2
反电量谷 		: N,	6,	2
总电1			: N,	6,	2
总电2			: N,	6,	2
总电3			: N,	6,	2
总电4			: N,	6,	2
总电5			: N,	6,	2
总电6			: N,	6,	2
总电7			: N,	6,	2
总电8			: N,	6,	2
总电9			: N,	6,	2
总电10			: N,	6,	2
总电11			: N,	6,	2
总电12			: N,	6,	2
峰电1			: N,	6,	2
峰电2			: N,	6,	2
峰电3			: N,	6,	2
峰电4			: N,	6,	2
峰电5			: N,	6,	2
峰电6			: N,	6,	2
峰电7			: N,	6,	2
峰电8			: N,	6,	2
峰电9			: N,	6,	2
峰电10			: N,	6,	2
峰电11			: N,	6,	2
峰电12			: N,	6,	2
平电1			: N,	6,	2
平电2			: N,	6,	2
平电3			: N,	6,	2
平电4			: N,	6,	2
平电5			: N,	6,	2
平电6			: N,	6,	2
平电7			: N,	6,	2
平电8			: N,	6,	2
平电9			: N,	6,	2
平电10			: N,	6,	2
平电11			: N,	6,	2
平电12			: N,	6,	2
谷电1			: N,	6,	2
谷电2			: N,	6,	2
谷电3			: N,	6,	2
谷电4			: N,	6,	2
谷电5			: N,	6,	2
谷电6			: N,	6,	2
谷电7			: N,	6,	2
谷电8			: N,	6,	2
谷电9			: N,	6,	2
谷电10			: N,	6,	2
谷电11			: N,	6,	2
谷电12			: N,	6,	2
enddef

define database B
密码			: C,	8
清零密码			: C,	8
时段数			: N,    2
时段费率1		: C,	72
时段费率2		: C,	72
脉冲常数			: N,	4
上次表号			: C,	9
打包标志			: N,	2
冻结日           	: C,	2
时误差范围		: N,	2
显示设定           	: C,	4
循显时间			: N,	2	
停显时间			: N,	2
电量底度			: N,	7,	1
出厂编号			: C,	12
局编号			: C,	12
enddef



define var
	CHOICE    	: C,	1
	done		: N,	1
	error		: N,	1
	oldBH		: C,	9
	newBH		: C,	9
	oldMM		: N,	8
	newMM		: N,	8
	lastBH		: C,	12
	zongDL		: N,	9,1
	jianDL		: N,	9,1
	fengDL		: N,	9,1
	pingDL		: N,	9,1
	guDL		: N,	9,1
	fxDL		: N,	9,1
	SDFL		: C,	72

	APN			: C,	1[7]={"X","M","D","L",".","F","J"}
	PORTNAME	: C,	1[4]={"2","0","0","2"}
	I         	: N,   	4
	J         	: N,   	3
	K		: N,	4
	L         	: N,   	2
	m		: N,	4
	s		: N,	4
	nComResult	: N,	3
	Buffer0    	: C,   	1[64]
	Buffer    	: C,   	1[64]
	RecBuffer   : C,   	1[64]
	char1		: C,	1
	char2		: C,	2
	char3		: C,	3
	char4		: C,	4
	char5		: C,	5
	char6		: C,	6
	char66		: C,	6
	char8		: C,	8
	char9		: C,	9
	char12		: C,	12
	char16		: C,	16

	charall		: C,	9
	oldMMall	: N,	8
	charJBH		: C,	12
	tempall1	: N,	4
	tempall2	: N,	4
	tempall3	: N,	4
	charall1	: C,	2
	charall2	: C,	2
	
* --------------------------------------	
	IPAddress	: C,	15
	PORT		: C,	4
	APNStr		: C,	16
	SimCardNO	: C,	11
	AnswerCSQ	: C,	10
	AttachedSta	: C,	10
	DTUDate		: C,	8
	DTUTime		: C,	8
	KeyValue	: N,	2
	BeatTime	: N,	2
* --------------------------------------	
	temp1		: N,	1
	temp2		: N,	3
	temp4		: N,	4
	temp4a		: N,	4
	temp4b		: N,	4
	temp6		: N,	6
	temp66		: N,	6
	temp8		: N,	8
	temp10		: N,	10
	temp12		: N,	12
	temp14		: N,	14
	mdFLAG		: N,	1
enddef

********输入采集器终端号
procedure ask_DTUNO
	clear
	@ 0,1 say "输入终端号(两位)"
	@ 1,1 say "直接回车为广播号。"
	@ 2,1
	input to char2
	char2=TRIM(char2)
	temp1=len(char2)
	if temp1=0
		buffer{2,1}=099h
		buffer{3,1}=099h
		buffer{4,1}=099h
		buffer{5,1}=099h
		buffer{6,1}=099h
		buffer{7,1}=099h
	else
		temp4=(asc(substr(char2,1,1))-48)*16
		temp4=temp4+(asc(substr(char2,2,1))-48)
		buffer{2,1}=chr(temp4)
	endif	&&if temp1=0
	return
endpro

********要继续吗
procedure comeon
	clear
	@ 0,1 say "未收到正常应答"
	@ 1,1 say "按确认键重设置"
	@ 2,1 say "按其它键退出"
	wait "" to char1
	return
endpro

********发送帧
procedure SendCom
***	INITSIO 4,"E",8			&&1200,偶校验,8位数据
********红外
	if mdFLAG=1
		set com to 2
		buffer{1,1}=068H
		buffer{8,1}=068H
		L=buffer{10,1}
		buffer{11+L,1}=CheckSum(buffer{1,10+L})
		buffer{12+L,1}=016H
****************do dis_buffer
		buffer0{1,1}=0feH
		buffer0{2,1}=0feH
		buffer0{3,1}=0feH
		sends buffer0{1,3}
		sends buffer{1,12+L}
	endif
********485口 6针->25针
	if mdFLAG=2
		set com to 1 /485
		j=receives(RecBuffer{63,1},1)
		buffer{1,1}=068H
		buffer{8,1}=068H
		L=buffer{10,1}
		buffer{11+L,1}=CheckSum(buffer{1,10+L})
		buffer{12+L,1}=016H
****************do dis_buffer
*		buffer0{1,1}=0feH
*		sends buffer0{1,1}
*		sends buffer0{1,1}
*		sends buffer0{1,1}

		sends buffer{1,12+L}
	endif
********232口 
	if mdFLAG=3
		set com to 1
		j=receives(RecBuffer{255,1},1)
		buffer{1,1}=068H
		buffer{8,1}=068H
		L=buffer{10,1}
		buffer{11+L,1}=CheckSum(buffer{1,10+L})
		buffer{12+L,1}=016H
*do dis_buffer
*		buffer0{1,1}=0feH
*		sends buffer0{1,1}
*		buffer0{1,1}=0feH
*		sends buffer0{1,1}
*		buffer0{1,1}=0feH
*		sends buffer0{1,1}
*		buffer0{1,1}=0feH
		sends buffer{1,12+L}
	endif
	
    	return
endpro

********显示buffer
procedure dis_buffer
	i=1
	k=0
	clear
	j=buffer{10,1}
	j=j+12
	do while i<=j
		temp12=buffer{i,1}
		char12=hex(temp12)
		* +" "+str(i,2)+" "+str(j,2)
		? char12
		i=i+1
		k=k+1
		if k=4
			k=0
			wait ""
		endif
	enddo
	wait ""
	return
endpro	

procedure dis_RecBuffer
	i=1
	k=0
	clear
	j=RecBuffer{10,1}
	j=j+12

	do while i<=j
		temp2=RecBuffer{i,1}
		char1=hex(temp2)
		? char1
		i=i+1
		k=k+1
		if k=4
			k=0
			wait ""
		endif
	enddo
*	if nComResult<>0
*		? "error"+str(nComResult,6)
*	else
*		? "okokok"
*	endif

	wait ""
	return
endpro	

********接收帧
procedure ReceiveCom
	nComResult=0
	i=0
	j=0
	temp12=0
	RecBuffer{1,1}="00"
********检测帧开始标志
	do while i<>068H
*		j=receives(RecBuffer{1,1},9)	&&延时900ms
*		j=receives(RecBuffer{1,1},15)	&&延时 1.5s
		j=receives(RecBuffer{1,1},30)	&&延时 6s
		if j<>0
			i=RecBuffer{1,1}
		else
			sound 7,1
			sound 0,1	&&停顿250ms
			sound 7,1
			sound 0,1
	        return
		endif
	enddo
********读入固定长度的后续数据,延时500ms
	j=receives(RecBuffer{2,9},5)
	if j<9
		nComResult=256
		return
	endif
	L=RecBuffer{10,1}
*******读取非固定长度的数据
	j=receives(RecBuffer{11,L+2},3)
	if j<L+2
		nComResult=257
		return
	endif
*	i=RecBuffer{11+L,1}
*	if i<>asc(chr(CheckSum(RecBuffer{1,10+L})))
*		nComResult=512
*		return
*	endif
***////
***	do dis_RecBuffer
***////
	
	sound 2,2
	return
endpro

********桢格式错
procedure pinerror
	clear
	@ 0,1 say "帧格式错误"
	@ 1,1 say "按任一键退出" 
	wait ""
	powerdown unlock
	return
endpro

********构造A0-A6,含a
procedure getB06
	done=0

	if asc(substr(char2,1,1))>=48.and.asc(substr(char2,1,1))<=57
		temp4=(asc(substr(char2,1,1))-30H)*16
	else
		return
	endif
	if asc(substr(char2,2,1))>=48.and.asc(substr(char2,2,1))<=57
		temp4=temp4+(asc(substr(char2,2,1))-30H)
	else
		return
	endif
	buffer{1,1}=chr(temp4)

	done=1
    	return
endpro

********写终端号(八位)
procedure SetDTUNO
	clear
	@ 1,1 say "请输入DTU终端号:"
	@ 2,1 say "8位:"
	input to char8
	char8=TRIM(char8)
	temp1=len(char8)
	if temp1<>8
		return
	endif

	do ask_DTUNO

	buffer{9,1}=09H
	buffer{10,1}=06H		&&4+2=6
	buffer{11,1}=00H
	buffer{12,1}=11H
	clear
	@ 0,1 say "设置中..."
*	buffer{11,3}=substr(NumToBCD(val(substr(newBH,4,6)),33H)+chr(51)+chr(51)+chr(51),1,3)
*	buffer{14,1}=asc(substr(newBH,3,1))+033H
*	buffer{15,1}=NumToBCD(val(substr(newBH,1,2)),33H)
*	buffer{16,1}=0AAH+033H

	buffer{13,4}=NumToBCD(val(substr(char8,1,8)),00H)
	do SendCom
	do ReceiveCom
	if nComResult<>0
		do pinerror
		return
	else
		temp2=RecBuffer{9,1}
		do while temp2<>089H
			do comeon
			if asc(char1)=13
				do SendCom
				do ReceiveCom
			else
				return
			endif
			temp2=RecBuffer{9,1}
		enddo
	endif
	clear
	@ 0,1 say "终端号设置完毕。"
	@ 1,1 say "按任意键退出" 
	wait ""
	return
endpro

******** 设置用户名、密码
procedure SetUserNamePassword
	clear
	@ 3,1 say "用户名:"	
	@ 4,1 
	input to char16
	char16=TRIM(char16)
	temp2=len(char16)
	if temp2=0
		return
	endif
	buffer{13,temp2}=char16{1,temp2}
	@ 5,1 say "密码:"	
	@ 6,1 
	input to char16
	char16=TRIM(char16)
	temp2=len(char16)
	if temp2=0
		return
	endif
	buffer{29,temp2}=char16{1,temp2}

	clear
	@ 0,1 say "设置中..."

	buffer{2,1}=099h
	buffer{3,1}=099h
	buffer{4,1}=099h
	buffer{5,1}=099h
	buffer{6,1}=099h
	buffer{7,1}=099h
	buffer{9,1}=04H
	buffer{10,1}=2+32
	buffer{11,1}=0CH+033H
	buffer{12,1}=0FFH+033H-256
	J=0
	do while J<32
		temp4a=buffer{13+J,1}
		temp4a=temp4a+51
		if temp4a>=256 
			temp4a=temp4a-256
		endif
		buffer{13+J,1}=temp4a
		J=J+1
	enddo
	
	do SendCom
	do ReceiveCom
	if nComResult<>0
		do pinerror
		return
	else
		temp2=RecBuffer{9,1}
		do while temp2<>084H
			do comeon
			if asc(char1)=13
				do SendCom
				do ReceiveCom
			else
				return
			endif
			temp2=RecBuffer{9,1}
		enddo
	endif
	clear
	@ 0,1 say "用户名密码设置成功。"
	@ 1,1 say "按任意键退出" 
	wait ""
	return
endpro


********设置日期时间
procedure SetDateTime
	buffer{2,1}=099h
	buffer{3,1}=099h
	buffer{4,1}=099h
	buffer{5,1}=099h
	buffer{6,1}=099h
	buffer{7,1}=099h

	buffer{9,1}=09H
	buffer{10,1}=08H
	buffer{11,1}=00H
	buffer{12,1}=15H
	clear
	@ 0,1 say "设置中..."

	buffer{13,1}=NumToBCD(val(substr(Time(),7,2)),00H)	&&second
	buffer{14,1}=NumToBCD(val(substr(Time(),4,2)),00H)	&&minute
	buffer{15,1}=NumToBCD(val(substr(Time(),1,2)),00H)	&&hour
	buffer{16,1}=NumToBCD(val(substr(Date(),7,2)),00H)	&&date
	buffer{17,1}=NumToBCD(val(substr(Date(),4,2)),00H)	&&month
	buffer{18,1}=NumToBCD(val(substr(Date(),1,2)),00H)	&&year
	do SendCom
	do ReceiveCom
	if nComResult<>0
		do pinerror
		return
	else
		temp2=RecBuffer{9,1}
		do while temp2<>089H
			do comeon
			if asc(char1)=13
				buffer{13,1}=NumToBCD(val(substr(Time(),7,2)),00H)	&&second
				buffer{14,1}=NumToBCD(val(substr(Time(),4,2)),00H)	&&minute
				buffer{15,1}=NumToBCD(val(substr(Time(),1,2)),00H)	&&hour
				buffer{16,1}=NumToBCD(val(substr(Date(),7,2)),00H)	&&date
				buffer{17,1}=NumToBCD(val(substr(Date(),4,2)),00H)	&&month
				buffer{18,1}=NumToBCD(val(substr(Date(),1,2)),00H)	&&year
				do SendCom
				do ReceiveCom
			else
				return
			endif
			temp2=RecBuffer{9,1}
		enddo
	endif
	clear
	@ 0,1 say "日期时间设置完毕"
	@ 1,1 say "按任一键退出" 
	wait ""
	return
endpro

********写端口
procedure SetPort
	clear
	@ 3,1 say "端口: 2002"	
	@ 4,1 say "直接回车取默认值"
	@ 5,1 
	input to PORT
	KeyValue=lastkey()
	if KeyValue=24
		return
	endif
	PORT=TRIM(PORT)
	temp2=len(PORT)

	clear
	@ 0,1 say "设置中..."

	buffer{2,1}=099h
	buffer{3,1}=099h
	buffer{4,1}=099h
	buffer{5,1}=099h
	buffer{6,1}=099h
	buffer{7,1}=099h

	buffer{9,1}=09H
	buffer{10,1}=06H
	buffer{11,1}=00H
	buffer{12,1}=17H	&&17H:set port
	if temp2=0
		buffer{13,4}=PORTNAME{1,4}
	else
		buffer{13,temp2}=PORT{1,temp2}
	endif
	
	do SendCom
	do ReceiveCom
	if nComResult<>0
		do pinerror
		return
	else
		temp2=RecBuffer{9,1}
		do while temp2<>089H
			do comeon
			if asc(char1)=13
				do SendCom
				do ReceiveCom
			else
				return
			endif
			temp2=RecBuffer{9,1}
		enddo
	endif
	clear
	@ 0,1 say "端口号设置成功!"
	@ 1,1 say "按任意键退出" 
	wait ""

	return
endpro

********设置心跳时间
procedure SetBeatTime
	buffer{2,1}=099h
	buffer{3,1}=099h
	buffer{4,1}=099h
	buffer{5,1}=099h
	buffer{6,1}=099h
	buffer{7,1}=099h

	buffer{9,1}=09H
	buffer{10,1}=03H	&&1+2(DI0,DI1)
	buffer{11,1}=00H
	buffer{12,1}=16H
	clear
	@ 0,1 say "设置中..."

	clear
	@ 1,0 say "心跳时间(10分钟):"
	@ 2,0
	input to BeatTime
	KeyValue=lastkey()
	if KeyValue=24
		return
	endif
	if BeatTime = 0
		buffer{13,1}=0AH		&&10分钟,不加33H
	else
		buffer{13,1}=BeatTime
	endif

	do SendCom
	do ReceiveCom
	if nComResult<>0
		do pinerror
		return
	else
		temp2=RecBuffer{9,1}
		do while temp2<>089H
			do comeon
			if asc(char1)=13
				do SendCom
				do ReceiveCom
			else
				return
			endif
			temp2=RecBuffer{9,1}
		enddo
	endif
	
	clear
	@ 1,0 say "心跳时间设置完毕。"
	@ 2,0 say "按任一键退出" 
	wait ""
	return

endpro

********写IP地址
procedure SetIPAddress
	clear
	@ 1,1 say "请输入IP地址..."
	@ 2,1 say "最长15位:"
	@ 3,1
	input to IPAddress
	IPAddress=TRIM(IPAddress)
	temp2=len(IPAddress)

	buffer{2,1}=099h
	buffer{3,1}=099h
	buffer{4,1}=099h
	buffer{5,1}=099h
	buffer{6,1}=099h
	buffer{7,1}=099h

	buffer{9,1}=09H
	buffer{10,1}=temp2+2
	buffer{11,1}=00H
	buffer{12,1}=14H		&&DI1
	clear
	@ 0,1 say "设置中..."

	buffer{13,temp2}=IPAddress{1,temp2}

	do SendCom
	do ReceiveCom
	if nComResult<>0
		do pinerror
		return
	else
		temp2=RecBuffer{9,1}
		do while temp2<>089H
			do comeon
			if asc(char1)=13
				do SendCom
				do ReceiveCom
			else
				return
			endif
			temp2=RecBuffer{9,1}
		enddo
	endif
	clear
	@ 0,1 say "IP地址设置成功!"
	@ 1,1 say "按任一键退出" 
	wait ""

	return
endpro

******** 设置APN
procedure SetAPN
	clear
	@ 3,1 say "APN: XMDL.FJ"	
	@ 4,1 say "直接回车取默认值"
	@ 5,1 
	input to IPAddress
	KeyValue=lastkey()
	if KeyValue=24
		return
	endif
	IPAddress=TRIM(IPAddress)
	temp2=len(IPAddress)

	clear
	@ 0,1 say "设置中..."

	buffer{2,1}=099h
	buffer{3,1}=099h
	buffer{4,1}=099h
	buffer{5,1}=099h
	buffer{6,1}=099h
	buffer{7,1}=099h

	buffer{9,1}=09H
	buffer{10,1}=12H
	buffer{11,1}=00H
	buffer{12,1}=13H
	if temp2=0
		buffer{13,7}=APN{1,7}
	else
		buffer{13,temp2}=IPAddress{1,temp2}
	endif
	
	do SendCom
	do ReceiveCom

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -