求助帖:WINCE设备如何更改上位机数据库

有个小项目,要实现本地电脑和一台WINCE设备的通信:

1.WINCE设备输入几条信息,上传到电脑,更新本地数据库;
2.数据库更新后,电脑将该条记录的编号发给WINCE设备

现在只知道如何用socket实现上下通信,涉及到数据库就完全无头绪了。

请大侠们指点迷津~~~

回答: 求助帖:WINCE设备如何更改上位机数据库


  1. 类似服务器和中间件 

    有中间件源码么,大侠
    我的中间件是linux的 不一样 

    程序可参考这种架构模式 程序需要自己写 基本上属于协议解析和数据库操作

求助帖,关于SQLite的应用 VS08,WINCE

  1. Q
    搜了一天了,关于SQLITE用在wince环境下,C#编程的步骤。。
    感觉有点凌乱,有的大侠说不用安装,只需要引用:引用还分两种,一种是window下的dll,一种是wince下的dll。有的说要安装,然后在VS服务器资源管理器中添加数据源。而且SQLite安装又是dos环境又是要更改环境变量的,感觉超级乱。所以里面有些问题还没弄清楚

    在这里有几个问题求教啦:
    1.我要开发的是WINCE项目,SQLite需要安装在WINCE设备上么,如果不需要想请问SQLite数据库如何移植到wince设备上;
    2.开发WINCE项目是仅需要引用System.Data.SQLite.dll和SQLite.Interop.DLL两个么;
    3.如果SQLite需要安装,大侠有木有指点菜鸟的那种一步步的安装步骤贴呢。

    拜谢!
  2. A
    SQLite 最新有一个针对Windows Embedded Compact 2013的版本。不过这个在wince6.0上我怀疑用不了。.Net的版本问题。

    网上提供下载的没有wince版本,就算C++版本好像也没有(我说的是官方),需要自己移植。

    几年前我想在C#中用sqlite时在网上找到一个C#写的sqlite,作者差不多将C代码翻译封装成C#。速度慢了一些。

    后来是直接用C#映射sqlite3.dll的接口函数,然后再封装自己的SqliteDBHelper。
    当然在wince上用你必须先讲代码移植到你对应的平台编译出dll。

    我走的路可能弯了点。不过不清楚其他人怎么用C#调用的。我自己C#很水的。求助帖,关于SQLite的应用   VS08,WINCE

求助:上位机软件开发,通信协议构架

  1. Q
    小弟最近手上有一个上位机软件开发的项目,是用RS-232 接口实现 PC 与板卡的连接,透过板卡实现数据的采集与处理,开发语言是VB。

    目前小弟感觉最棘手的就是:不知道通信协议怎么构架!

    小弟以前是做工业检测的,而且是偏向上层的开发(开发模式是 3 + 1 的四人团队模式,底层有专人开发),所以对这一块比较陌生……

    现跪求高人指点,如果有源码可发送至邮箱:[email protected], 不胜感激了先!!!
  2. A
    我想问的问题是这样的:
     
      既然是用串口(也就是 9 针的RS-232 )实现PC 与 外设的链接,外设肯定有自己的通信规则(也就是数据处理规则),那么数据的流动方向是:现由PC发出,经由 RS-232 到达外设,在外设处理之后再回传数据给PC,PC分析回传的数据并给出结论。

      问题就出在:我该发送什么样的数据出去,外设回传的数据我该怎样处理?

      求高人给一些建议和思路,如……


    获取外设自己的通信协议后,才能构建你上位机软件.

WinCE 设备如何通过 USB 与 Android 手机互联?

  1. Q
    最近在研究 WinCE 设备与 Android 手机之间的连接问题,通过 WIFI 等无线/有线网络,是比较简单的方法。但需要车机支持 WIFI、且有 WIFI 热点才行!
    通过 USB 是现在比较常用的,例如多屏互动等现有功能,都是通过 USB 连接的。
    但这种连接方法,在物理介质 USB 的基础上,是通过什么具体的协议(如:Socket)来实现的?Android 手机相对来说是标准的东东,但对于 WinCE 这个可定制的系统,需要哪些驱动/组件才能支持这样的功能呢?
    手机是做 Host,还是 Device 呢?
    RNDIS 是个人认为比较可行的方案,但具体如何实现还不清楚。

    有没有哪位做过类似的东东,给点建议或意见吧。先行谢过!

    ____________________________________________________________________________________________

    以下是一些 USB 连接的基本知识:
    Android 设备在 USB device mode 时,可以有 MSC,ADB,RNDIS Ehternet,Mtp/Ptp,Accessory 和 Audio Source 等功能。
    什么是 RNDIS 呢?
    RNDIS 是指 Remote NDIS,基于 USB 实现 RNDIS 实际上就是 TCP/IP over USB,就是在 USB 设备上跑 TCP/IP,让 USB 设备看上去像一块网卡。
    使用 RNDIS 协议通过 USB 共享网络。
    NDIS 是 Network Driver Interface Specification,即网络驱动接口规范。NDIS 的主要目的就是为 NIC(网络接口卡,Network Interface Cards)制定出标准的 API 接口。

    在 WinCE 中,根据需要来选择所需的 USB 功能,创建 WinCE 工程,然后在 Catalog Items View 中选择 ”Core OS”->”CEBASE”->”Core OS Services”->”:
    1 USB Function Driver:用于支持 USB Device 驱动。
    2 USB Host Support:用于支持 USB Host 控制器驱动。
    3 USB Human Input Device (HID) Class Driver:用于支持 USB Host 外接 HID 设备,可选择同时支持 USB 鼠标键盘,也可以分开选择。
    4 USB Printer Class Driver:用于支持 USB Host 打印功能。
    5 USB Remote NDIS Class Driver:用于支持 USB Host 连接 RNDIS 设备。
    6 USB Storage Class Driver:用于支持 USB Host 外接 U 盘的功能。

    如果是 USB Device 设备,那么首先要选择上面提到的 USB Function Driver,然后在 Catalog Items View 中选择 ”Device Drivers”->”USB Function”->” :
    1 Mass Storage:用于支持 USB Device 作为U盘功能。
    2 RNDIS Client:用于支持 USB Device 作为 RNDIS 设备。
    3 Serial:用于支持 USB Device 作为串口设备。
    对于 USB Device 设备,可以支持 Mass Storage,RNDIS 和 Serial 功能,不过同一个 USB Device 在系统启动以后只能支持某一个功能。
  2. A
    有很多种连接方案,我们给我们的客户做了一些这样的界面,有C-Link,Mill-Link,如果连IPOD什么的,现在有通过串口和USB控制的两种,具体怎么做就不晓得了.

Qt上位机和ARM板UDP通信的问题。谢谢。

  1. Q
        
    要实现上位机和arm板的udp通信, 现在arm板能正常收到 Qt上位机的数据,但是上位机就收不到arm板发过来的数据。如果在

    arm板中指定上位机的IP地址,则Qt上位机能收到数据, 而在不指定上位机IP地址的情况下使用 网络调试助手却又能收发双

    方的数据,这说明arm板端的程序应该是没有问题的,Qt程序如下,,请教,谢谢。

    m_udpSocket = new QUdpSocket(this);
        net_host = host;
        net_port = port;
        m_udpSocket->bind(port, QUdpSocket::ShareAddress| QUdpSocket::ReuseAddressHint);
        //m_udpSocket->bind(host,port,QUdpSocket::ShareAddress);        //这个还不能接收
        connect(m_udpSocket,SIGNAL(readyRead()),this,SLOT(processPendingDataagrams()));


    //sendto函数
          
            m_udpSocket->writeDatagram(bytes.data(), bytes.size(),net_host, net_port);
        }

    //slot
        while(m_udpSocket->hasPendingDatagrams())
        {
            QByteArray buf;
            buf.resize(m_udpSocket->pendingDatagramSize());
            m_udpSocket->readDatagram(buf.data(), buf.size());
            emit m_BinaryParser.onReceivedData(buf);
        }
  2. A
    本帖最后由 foruok 于 2014-08-15 08:27:45 编辑 你已经有答案了。
    要想上位机能接收到ARM板的UDP数据,上位机需要bind到一个端口上,而ARM板要指定IP和端口发送数据。

    网络调试助手,有可能使用混杂模式或raw socket模式,监听网卡所连接局域网的所有报文。

小弟刚接触USB,求一份USB 上位机开发源码!

  1. Q
    最近公司要求把刚做好的通过串口升级FPGA的程序改用USB升级,同事的下位机历经2星期才做好,到我这的时候已经时间不多了。最近研究了3天百合工作室的上位机源码,移植过来后发现WriteFile成功,但ReadFile一直失败,调试了 一天也没出结果,所以在此求助各位大神,帮小弟忙,给份上位机源码或者谁移植过百合工作室的上位机源码,给我解释下也行,在此谢谢各位了
  2. A
    小弟刚接触USB,求一份USB 上位机开发源码!

WINCE设备的文件写入问题

  1. Q
    电脑为WIN7系统,使用mobile设备中心同步,下位机是WINCE6.0

    连接设备后,通过“我的电脑”打开“WINCE设备”,可以对设备文件进行直接复制、粘贴,没有问题!

    然而,我写了文件复制粘贴的程序,下面的代码就是按钮事件处理,功能是将剪切板第一个文件粘贴到某个位置。


                SaveFileDialog dialogSave = new SaveFileDialog();
                if (dialogSave.ShowDialog(this) == DialogResult.OK)
                {
                    file3 = dialogSave.FileName;
                    file2 = Clipboard.GetFileDropList()[0];
                    File.Copy(file2, file3);
                }

    程序运行在win7上,如果对系统硬盘或者U盘进行操作,代码执行没有问题;
    如果是将WINCE设备中的文件进行复制,然后粘贴到系统硬盘中,也没有问题;
    但是,如果想要将剪切板的文件粘贴到WINCE设备中,就会弹出WINCE设备的文件写入问题


    求解决方案~
  2. A
    用RAPI函数吧
    普通函数是不行的。你自己手动复制文件到wince,可以看到一个对话框,跟在windows上是不一样的,其实是同步软件帮你实现了复制。
    copyfile,SHFileOperation之类的函数应该都有路径的问题吧。

关于上位机通过USB与DSP通信的问题

  1. Q
    最近在做相关的项目,了解到USB通信的基本过程是先通过枚举找到所需的设备,然后打开设备,进行通信。做到现在遇到一些问题,有点疑惑,请大神指导!
    1、关于如何通信
            一、查了一些资料,无非都是通过SetupDiGetClassDevs,SetupDiEnumDeviceInterfaces,SetupDiGetDeviceInterfaceDetail等方式枚举设备,找到自己的设备,然后通过CreateFile打开,用WriteFile和ReadFile或者DeviceIoControl来读写。
            二、还有一种枚举方式如下:
    连接了设备的 HUB 在 HOST 查询其状态改变端点 时返回对应的 bitmap,告知HOST 某个PORT状态发生了改变。
       • 主机向 HUB 查询该PORT的状态,得知有设备连接,并知道了该设备的基本特性。  
       • 主机等待(至少 100mS)设备上电稳定,然后向 HUB 发送请求,复位并使能该PORT。 
       • HUB执行PORT复位操作,复位完成后该PORT就使能了。现在设备进入到defalut状态,可以从Vbus获取不超过 100mA 的电流。主机可以通过 0地址与其通讯。
       • 主机通过0地址向该设备发送get_device_descriptor标准请求,获取设备的描述符。
       • 主机再次向 HUB 发送请求,复位该PORT。 
       • 主机通过标准请求 set_address给设备分配地址。 
       • 主机通过新地址向设备发送 get_device_descriptor标准请求,获取设备的描述符。 
       • 主机通过新地址向设备发送其他 get_configuration请求,获取设备的配置描述符。
       • 根据配置信息,主机选择合适配置,通过 set_configuration请求对设备而进行配置。这时设备方可正常使用。
    我现在很疑问,第二种方法是在USB协议里看到的,个人理解第一种是上位机软件对USB设备的操作,第二种是开发USB驱动程序时严格定义的,不知道理解的对不对,还有就是,我现在在上位机对USB接口操作,即第一种方法,请问打开设备后就可以直接读写了吗?还要做哪些配置?需要对端点(endpoint)指定吗?
  2. A
    我现在在上位机对USB接口操作,即第一种方法,请问打开设备后就可以直接读写了吗?还要做哪些配置?需要对端点(endpoint)指定吗?

    你说的的第一种方法在操作系统加载配置设备驱动程序过程中已经完成了第二种方法/USB规范要求的各种配置步骤。
    所以,直接发读写和控制请求给设备就可以完成对设备的控制了。 

用can总线与上位机通讯,程序如何编写

  1. Q
    用VC2005 C#开发的上位机程序,以前使用串口来和下位机通讯,现在改成用CAN总线来和下位机通讯,上位机程序怎么改写啊?没接触过这类东西,没有头绪,请大家给个指点呗
  2. A
    CAN转USB的设备都会提供驱动程序和例子程序加协议,根据例子和协议改成自己的程序就行了,如果不提供驱动和例子加协议,别人就不能用他的设备

请教MFC上位机程序,50个仪表,1个控制台(升源降源),采用多线程如何对仪表进行检测?

  1. Q
    50个仪表放到控制台上,只有一个控制台。要做一个自动的MFC上位机程序,点一下按键,一直跑到完。软件能够自动的使控制台升源降源,然后与仪表通信,进行仪表的检测。控制台是一对多的,也就是50个仪表只能用一个控制台。这涉及到同步问题。下一步的检测只能是等待这一步所有仪表都检测完毕,才进行下一步(只能如此)。通信及控制台的控制、测试等不是问题。关键是能否用多线程,同时启动50个线程并发检测。

    之前的做法是采用定时器的方式。设定全局变量timerno,timerno随定时器累加。每个timerno固定做特定的操作(即与仪表进行通信)。这样就能保证50个仪表是一致的。

    这种方法的问题是,仪表是从设备,通信时有应答。应答的快慢不一致。所以只能按照最慢的应答时间等待,才能保证不超时。这样比较费时。比如有49个都是

    在100ms应答,而有1个是在1000ms时应答。则必须用1000ms做最大等待时间。

    现在想改成线程方式,即每个仪表收到应答后就进行下一步操作,各干各的,这样会节省时间。但如果遇到控制台的升源降源等一致性操作的时候,必须同步等待所有仪表完成上一步才行。

    请问这两个方法哪个更好,50个线程的方案是否可行,该如何做?
  2. A
    楼主 你这个 1个上位机挂50个  多半是用的总线吧,不会用50个端口吧。既然用的总线,就一次性发送所有查询吧,下位机应答回来都有地址什么的标志把,你通过地址来判断是哪个下位机返回来的数据。不知道你的总线协议和下位机是否支持判断总线忙活着空闲,然后占用总线等一系列协议。

    你开线程也可以,如果你是多个端口的话 当然可以用多个线程,但是不要开太多,比如你要查询50个,你可以开10个线程 每个线程查询5个,但是这个都是基于你有多个端口的情况下的,如果你是总线,那么和下位机通信的只有1个端口,你就只有开一个线程。去发送接收, 你发送完了等待接收 用类似waitforsingleobject这种去等待即可,如果那边接收完了 就给信号让等待结束,马上就可以继续发  

    楼主还是说下接口环境,通信环境 才方便讨论问题