最近金日隧道广告系统的通信系统要升级,用Moxa的DA66x设备取代原先的Moxa5630通信模块,由于DA66x内嵌了WinCE5.0系统,系统的功能可以有很大的发挥余地。
DA66x这款产品功能很强,可以说WinCE5.0在工业通信领域被用到了极致(2个10/100M的Tcp/IP通信口,16+1个高波特率串口)我更为喜欢的是,它给PC机提供了多种渠道去控制该设备,内建了Web服务器,可以通过网页进行各种配置,开启了ftp服务,可以通过ftp上传下载文件,此外我更为喜欢的是提供了Pocket CMD 5.0(如下图),可以通过超级终端进行控制(和DOS界面没有什么区别,很早的时候,我开发AB PLC的一个接口板程序时,就是用到类似的东西)。
通过Moxa提供的SDK,我还是学了不少.net的技术,比如静态构造函数的使用,以前是不知道的,所以以后直接使用静态函数的时候,知道在哪里初始化变量了(题外话:在msdn查静态构造函数的时候,意外的发现在VS2005目录里有好东西,VS2005安装目录/VC#/Specifications/2052下面有两个中文版的C#规范的word文件,很是详细,值得一看)。此外还学到了向API函数传结构体的技术,如:
[StructLayout(LayoutKind.Sequential)] //该结构体变量内存连续存储
public struct LCM_POS
{
[MarshalAs(UnmanagedType.U1)] //无符号字节变量
public byte x;
[MarshalAs(UnmanagedType.U1)]
public byte y;
}
mxdevice.LCM_POS pos = new mxdevice.LCM_POS();
pos.x = x;
pos.y = y;
IntPtr lpPos = Marshal.AllocHGlobal(Marshal.SizeOf(pos)); //分配空间
Marshal.StructureToPtr(pos, lpPos, false); //获取结构体指针
mxdevice1.IoControl(mxdevice.IOCTL_LCM_GOTO_XY, lpPos);
有时间这方面的技术,我在专门论述。
由于DA66x没有提供触摸屏,只是提供了一个16*2的LED显示屏和4个按钮,所以功能控制比较麻烦,值得提出的时,moxa公司提供的SDK还是有bug的,比如下面的一个函数:
public bool IoControl(uint code, ref byte input, ref byte output)
{
int num1 = 0;
byte num2 = 0;
if (!DeviceIoControl(hLCMPort, IOCTL_KEYPAD_GET_DOWN_STATE, (void*)0, 0, pkey, sizeof(UCHAR), &dwBackSize, NULL))
}
上面的output参数竟然没用,幸好moxa的dll没有加密可以获得源码,否则我修改起来就麻烦了。
此外DA66x系列的设备和UC7400的设置共用一个.net开发包,并且DA66x没有LCD显示和按键的控制(该需求反馈到Moxa后,据说近期就要发布相关代码),还好,moxa发过来LCM(EVC程序)的源码,可以把相关的EVC代码转换为.net代码。
Moxa最大的设计败笔(个人认为)就是按钮和LCD的驱动设备为同一个“LCM1:”,按钮和LCD就不能独立设计,否则通过线程不断检查按钮状态时会和显示冲突。没有办法,只好设计在一起了,我自己开发一个DA66x的.net驱动,效果还不错(有时间在设计一个二级菜单和多页文本显示的功能)。此外我还是看看moxa提供的开发包是怎么设计的吧,说不定又学到不少东西。
下面是我自己开发的相关代码,有类似需求的朋友可以参考一下:
//LCD显示&按键控制
publicclassLCMKEY
{
privatemxdevicemxdevice1;
privateThreadtrdKeypadlisten;
privateboolbStop;
publicstaticintKey=0;//按键信息
publicLCMKEY()
{
}
publicvoidInit()
{
mxdevice1=newmxdevice("LCM1:");
mxdevice1.Open();
this.bStop=false;
this.trdKeypadlisten=newThread(newThreadStart(this.ThreadTask));
this.trdKeypadlisten.Priority=ThreadPriority.Normal;
this.trdKeypadlisten.Start();
}
publicvoidExit()
{
mxdevice1.Close();
try
{
if(!this.bStop)
{
this.bStop=true;
}
this.trdKeypadlisten=null;
}
catch
{
return;
}
}
~LCMKEY()
{
Exit();
}
//光标控制
publicvoidCursor(boolbFlag)
{
bytenum=0;
mxdevice1.IoControl(bFlag?mxdevice.IOCTL_LCM_CURSOR_ON:mxdevice.IOCTL_LCM_CURSOR_OFF,refnum);//mxdevice.IOCTL_LCM_BLINK_ON
}
//清屏
publicvoidClear()
{
bytenum=0;
mxdevice1.IoControl(mxdevice.IOCTL_LCM_CLEAR,refnum);
}
//光标定位
publicvoidGotoXY(bytex,bytey)
{
mxdevice.LCM_POSpos=newmxdevice.LCM_POS();
pos.x=x;
pos.y=y;
IntPtrlpPos=Marshal.AllocHGlobal(Marshal.SizeOf(pos));
Marshal.StructureToPtr(pos,lpPos,false);
mxdevice1.IoControl(mxdevice.IOCTL_LCM_GOTO_XY,lpPos);
}
//文本显示
publicvoidShow(stringtext,bytex,bytey)
{
intnum=0;
GotoXY(x,y);
mxdevice1.WriteDev(Encoding.Default.GetBytes(text),text.Length,outnum);
}
//文本显示
publicvoidShow(stringtext1,stringtext2)
{
//清屏
Clear();
//写第一行
Show(text1,0,0);
//写第二行
Show(text2,0,1);
}
//按钮控制
protectedvirtualvoidOnKeyClick(inte)
{
if(this.KeyClick!=null)
{
this.KeyClick(this,e);
Key=e;
}
}
//按钮监控
privatevoidThreadTask()
{
bytepTemp=0,pKey=0;
do
{
if(mxdevice1.IoControl(mxdevice.IOCTL_KEYPAD_GET_MENU_STATE,refpTemp,refpKey))
{
if(pKey==1)
{
OnKeyClick(1);
}
}
if(mxdevice1.IoControl(mxdevice.IOCTL_KEYPAD_GET_UP_STATE,refpTemp,refpKey))
{
if(pKey==1)
{
OnKeyClick(2);
}
}
if(mxdevice1.IoControl(mxdevice.IOCTL_KEYPAD_GET_DOWN_STATE,refpTemp,refpKey))
{
if(pKey==1)
{
OnKeyClick(3);
}
}
if(mxdevice1.IoControl(mxdevice.IOCTL_KEYPAD_GET_SELE_STATE,refpTemp,refpKey))
{
if(pKey==1)
{
OnKeyClick(4);
}
}
Thread.Sleep(100);
}
while(!this.bStop);
}
//Events
publiceventKeyClickEventHandlerKeyClick;
}
分享到:
相关推荐
这是moxa提供的C#语言的串口操作,值得参考
1、介绍MOXA公司的DA-682系列嵌入式Linux系统; 2、是学习Linux的好帮手;
MOXA工业级无线通信应用指南pdf,MOXA工业级无线通信应用指南:Moxa为全球工业领域提供了一系列工业级无线通信解决方案,如WLAN(IEEE 802.11)和GSM/GPRS/WCDMA等。无线网络传输需要考虑网络安全问题,尤其是在苛刻...
远程控制MOXA模块,通过此软件可以调试上位机和MOXA模块的控制功能
MXview提供整合式的管理平台,能够自动侦测安装于网络的Moxa网络设备和SNMP/IP设备,可随时随地、可视化地管理所有被选中的网络组件。 特点 支持历史网络事件回放功能 自动发现设备并可视化网络中设备的物理连接 ...
moxaDA-661/662/663-LX用户手册doc,moxaDA-661/662/663-LX用户手册:DA-661/662/663系列是基于RISC架构的即开即用型嵌入式计算机平台,面向工业数据采集应用。该系列的上述3个型号都具有16个RS-232/422/485串行通讯...
xp下 moxa uport 1150 驱动程序
MOXA RS485转TCP安装软件,串口服务器Nport5410,Moxa 串口服务器,首先映射端口,F屏情报板,龙门架必备调试软件
MOXA交换型串口设备联网服务器NPortS8458.pdf
MOXA Nport5610在电力监控系统的应用doc,MOXA Nport5610在电力监控系统的应用
操作完全傻瓜化 完全可以实现工业应用 可以把一台安装有多串口卡的PC 变成一台 多串口服务器 再配合一些n2n 技术 完全可以实现很多 普通硬件串口服务器不能实现的功能 我们的网站 www.ipcsol.org
MOXA 针口定义
摩萨MOXA交换机moxa-eds-208系列技术手册
该软件是应用Moxa公司的动态库接口而设计完成的串行口仿真调试器,它不仅适用于Moxa公司的所有通讯卡,而且适用于所有其他公司的串行通讯卡。 该软件基于如下思路而设计:任一串行口通讯设备与计算机之间的通讯都...
本PPT主要讲解MOXA串口卡设置使用说明,不清楚的朋友可以下下来了解了解。
详细介绍了MOXA的有关配置:VLAN是指在不改变物理连接的条件下,对网络做逻辑分组
moxa UC-7101/7110/7112用户手册doc,moxa UC-7101/7110/7112用户手册:基于RISC的Moxa迷你型UC-7101/7110/7112系列通信平台是嵌入式应用的理想选择,UC-7110和UC-7112采用ARM9 box内核,内置μClinux操作系统,并带...
MOXA 交换机
支持多种类型的串口卡,能轻松连接多种串口设备,传输速率高,兼容性强,如果你的串口卡无法正常连接,可以在下载这款驱动试一试,moxa多串口卡介绍MOX多串口卡在Windows2K/XP/2003系统下的驱动,欢迎下载体验
Moxa冗余组网配置1、单独设置各个交换机 分别用网线连接Moxa各个交换机,在浏览器端输入其IP,默认为(192.168.127.253),若曾修改过设备IP