0下载测试软件html
http://www.zhonghangled.com/cn/xzzx/gjxz/2017-12-06/428.htmlpython
1字符卡插入网线而且与电脑直插数据库
2 设置显示屏参数(菜单栏-设置-屏参设置-密码 168)数组
设置下列参数网络
首先获取屏幕型号- 回读屏参并发
然会显示屏幕socket
发送字库数据(菜单栏-编辑-字符字库-设置)tcp
而后看到显示屏上字体大小改变了函数
建立字符分区并发送数据到字符卡设备上测试
而后发送数据让屏幕显示,这里有一个python测试例程,这里还有没设置屏幕IP,没法直接使用TCP链接。
1字符卡插入网线而且与电脑直插
2 设置显示屏参数(菜单栏è设置è屏参设置è密码 168)
168密码
设置字符卡设备 IP 参数(菜单栏è设置è屏参设置è
选择指定 IPè控制卡网络参数配置è密码 888)
将控制卡插入路由器下,而且将电脑链接同个路由器,并配置电脑 IP 参数
修改电脑局域网有线IP
建立字符分区并发送数据到字符卡设备上
这里咱们将ID修改为1,后面程序生成的指令也是调用1
另外一种测试,建立字幕发送到设备上,不须要任何程序
打开tcp调试助手
输入屏幕的IP,确保电脑的局域网IP在同一个网段。
选择客户端模式,链接广告屏幕
发送测试命令
开机
FF FF FF FF FF FF 00 00 00 00 78 34 01 00 21 00 00 00 00 00 00 00 00 00 00 A0 D4 A5
关机
FF FF FF FF FF FF 00 00 00 00 78 34 01 00 22 00 00 00 00 00 00 00 00 00 00 AF 90 A5
每一条指令最后都须要crc校验码,这里一个在线生成的校验码网站。
https://www.23bei.com/tool-59.html
注意:
字符串内的数据,每一个汉字或者英文(ASCII)都占据两个字节空间,英文的高位填 0。
例如:”0123”的 ASCII 值 = “0x00, 0x30,0x00, 0x31,0x00, 0x32,0x00, 0x33,0x00, 0x30”;
例如:”我很好”的 GB2312 值 = “0xCE,0xD2,0xBA,0xDC, 0xBA,0xC3”;
下面控制命令都默认控制了ID为1的字符码
我12345 ASCLL gb2312 编码
FF FF FF FF FF FF 00 00 00 00 78 34 01 00 29 BC FD 00 00 00 00 00 00 14 00 01 00 01 02 01 01 0C 00 CE D2 00 31 00 32 00 33 00 34 00 35 0E 6E A5
数据解析
网络帧头 FF FF FF FF FF FF 00 00 00 00
数据帧头 78 34 01 00
控制命令 29 修改字符串内容模式
数据帧头 BC FD 00 00 00 00 00 00
数据长度 14 00 (数据格式+数据长度+数据内容)
数据格式 01 00 01 02 01 01
01 00 字符分区ID -1
01 gb2312编码
02 当即显示模式
01 索引 显示模式下无用
01 红色
数据长度 0C 00
数据内容 CE D2 00 31 00 32 00 33 00 34 00 35 表明我12345
crc检验码 0E 6E
参与计算的有:从数据帧头78开始,一直到数据内容 00 35 (78 34 01 00 29 BC FD 00 00 00 00 00 00 14 00 01 00 01 02 01 01 0C 00 CE D2 00 31 00 32 00 33 00 34 00 35)
A5 帧尾
上面使用网络调试助手完成了模拟命令调试,下面实用程序来完成。
1修改广告屏幕IP和端口
2修改要发送显示的内容
# -*- coding: utf-8 -*- #activate py37_tfgpu1131_keras215_opencv341 #gb2312 编码 from binascii import * #安装pip3 install --no-cache-dir -U crcmod import crcmod import binascii import socket import time #生成CRC16-MODBUS校验码 #crc16Add("78 34 01 00 29 BC FD 00 00 00 00 00 00 14 00 01 00 01 02 01 01 0C 00 00 30 00 31 00 32 00 33 00 34 00 35") #78 34 01 00 29 BC FD 00 00 00 00 00 00 14 00 01 00 01 02 01 01 0C 00 00 30 00 31 00 32 00 33 00 34 00 35 B8 83 #crc16Add("78 34 01 00 29 BC FD 00 00 00 00 00 00 14 00 01 00 01 02 06 01 0C 00 CE D2 B0 AE D6 D0 BA BD C8 ED BC FE") #78 34 01 00 29 BC FD 00 00 00 00 00 00 14 00 01 00 01 02 06 01 0C 00 CE D2 B0 AE D6 D0 BA BD C8 ED BC FE 45 8C def Crc16Add(read): crc16 = crcmod.mkCrcFun(0x18005, rev=True, initCrc=0xFFFF, xorOut=0x0000) data = read.replace(" ", "") #消除空格 data = data.replace("0X", "") #消除0X readcrcout = hex(crc16(unhexlify(data))).upper() str_list = list(readcrcout) # print(str_list) if len(str_list) == 5: str_list.insert(2, '0') # 位数不足补0,由于通常最少是5个 crc_data = "".join(str_list) #用""把数组的每一位结合起来 组成新的字符串 # print(crc_data) #read = read.strip() + ' ' + crc_data[4:] + ' ' + crc_data[2:4] #把源代码和crc校验码链接起来 read = crc_data[4:] + ' ' + crc_data[2:4] # print('CRC16校验:', crc_data[4:] + ' ' + crc_data[2:4]) #print(read) return read #汉字转化gbk 16进制 def Ascll2gbk(s1): #print("转换字符:",s1) #s1="你好12" s2=s1.encode('GBK').hex() # c4e3bac3 #print("中間過程",s2) s3="" for i in range(len(s2)): if i+1<len(s2) and i%2==0: #print("0X"+(s2[i]+s2[i+1]).upper(),end=",") # 0XC4,0XE3,0XBA,0XC3, 将字符串中的小写字母转为大写字母 s3=s3+"0X"+(s2[i]+s2[i+1]).upper()+" " return s3 def Ascll2gbk_num(s1): #print("转换字符:",s1) #s1="你好12" s2=s1.encode('GBK').hex() # c4e3bac3 #print("中間過程",s2) s3="" for i in range(len(s2)): if i+1<len(s2) and i%2==0: #print("0X"+(s2[i]+s2[i+1]).upper(),end=",") # 0XC4,0XE3,0XBA,0XC3, 将字符串中的小写字母转为大写字母 s3=s3+"0X00 0X"+(s2[i]+s2[i+1]).upper()+" " return s3 ''' show_msg="我" #地址 中文 中文符号 show_msg_num="12345" # 数字 英文 英文符号 ascll2tcp16msg(show_msg,show_msg_num) ''' #FF FF FF FF FF FF 00 00 00 00 78 34 01 00 29 BC FD 00 00 00 00 00 00 14 00 01 00 01 02 01 01 0C 00 CE D2 00 31 00 32 00 33 00 34 00 35 0E 6E A5 # def ascll2tcp16msg(show_msg,show_msg_num): msg_gbk=Ascll2gbk(show_msg)#转化中文 占用2个字节 msg_gbk_num=Ascll2gbk_num(show_msg_num) #转化数字 占用一个字节 补齐 00 #print(msg_gbk) tcpsend=msg_gbk+msg_gbk_num tcpsend = tcpsend.replace("0X", "") #消除0X print("转换msg:",tcpsend) #crcresult=Crc16Add(msg_gbk) #print(crcresult) #print(len(show_msg),len(show_msg_num)) msglen=(len(show_msg)+len(show_msg_num))*2 #计算数据长度 中文+英文 各自算一个 hexmsglen=hex(msglen)#转化16进制 print("10长度:",msglen,"16长度",hexmsglen) hexmsglen = hexmsglen.replace("0x", "") #消除0X if msglen<16: hexmsglen="0"+str(hexmsglen) strmsglen=str(hexmsglen.upper())+" 00 " #数据长度占用2个字节 补齐00 #print(strmsglen) cmd_head="FF FF FF FF FF FF 00 00 00 00 " #帧头 cmd_mode="78 34 01 00 29 BC FD 00 00 00 00 00 00 " #控制帧 29 修改字符区域 #cmd_cmdlen="14 00 "#整个数据长度 cmd_datalength="01 00 01 02 01 01 "+strmsglen #控制信息 strmsglenx显示数据长度 (注意区分整个数据长度) cmd_data=tcpsend#要显示的数据内容 cmd_cmd_=cmd_datalength+cmd_data#整个数据长度(注意区分显示数据长度) cmd_cmd = cmd_cmd_.replace(" ", "") #消除0X cmd_cmdlen10=int(len(cmd_cmd)/2) cmd_cmdlen16=hex(cmd_cmdlen10) cmd_cmdlen=cmd_cmdlen16.replace("0x", "") if cmd_cmdlen10<16: cmd_cmdlen="0"+str(cmd_cmdlen) cmd_cmdlen=str(cmd_cmdlen.upper())+" 00 " print("总体数据打包长度:",cmd_cmdlen,"内容:",cmd_cmd_) crc_msg=cmd_mode+cmd_cmdlen+cmd_datalength+cmd_data#参与crc校验的数据 #print(crc_msg) cmd_datacheck=Crc16Add(crc_msg) # 数据校验码生成 cmd_end=" A5" cmd=cmd_head+cmd_mode+cmd_cmdlen+cmd_datalength+cmd_data+cmd_datacheck+cmd_end #print(cmd) return str(cmd) #单纯验证某个字符占用几位,从而调用哪一个转化函数 #rec1=Ascll2gbk(":") #rec2=Ascll2gbk(":") #print("中文:",rec1," 英文:",rec2) #中文: 0XA3 0XBA 英文: 0X3A #show_msg="我" # 中文 中文符号 尤为是:注意区分中英文 #show_msg_num="12345" # 数字 英文 英文符号 尤为是:注意区分中英文 #msg=ascll2tcp16msg(show_msg,show_msg_num) #print(msg) if __name__ == '__main__': try: #实例化客户端对象 tcp_clinet = socket.socket(socket.AF_INET,socket.SOCK_STREAM) #链接 #tcp_clinet.connect(("localhost",8000)) tcp_clinet.connect(("192.168.1.32",58258)) i=0 while True: #words =input("客户端说:").encode("utf-8") #访问数据库 i=i+1 if i==9: i=0 #数字据转化打包 show_msg="南商路空车位:" # 中文 中文符号 尤为是:注意区分中英文 show_msg_num="2131"+str(i) # 数字 英文 英文符号 尤为是:注意区分中英文 words_str=ascll2tcp16msg(show_msg,show_msg_num) print("转化前结果",words_str) #words=words.encode("utf-8") words_hex = bytes.fromhex(words_str) #words_hex = bytes(words_str, encoding = "utf8") #print(words_hex) #words=words_hex.encode("utf-8") print("前长度:",len(words_str),"后长度:",len(words_hex)) #print("转化后数据:",words_hex) time.sleep(5) #发送数据 #序列化 tcp_clinet.sendall(words_hex) #发送数据 except Exception as e: print(e) # #FF FF FF FF FF FF 00 00 00 00 78 34 01 00 29 BC FD 00 00 00 00 00 00 14 00 01 00 01 02 01 01 0C 00 CE D2 00 31 00 32 00 33 00 34 00 35 0E 6E A5