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

📄 gprs.zrg

📁 透明传输的DTU。实现配置:microchip 18F6520,协议DL/T645。 全部C源码文件。
💻 ZRG
📖 第 1 页 / 共 2 页
字号:
	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 "APN设置成功!"
	@ 1,1 say "按任意键退出" 
	wait ""
	return
endpro


********写卡号
procedure WriteToDTU
	clear
	@ 1,1 say "请输入SIM卡号..."
	@ 2,1 say "11位:"
	@ 2,6
	input to SimCardNO
	SimCardNO=TRIM(SimCardNO)
	temp2=len(SimCardNO)
	if temp2<>11
		return
	endif

	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}=0DH		&&11+2=13
	buffer{11,1}=00H
	buffer{12,1}=12H
	clear
	@ 0,1 say "设置中..."

	buffer{13,11}=SimCardNO{1,11}

	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



********终端485口检测
procedure TestDTU
	do ask_DTUNO

	buffer{9,1}=09H
	buffer{10,1}=02H
	buffer{11,1}=00H
	buffer{12,1}=01H
	clear
	@ 0,1 say "正在读取..."

	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
	temp14=BCDToNum(RecBuffer{2,6},00H)
	temp14=temp14+1000000000000
	char12=right(str(temp14,13),12)

	clear
	@ 0,1 say "NO."
	@ 0,4 say char12
	@ 1,1 say "通讯成功。"
	@ 5,1 say "按任意键退出" 
	wait ""
	return
endpro

********读出SIM卡号,不加33H
procedure ReadSIMNO
	do ask_DTUNO

	buffer{9,1}=09H
	buffer{10,1}=02H
	buffer{11,1}=00H
	buffer{12,1}=04H
	clear
	@ 0,1 say "正在读取..."

	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
	
	temp14=BCDToNum(RecBuffer{2,6},00H)
	temp14=temp14+1000000000000
	char12=right(str(temp14,13),12)
	SimCardNO=right(str(temp14,13),11)

	SimCardNO{1,11}=RecBuffer{13,11}
	clear
	@ 0,1 say "NO."
	@ 0,4 say char12
	@ 2,1 say "SIM卡号:"
	@ 3,1 say SimCardNO
	@ 5,1 say "按任意键退出" 
	wait ""
	return
endpro

********检查信号强度
procedure ReadSignalQuality
	do ask_DTUNO

	buffer{9,1}=09H
	buffer{10,1}=02H
	buffer{11,1}=00H
	buffer{12,1}=02H
	clear
	@ 0,1 say "正在读取..."

	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
	temp14=BCDToNum(RecBuffer{2,6},00H)
	temp14=temp14+1000000000000
	char12=right(str(temp14,13),12)
	AnswerCSQ=right(str(temp14,13),10)

	AnswerCSQ{1,10}=RecBuffer{13,10}
	clear
	clear
	@ 0,1 say "NO."
	@ 0,4 say char12
	@ 2,1 say "信号强度:"
	@ 3,1 say AnswerCSQ
	@ 5,1 say "按任意键退出" 
	wait ""
	return
endpro

********GPRS网络附着情况
procedure GPRSAttach
	do ask_DTUNO

	buffer{9,1}=09H
	buffer{10,1}=02H
	buffer{11,1}=00H
	buffer{12,1}=03H
	clear
	@ 0,1 say "正在读取..."

	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
	temp14=BCDToNum(RecBuffer{2,6},00H)
	temp14=temp14+1000000000000
	char12=right(str(temp14,13),12)
	AttachedSta=right(str(temp14,13),10)

	AttachedSta{1,10}=RecBuffer{13,10}
	clear
	@ 0,1 say "NO."
	@ 0,4 say char12
	@ 2,1 say "GPRS附着:"
	@ 3,1 say AttachedSta
	@ 5,1 say "按任意键退出" 
	wait ""
	return
endpro

********读终端号(八位)
procedure ReadDTUNO
	do ask_DTUNO

	buffer{9,1}=09H
	buffer{10,1}=02H
	buffer{11,1}=00H
	buffer{12,1}=07H
	clear
	@ 0,1 say "正在读取..."

	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
	
	temp14=BCDToNum(RecBuffer{2,6},00H)
	temp14=temp14+1000000000000
	char12=right(str(temp14,13),12)

	temp10=BCDToNum(RecBuffer{13,4},00H)
	temp10=temp10+100000000
	char8=right(str(temp10,9),8)

	clear
	@ 1,1 say "NO."
	@ 1,4 say char8
	@ 3,1 say "按任意键退出" 
	wait ""
	return
endpro

********读出日期时间
Procedure ReadTimeDate
	do ask_DTUNO

	buffer{9,1}=09H
	buffer{10,1}=02H
	buffer{11,1}=00H
	buffer{12,1}=05H
	clear
	@ 0,1 say "正在读取..."

	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
	temp14=BCDToNum(RecBuffer{2,6},00H)
	temp14=temp14+1000000000000
	char12=right(str(temp14,13),12)
	DTUDate=right(str(temp14,13),8)
	DTUTime=right(str(temp14,13),8)

	clear
	@ 0,1 say "NO."
	@ 0,4 say char12
	@ 2,1 say "日期:"
	DTUDate{1,8}=RecBuffer{13,8}
	@ 2,6 say DTUDate
	@ 3,1 say "时间:"
	DTUTime{1,8}=RecBuffer{22,8}
	@ 3,6 say DTUTime
	@ 5,1 say "按任意键退出" 

	wait ""
	return
endpro

******** 读取主站IP地址
procedure ReadIPAddress
	do ask_DTUNO

	buffer{9,1}=09H
	buffer{10,1}=02H
	buffer{11,1}=00H
	buffer{12,1}=09H
	clear
	@ 0,1 say "正在读取..."

	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
	
	temp14=BCDToNum(RecBuffer{2,6},00H)
	temp14=temp14+1000000000000
	char12=right(str(temp14,13),12)
	IPAddress="1234567890abcde" 	&&申请空间

	IPAddress{1,15}=RecBuffer{13,15}

	clear
	@ 0,1 say "NO."
	@ 0,4 say char12
	@ 2,1 say "IP地址:"
	@ 3,1 say IPAddress
	@ 4,1 say "按任意键退出" 
	wait ""
	return
endpro

******** 读取APN
procedure ReadAPN
	do ask_DTUNO

	buffer{9,1}=09H
	buffer{10,1}=02H
	buffer{11,1}=00H
	buffer{12,1}=0AH
	clear
	@ 0,1 say "正在读取..."

	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
	
	temp14=BCDToNum(RecBuffer{2,6},00H)
	temp14=temp14+1000000000000
	char12=right(str(temp14,13),12)
	APNStr="1234567890abcdef" 		&&申请空间
	APNStr{1,16}=RecBuffer{13,16}

	clear
	@ 0,1 say "NO."
	@ 0,4 say char12
	@ 2,1 say "APN:"
	@ 3,1 say APNStr
	@ 4,1 say "按任意键退出" 
	wait ""
	return
endpro

********** 读取端口号 **********
Procedure ReadPort
	do ask_DTUNO

	buffer{9,1}=09H
	buffer{10,1}=02H
	buffer{11,1}=00H
	buffer{12,1}=06H
	clear
	@ 0,1 say "正在读取..."

	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
	
	temp14=BCDToNum(RecBuffer{2,6},00H)
	temp14=temp14+1000000000000
	char12=right(str(temp14,13),12)
	PORT=right(str(temp14,13),4)

	PORT{1,4}=RecBuffer{13,4}

	clear
	@ 0,1 say "NO."
	@ 0,4 say char12
	@ 2,1 say "端口号:"
	@ 2,9 say PORT
	@ 4,1 say "按任意键退出" 
	wait ""
	return
endpro

********** 读取心跳时间 **********
Procedure ReadBeatTime
	do ask_DTUNO

	buffer{9,1}=09H
	buffer{10,1}=02H
	buffer{11,1}=00H
	buffer{12,1}=08H
	clear
	@ 0,1 say "正在读取..."

	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
	
	temp14=BCDToNum(RecBuffer{2,6},00H)
	temp14=temp14+1000000000000
	char12=right(str(temp14,13),12)

	temp2=BCDToNum(RecBuffer{13,1},00H)
	char2=right(str(temp2,2),2)

	clear
	@ 0,1 say "NO."
	@ 0,4 say char12
	@ 2,1 say "心跳时间:"
	@ 2,10 say char2
	@ 4,1 say "按任意键退出" 
	wait ""
	return
endpro

*********************************************************
*********************************************************
********设置功能
Procedure InitialDTU
    DO WHILE .T.
	done=0
	I=1
	do while I<=32
		Buffer{I,1}=00H
		RecBuffer{I,1}=00H
		I=I+1
	enddo
	clear
	@ 0,0	say  "---- 初始化设置 ----"
	@ 1,1	say  "1 写终端号"
	@ 2,1	say  "2 写卡号"
	@ 3,1	say  "3 主站IP地址"	
	@ 4,1	say  "4 主站端口"	
	@ 5,1	say  "5 接入点名称APN"
	@ 6,1  	say  "6 用户名、密码"
	@ 7,1	say  "7 写日期时间"	
	@ 8,1	say  "8 写心跳时间"	
	
     	wait  ""  to  choice
   	DO 	CASE
******** "1" 设置终端号(八位)
			CASE  asc(choice) = 31H
			do SetDTUNO
******** "2" 设置卡号
     		CASE  asc(choice) = 32H
	  		do WriteToDTU
******** "3" 设置主站IP地址
     		CASE  asc(choice) = 33H
	  		do SetIPAddress
******** "4" 设置主站端口
     		CASE  asc(choice) = 34H
	  		do SetPort
******** "5" 设置接入点名称(APN)
     		CASE  asc(choice) = 35H
				do SetAPN
******** "6" 设置用户名、密码
     		CASE  asc(choice) = 36H
				do SetUserNamePassword
******** "7" 设置日期时间
     		CASE  asc(choice) = 37H
			do SetDateTime
******** "8" 设置心跳时间
     		CASE  asc(choice) = 38H
			do SetBeatTime

******** 退出键 退出
		CASE  asc(choice) = 24
			clear
			return
   		ENDCASE
    ENDDO
	return
endpro

********信道检测
Procedure ChannelCheck
    DO WHILE .T.
	done=0
	I=1
	do while I<=32
		Buffer{I,1}=00H
		RecBuffer{I,1}=00H
		I=I+1
	enddo
	clear
&&	@ 0,1	say  "1 采集器485口"
	@ 1,1	say  "1 采集器485口"

   	wait  ""  to  choice
   	DO CASE
******** "1" 采集器485口检测
     		CASE  asc(choice) = 31H
			do TestDTU

******** 退出键 退出
		CASE  asc(choice) = 24
			clear
			return
   	ENDCASE
    ENDDO
	return
endpro

********信息读取
Procedure ReadInfo
    DO WHILE .T.
	done=0
	I=1
	do while I<=32
		Buffer{I,1}=00H
		RecBuffer{I,1}=00H
		I=I+1
	enddo
	clear
	@ 0,1	say  "1 GPRS终端号"
	@ 1,1	say  "2 SIM卡号"
	@ 2,1	say  "3 信号强度"
	@ 3,1	say  "4 GPRS网络附着情况"
	@ 4,1	say  "5 日期时间"
	@ 5,1  	say  "6 APN"
	@ 6,1  	say  "7 主站IP地址"
	@ 7,1  	say  "8 端口"
	@ 8,1  	say  "9 心跳间隔"
   	wait  ""  to  choice
   	DO CASE
******** "1" 读GPRS终端号
    		CASE  asc(choice) = 31H
			do ReadDTUNO
******** "2" 读出SIM卡号
     		CASE  asc(choice) = 32H
			do ReadSIMNo
******** "3" 检查信号强度
     		CASE  asc(choice) = 33H
			do ReadSignalQuality
******** "4" GPRS网络附着情况
     		CASE  asc(choice) = 34H
			do GPRSAttach
******** "5" 读出日期时间
     		CASE  asc(choice) = 35H
			do ReadTimeDate
******** "6" 读取APN
     		CASE  asc(choice) = 36H
				do ReadAPN
******** "7" 读取主站IP地址
     		CASE  asc(choice) = 37H
				do ReadIPAddress
******** "8" 读取端口号
     		CASE  asc(choice) = 38H
				do ReadPort
******** "9" 读取心跳时间
     		CASE  asc(choice) = 39H
				do ReadBeatTime

******** 退出键 退出
		CASE  asc(choice) = 24
			clear
			return
   	ENDCASE
    ENDDO
	return
endpro

********主程序(主菜单)
start
	select B
	go top
	clear
	@ 1,0 say "---GPRS现场检测仪---"
	@ 2,3 say "版本号 V1.4"
	@ 4,0 say "北京博纳电气有限公司"
	@ 5,0 say "Banner Ele Cor.,LTD"
	wait ""
	
	temp1=0

	do while temp1<>1
		clear
		@ 0,1 say "-- 选择通信接口 --"
		@ 1,1 say "  1 红外接口"
		@ 2,1 say "  2 485接口"
		@ 3,1 say "  3 232接口(9600)"
	    wait  ""  to  choice
		clear

	   	DO CASE
********红外接口
	     		CASE  asc(choice) = 49
				@ 0,1 say "---- 红外通讯 ----"
	     			mdFLAG=1
	     			temp1=1
	     			INITSIO 4,"E",8		&&=4:1200bps
	     			if temp1=2
	     				loop
	     			endif
********485接口 6针->25针
	     		CASE  asc(choice) = 50
				@ 0,1 say "---- 485通讯 ----"
					mdFLAG=2
					temp1=1
					INITSIO 4,"E",8			&&若=1:9600bps
	     			if temp1=2
	     				loop
	     			endif
********232接口
	     		CASE  asc(choice) = 33H
				@ 0,1 say "---- 232通讯 ----"
					mdFLAG=3
					temp1=1
					INITSIO 1,"E",8			&&=1:9600bps
	     			if temp1=2
	     				loop
	     			endif
******** 退出键 退出
				CASE  asc(choice) = 24
					clear
					temp1=2
				exit	   	
	   	ENDCASE
	enddo

    DO WHILE .t.
********设置字符显示模式
    	set mode to 1
********绘图用黑色
	set color to 1
********设置自动关机时间300秒
	set downtime to 300
	done=0
	I=1
********清Buffer,RecBuffer
	do while I<=64
		Buffer{I,1}=00H
		RecBuffer{I,1}=00H
		I=I+1
	enddo

	@ 1,1	say "1 初始设置"
	@ 2,1	say "2 信道检测"
	@ 3,1	say "3 信息读取"
***	@ 3,1	say "4         "
	wait  ""  to  choice
   	DO 	CASE
******** "1" 初始设置
     		CASE  asc(choice) = 31H
				do InitialDTU
******** "2" 信道检测
     		CASE  asc(choice) = 32H
				do ChannelCheck
******** "3" 信息读取
     		CASE  asc(choice) = 33H
	  			do ReadInfo
   		ENDCASE
    ENDDO
endstart

⌨️ 快捷键说明

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