
0下载测试软件
http://www.zhonghangled.com/cn/xzzx/gjxz/2017-12-06/428.html

1字符卡插入网线并且与电脑直插
2 设置显示屏参数(菜单栏-设置-屏参设置-密码 168)


设置下列参数
首先获取屏幕型号- 回读屏参

然会显示屏幕

设置显示字体的大小和格式
发送字库数据(菜单栏-编辑-字符字库-设置)



然后看到显示屏上字体大小改变了
创建字符分区并发送数据到字符卡设备上


然后发送数据让屏幕显示,这里有一个python测试例程,这里还有没设置屏幕IP,无法直接使用TCP连接。
指定屏幕局域网ip使用
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校验
每一条指令最后都需要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
浙公网安备 33010602011771号