广告屏幕

 

 

 

 

0下载测试软件html

http://www.zhonghangled.com/cn/xzzx/gjxz/2017-12-06/428.htmlpython

 

 

1字符卡插入网线而且与电脑直插数据库

2 设置显示屏参数(菜单栏-设置-屏参设置-密码 168数组

 

 

 

 

 

设置下列参数网络

 首先获取屏幕型号- 回读屏参并发

 

 

 

 然会显示屏幕socket

 

 

 

 

 设置显示字体的大小和格式

发送字库数据(菜单栏-编辑-字符字库-设置)tcp

 

 

 

 

 

 

 

 

 

 

而后看到显示屏上字体大小改变了函数

 

建立字符分区并发送数据到字符卡设备上测试

 

 

 

 

 

 

 

 

 

 

 

 

而后发送数据让屏幕显示,这里有一个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

  





    
相关文章
相关标签/搜索