LED屏总结

1.   个人感想

1.1    初印象

刚开始接触LED屏的时候,感觉很简单,不就是简单的显示么,而且看着学长的程序发现关于LED的部分也很少,只是简单的几句。所以想当然的轻视了这一部分的工作,然后就一直没怎么上心,总以为最后随便弄弄就没问题了。

但是,随着接触时间的增长,慢慢地发现原来一些看似简单的东西实际上并不简单。比如第一次调试线圈的时候需要在屏上显示一些内容,结果发现怎么也连不上显示屏,只能打电话问学长。

结果才发现原来是因为控制卡对应的串口号不对,所以无法连接,修改完配置文件之后才连上了。这一次我深刻的感觉到了原来这个东西并没有表面上看上去得那么简单,程序只是一部分,关键的还是在配置文件。

1.2    连接问题

我在连接LED的时候发现有一个屏连接成功以后再去连接的时候提示串口连接失败,然后就一步步找问题,学长也参与了进来,后来还跟厂家技术部的人联系了一下。最后基本锁定是电脑与LED之间的连接有问题,因为:

l  LED的控制卡没问题,

l  电源能够正常供电,

l  电脑上的串口也能够正常工作。

但是我却始终都未能找到原因,最后只得跟技术部的人约定了时间到那儿跑了一趟,结果发现还是一切正常,最终确定就是连接出现了问题。花了很长时间焊了一根串口线,用了发现还是串口连接失败,仍然存在问题,初步怀疑不是串口线的问题,百思不得其解。

这个时候我同学拆开原来的串口线发现有一根已经断了,才发现确实是串口线的问题,焊过以后试了一下以后没问题,证实了一开始的猜想,的确是连接的串口线有问题。之所以我自己焊制线测试的时候没有成功,是因为焊接线的方法不太对,只是用了一根线,而且焊接的顺序也不对。由此可以看出,有些时候我们要对自己有绝对的信心,既然已经确定了问题就应该沿着这条线继续走下去,而不应该有所迟疑。

然后就是证实一台电脑能否使用多个串口线同时连接多个LED屏,结果就在这一步我错误的使用了厂家提供的硬件参数设置软件,在加载硬件参数的时候,忘记更改控制卡地址了,结果所有屏的控制卡地址都设为了1。这告诉我们有些时候,没有真正弄懂一些东西就不要轻易的更改,因为很容易在某些细节上出现错误,由此也可以看出厂家提供的软件在流程上有多么的不规范。

1.3    多屏同控问题

鉴于上文中的遗留问题,当我再一次使用那个软件增加多个屏幕连接多个显示屏的时候,发现根本就不行,所有的屏幕只能通过一个控制卡地址连接。因此,我之前对于测试程序的整个构造根本就没有作用,因为多有的构造都是基于一个控制卡地址对应一个串口号(一个串口号连接一个LED屏)的原理设计的。

这种情况的出现让我煞是头疼,结果整体修改了程序的结构,适应于当前的情况,又重新设计了一个串口号与屏幕的映射关系,而连接的时候都是通过一个控制卡的地址连接,只不过在连接之前将串口号修改为LED平对应的串口号。

但是运行以后发现依然不行,修改以后需要关闭对话框程序才可以使修改生效。后来经过学长跟踪分析发现有可能是因为动态库的加载方式问题,使用静态隐式加入的话虽然简单,但是只有在编译完以后才会发生变化,最后造成了需要重新启动程序才能使改动有效的假象。所以,我最终使用了动态加载的方式加载了动态链接库,发现原来还真是这个问题,最终使用一个控制卡地址就完成了所有LED屏的控制。

同时,之前负责这一块的学长也过来整了一会,发现了所有LED屏只能使用一个控制卡地址进行通讯的问题,就是上文提到的把所有LED屏的硬件参数之中的控制卡地址都设置为了1,所以所有的LED屏只能使用用一个控制卡地址进行通信。结果在改来改去的过程之中,发现了两种控制的方法,基本上就是通过不同的串口号控制不同的LED屏。这告诉我们一定要对所有的改动尽可能的掌握,还要对一些东西活学活用。

2.   关于硬件

2.1    关于硬件参数的加载

对于LED屏硬件参数的设置,厂家提供了一个软件,叫做EQ一卡通,我们使用的是2013版的,所以要找到EQ2013的安装文件直接装到某台电脑上,然后使用串口线连接LED屏,之后就可以进入软件进行各种操作与参数的设置了。

关于操作厂家已给出了较为详细的说明,在此就不再相加赘述了,只提供一些硬件参数的设置方法:

1.      打开软件,我们首先可以看到如下界面:


2. 点击设置下的设置参数,输入密码888即可进入:


其中: 1)屏幕设置用于设置对应屏幕的相关硬件参数,包括:

       串口号,波特率,横向与纵向点数,颜色类型等等(串行通信)

2)可以点击增加屏幕控制更多的LED屏,设置好对应串口号就可以加载对应LED屏的硬件参数了(比如说设置控制卡地址)

3)网络地址设置暂时不用,硬件设置用于加载硬件参数,可以在此更改屏幕对应控制卡的地址,我也就是在这一步加载的时候都设置为了1,结果发现所有LED屏只能通过控制卡地址1来进行通信。

4)参数回读用于在串口号设置好以后读取从串口号读取的LED屏的相关硬件配置信息

2.2    关于LED屏安装与连接的相关说明

1. LED屏编号的对应顺序为北边为1(东)和2(西),南边为3(东)和4(西),串口号线上已经标好了1,2,3,4。

2. LED屏与电脑之间连接时使用的串口线一定要使用直连的方式,交叉连的话就会出现我在连接屏幕时出现的那种串口连接失败的情况。

3.   关于软件

3.1    关于类的设计

1.  类CConfSet主要用于设置LED屏的硬件参数,通过修改” EQ2008_Dll_Set.ini”下的相关配置项来实现,主要使用windows封装的 ::GetPrivateProfileString函数来实现读取相关配置项,使用::WritePrivateProfileString函数来实现写入相关配置项。

为了方便记忆,我为每一项定义了一个枚举变量与配置项名进行映射,通过传入配置项对应的枚举变量值即可读取与更改内容,具体映射关系如下所示:

表1  枚举变量与配置项名的对应关系

序号

枚举值

字符数组内容

含义

1

CARDNO

CardAddress

控制卡的地址

2

HEIGHT

ScreemHeight

屏幕的高度

3

WIDTH

ScreemWidth

屏幕的宽度

4

PORT

SerialNum

串口号

5

IP1

IpAddress0

 

IP地址的四位

(点分十进制表示法)

6

IP2

IpAddress1

7

IP3

IpAddress2

8

IP4

IpAddress3

9

NETPORT

NetPort

端口号

 

在上文提到的遇到的只能通过一个控制卡地址进行通信的背景之下,我又在此类之中建立了一种逻辑映射关系,设置每个LED屏对应的串口号。当用户选择不同的LED屏的时候只需要通过切换同一控制卡配置之中的串口号就可以实现控制不同的LED屏。为了使修改永久有效,我将映射关系写入了文件”Port.txt”,然后在连接不同串口线的时候只需要修改Port中的逻辑映射就可以了,在函数中也提供了一函数用于修改映射关系。


 

2.  类CLEDParaSet主要用于对显示内容的相关参数的配置,不同的是提供了一些列的函数用于修改相应的参数配置,具体映射关系如下:

表2  对应成员函数及其作用

序号

函数名

作用

1

setScale

设置显示内容的宽度与高度(包含点数)

2

setPos

设置显示内容的位置XY(二维坐标)

3

setMoveStyle

设置显示内容的移动方式

4

setClearStyle

设置显示内容的清除方式

5

setSpeed

设置显示内容的移动速度

6

setHoldTime

设置显示内容的停留时间

7

setFrameTime

设置每帧内容的时间

8

setContentType

设置显示内容的类型(现在只有单行文本与多行文本两种)

 

然后,基于此种情况我还想在增加一各类专门控制显示的内容,但是当我在将CString类型转化为char* 字符串以后赋值给单行文本对应的数据结构以后整体传给一个函数以后(即进行赋值),发现字符串内容很奇怪的出现了乱码。改变了其他的好几种方法以后依然发现了乱码的存在,或者是会出现字符的截断。最终没办法,只能将内容的控制同样也放在了类CLEDParaSet中,主要是根据传入的控制卡号向相应屏幕发送字符串,由于我把所有屏幕对应控制卡的地址都写为了1,所以直接给写死了。

在这个函数里面由于要调用动态库,所以需要加载进来,有两种方式:

Ø  隐式加载:使用#pragmacomment(lib,"EQ2008_Dll.lib")命令并同时包含头文件“EQ2008_Dll.h”,然后可以直接调用相关函数

Ø  显示加载:这个比较复杂,不需要引入头文件,但效率较高,灵活性较强,具体加载过程如下:

  使用LoadLibrary 把动态库与某一句柄绑定起来,如下所示:

HINSTANCE hdll;

hdll=LoadLibrary(_T("EQ2008_Dll.dll"));

  定义要加载的函数类型,即函数指针类型,如下所示:

typedef BOOL(__stdcall  *pConnect)(int CardNum);

 

此处一定要注意动态库函数的调用约定预定义的函数类型的调用约定保持一致

  调用GetProcAddress通过句柄实例化函数类型为某一函数名:

pConnectUser_RealtimeConnect2 = (pConnect)GetProcAddress(hdll,"User_RealtimeConnect");

  然后传入参数调用该函数即可。

经过亲身试用发现,隐式加载虽然很快,但是在更改完配置文件后需要关闭程序才能使改动生效,就是上文提到的那种假象。所以尽管麻烦,但是如果要求经常改动相关配置且需要即时生效的话就需要动态显示加载,否则隐式加载适合。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值