廣告屏幕

 

 

 

 

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

  





    
相關文章
相關標籤/搜索