主题研究 | 基于Python开发的小工具 - ASCii自动转换

发布时间:2019-01-27 08:13            

01

名词释义

1

ASCii

ASCII(发音: /ˈæski/ ass-kee[1],American Standard Code for Information Interchange,美国信息交换标准代码)是基于拉丁字母的一套计算机编码系统。它主要用于显示现代英语,而其扩展版本EASCII则可以部分支持其他西欧语言,并等同于国际标准ISO/IEC 646。 

2

Python

Python(英国发音:/ˈpaɪθən/ 美国发音:/ˈpaɪθɑːn/),是一种广泛使用的高级编程语言,属于通用型编程语言,由吉多·范罗苏姆创造,第一版发布于1991年。可以视之为一种改良(加入一些其他编程语言的优点,如面向对象)的LISP。作为一种解释型语言,Python的设计哲学强调代码的可读性和简洁的语法(尤其是使用空格缩进划分代码块,而非使用大括号或者关键词)。相比于C++或Java,Python让开发者能够用更少的代码表达想法。不管是小型还是大型程序,该语言都试图让程序的结构清晰明了。 

3

GitHub

GitHub是通过Git进行版本控制的软件源代码托管服务,由GitHub公司(曾称Logical Awesome)的开发者Chris Wanstrath、PJ Hyett和Tom Preston-Werner使用Ruby on Rails编写而成。

GitHub同时提供付费账户和免费账户。这两种账户都可以创建公开或私有的代码仓库,但付费用户支持更多功能。根据在2009年的Git用户调查,GitHub是最流行的Git访问站点。[3]除了允许个人和组织创建和访问保管中的代码以外,它也提供了一些方便社会化共同软件开发的功能,即一般人口中的社群功能,包括允许用户追踪其他用户、组织、软件库的动态,对软件代码的改动和bug提出评论等。GitHub也提供了图表功能,用于概观显示开发者们怎样在代码库上工作以及软件的开发活跃程度。

02

背景

1

日常应用

几乎所有的非总线PLC通讯,在PLC程序中都是需要用16进制数表示。如RS232,RS485/422,Modbus等

如下一个打标机调用程序指令: 

2

Mitsubishi 

在三菱PLC的通讯中,需要高低字节对调。这对查询ASCii码表格,以及写程序造成了很大的困扰。且非常容易出错。如下所示,同样的字符串程序需要的变量格式截然不同。且通讯格式长度位置也是不一致的。

此小工具已经针对PLC应用做了优化,可以直接复制进PLC通讯变量中即可,非常方便,不易出错!乃神器也。

03

源码分享

下面是两个小工具的源码分享,请大神指点,迭代!

1

Siemens源码

#-*coding:utf-8-*-

from tkinter import *

app = Tk()

app.title ('西门子通讯助手')

app.geometry ('290x550')

app.resizable (width = False , height = False)

def Transform(self):

    t.delete(0.0 , END)

    strlist = list(input.get())

    strlen = len(strlist)

    a = 0

    while a < strlen:

        strlist[a] = hex(ord(strlist[a]))

        a += 1

    b = 0

    while b < strlen:

        strlist[b] = strlist[b][2:].upper()

        b += 1

    t.insert(END , '长度:')

    t.insert(END , str(strlen))

    t.insert(END , "\n")

    e = 0

    while e < strlen:

        t.insert(END , '16#')

        t.insert(END , strlist[e])

        t.insert(END , "\n")

        e += 1

Label(app , text = '字符串输入' , font = ('Consolas')).pack()

input = StringVar()

Entry(app , textvariable = input , width = 30 , font = ('Consolas')).pack()

Label(app , text = '转换结果' , font = ('Consolas')).pack()

t = Text(app , width = 15, font = ('Consolas')) 

t.pack()

app.bind('', Transform)

app.mainloop()

1

Mitsubishi源码

#-*coding:utf-8-*-

from tkinter import *

app = Tk()

app.title ('三菱通讯助手')

app.geometry ('290x550')

app.resizable (width = False , height = False)

def Transform(self):

    t.delete(0.0 , END)

    strlist = list(input.get())

    strlen = len(strlist)

    a = 0

    while a < strlen:

        strlist[a] = hex(ord(strlist[a]))

        a += 1

    b = 0

    while b < strlen:

        strlist[b] = strlist[b][2:].upper()

        b += 1

    strlist1 = strlist[:]

    if strlen%2 == 0:

        pass

    else:

        strlist1.append('16#')

    strlen1 = len(strlist1)

    c = 0

    while c < strlen1:

        strlist1[c+1] += strlist1[c]

        strlist1[c] = '16#'

        strlist1[c] += strlist1[c+1]

        c += 2

    strlen2 = strlen1/2

    d = 1

    while d <= strlen2:

        del strlist1[d]

        d += 1

    if strlen%2 == 0:

        pass

    else:

        strlist1[-1] = strlist1[-1][3:]

    strlist1.append('长度:')

    strlist1.append(str(strlen))

    strlist1[-2] += strlist1[-1]

    del strlist1[-1]

    strlen3 = len(strlist1)

    e = 0

    while e < strlen3:

        t.insert(END , strlist1[e])

        t.insert(END , "\n")

        e += 1

Label(app , text = '字符串输入' , font = ('Consolas')).pack()

input = StringVar()

Entry(app , textvariable = input , width = 30 , font = ('Consolas')).pack()

Label(app , text = '转换结果' , font = ('Consolas')).pack()

t = Text(app , width = 15, font = ('Consolas')) 

t.pack()

app.bind('', Transform)

app.mainloop()

04

链接分享

软件下载链接,复制使用浏览器打开:

打开如下图所示:

感谢大家的时间。请在留言区说出你的想法和建议,我们在留言区继续交流。

Copyright © 2018 沈阳前驱登设备有限公司 辽ICP备18005423号