㈠ wince串口的数据采集
既然是买来的开发板,那么相应的内核、驱动等都是做好的,你只需要下载的板子上就可以了,成功后,WINCE操作系统完美运行,这时你可以说操作系统是你移植成功的,但是前期工作你要大体了解下,知道移植操作系统是怎么回事,到老师提问时别摸不着头脑。
对于串口的数据采集,就是一个相应的界面,界面上有相应的按钮,按下相应的按钮实现相应的功能,具体怎么布局、怎样设计就看你自己的想法了。
这一块主要就是在你所生成的SDK下写应用程序,主要环境为EVC或者VS2005,所用的开发语言VB、VC、C#等都可以。
㈡ VS2005与wince5.0的串口通信程序(VB语言编写)
write方法是基于流类的,有三种重载,可以发送string,也可以发送byte[] 和char[]。
收到错误的数据:查看串口设置:波特率等。调试助手不一定解释TextBox的Unicode字符,发送ASCII字符试试。
发送16进制数,可以用字节数组,如果需要从界面接收用户输入:
byte[] bytes=new byte[textBox1.Text.Length/2];
for (int i = 0; i < textBox1.Text.Length; i += 2)
{
byte b = Convert.ToByte(textBox1.Text.Substring(i,2), 16);
bytes[i / 2] = b;
}
然后发送bytes即可。
㈢ 用C# 实现 wince 串口操作的方法
初始化代码:
sp = new SerialPort();
sp.PortName = config.COMPort;
sp.BaudRate = 9600;
sp.DataBits = 8;
sp.StopBits = StopBits.One;
sp.Parity = Parity.None;
sp.DataReceived += sp_dataReceive;
sp.ReadTimeout = 500;
try
{
sp.Open();
}
catch (Exception e1)
{
if (MessageBox.Show("打开串口时失败, 工作站将不能正常读码, 是否继续?", "警告", MessageBoxButtons.YesNo)
!= DialogResult.Yes)
{
Close();
}
}
数据接收事件:
public void sp_dataReceive(object sender, SerialDataReceivedEventArgs e)
{
int i = 0;
byte[] data = new byte[20];
try
{
while (i < 20) data[i++] = (byte)sp.ReadByte();
}
catch (Exception e1) { }
if (tbBSM.Enabled)
{
strBsm = Encoding.ASCII.GetString(data, 0, i);
if (strBsm.Length >= 10)
{
strBsm = strBsm.Substring(0, 10);
}
MethodInvoker mi = new MethodInvoker(updateBSM);
this.BeginInvoke(mi);
this.Invalidate();
}
}
㈣ 求WinCE6.0平台上可运行的串口读写程序,C#编写,使用.net campactframework.
C#串口读写程序方法具体如下:
PortDataSend.cs 发送Class
using System;
using System.Collections.Generic;
using System.Text;
namespace IOCPTest.BaseC
...{
public class PortDataSend
...{
Declare#region Declare
private long mCount = 0;
private int mDataLength = 0;
private byte[] BS = null;
#endregion Declare
PortDataSend#region PortDataSend
public PortDataSend()
...{
}
public PortDataSend(byte[] pBS, int pDataLength)
...{
BS = pBS;
mDataLength = pDataLength;
}
#endregion PortDataSend
DataSend#region DataSend
public void DataSend()
...{
try
...{
if (BS == null)
...{
return;
}
if (mDataLength == 0)
...{
mDataLength = BS.Length;
}
if (mDataLength == 0)
...{
return;
}
mDataLength = mDataLength + 2;
byte[] BST = new byte[mDataLength];
BST[BST.Length - 2] = 0x00;
BST[BST.Length - 1] = 0x03;
for (int i = 0; i < BS.Length; i++)
...{
BST[i] = BS[i];
BST[BST.Length - 2] = (byte)(BST[BST.Length - 2] ^ BS[i]);
}
IOCPTest.BaseC.GlobeValues.SP.Write(BST, 0, BST.Length);
mCount++;
mDataLength = 0;
}
catch
...{
}
}
#endregion DataSend
mCount#region mCount
public long GetCount
...{
get
...{
return mCount;
}
}
#endregion mCount
DataSendTest3#region DataSendTest3
public void DataSendTest3()
...{
try
...{
byte[] BSTest;
string[] mBSStr = Convert.ToString("01 02 03 01 00 3A 02 03 31 31 31 31 31 31 31 31 31 31 31 31 2C 00 01 2C 00 64 3B 32 32 32 32 32 32 32 32 32 32 32 32 2C 00 01 2C 00 64 3B 33 33 33 33 33 33 33 33 33 33 33 33 2C 00 01 2C 00 64 3B").Split(' ');
BSTest = new byte[mBSStr.Length];
for (int i = 0; i < BSTest.Length; i++)
...{
BSTest[i] = (byte)Convert.ToInt32(mBSStr[i], 16);
}
BS = BSTest;
DataSend();
}
catch
...{
}
}
#endregion DataSendTest3
}
}
PortDataReceived.cs 接收Class
using System;
using System.Collections.Generic;
using System.Text;
namespace IOCPTest.BaseC
...{
class PortDataReceived
...{
Declare#region Declare
private long mCount = 0;
private int mDataEnd = 0;
private byte[] BR = new byte[2048];
private byte[] BRTmp = new byte[2048];
private byte mSOH = 0x01; //通讯特殊字符定义:通讯字头
private byte mSTX = 0x02; //通讯特殊字符定义:数据开始
private byte mETX = 0x03; //通讯特殊字符定义:通讯结束
#endregion Declare
PortDataReceived#region PortDataReceived
public PortDataReceived()
...{
}
#endregion PortDataReceived
Listen#region Listen
public byte[] Listen()
...{
try
...{
byte[] BR = ReceiveData();
return BR;
}
catch (NullReferenceException NullEx)
...{
throw NullEx;
}
catch (Exception ex)
...{
throw ex;
}
}
#endregion Listen
ReceiveData#region ReceiveData
public byte[] ReceiveData()
...{
try
...{
int mStartCount = 0;
int mSOHPos = 0;
int mSTXPos = 0;
int mETXPos = 0;
int mCmdLength = 0;
System.DateTime DT = System.DateTime.Now;
byte[] Data = null;
BRTmp = new byte[2048];
while((System.DateTime.Now.Ticks - DT.Ticks) < IOCPTest.BaseC.GlobeValues.PortTimeOut)
...{
try
...{
mStartCount = 0;
//System.Threading.Thread.Sleep(IOCPTest.BaseC.GlobeValues.PortDelay);
mStartCount = IOCPTest.BaseC.GlobeValues.SP.Read(BRTmp, 0, 2048);
for (int i = 0; i < mStartCount; i++)
...{
BR[i + mDataEnd] = BRTmp[i];
}
mDataEnd = mDataEnd + mStartCount;
}
catch
...{
}
if (mStartCount > 0)
...{
DT = System.DateTime.Now;
}
//寻找并且校验SOH、STX、ETX的位置
for (int i = 0; i < BR.Length - 6; i++)
...{
if((BR[i] == mSOH) && (BR[i+6] == mSTX))
...{
mSOHPos = i;
mSTXPos = i+6;
mCmdLength = (int)BR[i+4] * 256 + (int)BR[i+5];
mETXPos = mSTXPos + mCmdLength + 2;
if (BR[mETXPos] == mETX)
...{
Data = new byte[mSTXPos + mCmdLength + 1 - mSOHPos];
for (int j = 0; j < mSTXPos + mCmdLength + 1 - mSOHPos; j++)
...{
Data[j] = BR[mSOHPos + j];
}
for (int j = 0; j < (mDataEnd - (mSTXPos + mCmdLength + 1)); j++)
...{
BR[j] = BR[(mSTXPos + mCmdLength + 1) + j];
}
for (int j = (mDataEnd - (mSTXPos + mCmdLength + 1)); j < 2048; j++)
...{
BR[j] = 0x00;
}
mDataEnd = mDataEnd - (mSTXPos + mCmdLength + 1);
IOCPTest.BaseC.GlobeValues.DataBuffer.Add(Data);
mCount++;
return Data;
}
}
}
}
return null;
}
catch (NullReferenceException NullEx)
...{
throw NullEx;
}
catch (Exception ex)
...{
throw ex;
}
}
#endregion ReceiveData
ReceiveDataNonReturn#region ReceiveDataNonReturn
public void ReceiveDataNonReturn()
...{
try
...{
ReceiveData();
}
catch
...{
}
}
#endregion ReceiveData
ReceiveDataThread#region ReceiveDataThread
public void ReceiveDataThread()
...{
try
...{
while (true)
...{
try
...{
ReceiveData();
}
catch
...{
}
}
}
catch
...{
}
}
#endregion ReceiveData
mCount#region mCount
public long GetCount
...{
get
...{
return mCount;
}
}
#endregion mCount
}
}
DataProcessingIOCP.cs 处理Class
using System;
using System.Collections.Generic;
using System.Text;
namespace IOCPTest.BaseC
...{
public class DataProcessingIOCP
...{
Declare#region Declare
private long mCount = 0;
#endregion Declare
DataProcessingIOCP#region DataProcessingIOCP
public DataProcessingIOCP()
...{
}
#endregion DataProcessingIOCP
DataProcessing#region DataProcessing
public void DataProcessing()
...{
try
...{
int mCurrentBuffer = 0;
while (true)
...{
byte[] RD = null;
提取正待处理的数据#region 提取正待处理的数据
if (IOCPTest.BaseC.GlobeValues.DataBuffer != null)
...{
if (IOCPTest.BaseC.GlobeValues.DataBuffer.Count > 0)
...{
if (mCurrentBuffer < 0)
...{
mCurrentBuffer = 0;
}
RD = (byte[])IOCPTest.BaseC.GlobeValues.DataBuffer[mCurrentBuffer];
mCurrentBuffer++;
}
else
...{
continue;
}
}
else
...{
continue;
}
#endregion 提取正待处理的数据
数据处理#region 数据处理
switch (RD[3]) //指令处理
...{
case 0x01:
ReadData_0X01(RD);
break;
case 0x02:
ReadData_0X02(RD);
break;
}
#endregion 数据处理
处理结束,删除已经处理了的数据#region 处理结束,删除已经处理了的数据
if (IOCPTest.BaseC.GlobeValues.DataBuffer != null)
...{
if (IOCPTest.BaseC.GlobeValues.DataBuffer.Count > 0)
...{
IOCPTest.BaseC.GlobeValues.DataBuffer.Remove(RD);
}
}
mCurrentBuffer--;
if (mCurrentBuffer < 0)
...{
mCurrentBuffer = 0;
}
#endregion 处理结束,删除已经处理了的数据
mCount++;
}
}
catch
...{
}
}
#endregion DataProcessing
mCount#region mCount
public long GetCount
...{
get
...{
return mCount;
}
}
#endregion mCount
ReadData_0X01#region ReadData_0X01
private void ReadData_0X01(byte[] pRD)
...{
try
...{
try
...{
if (pRD[3] != 0x01)
...{
return;
}
string[] mSampleCode = new string[pRD[7]];
int[] mTesterType = new int[pRD[7]];
int[] mLoadCapacity = new int[pRD[7]];
for (int i = 0; i < pRD[7]; i++)
...{
for (int j = 0; j < 12; j++)
...{
mSampleCode[i] = mSampleCode[i] + Convert.ToString(Convert.ToChar(pRD[8 + j + i * 19]));
}
mTesterType[i] = pRD[i * 19 + 21] * 255 + pRD[i * 19 + 22];
mLoadCapacity[i] = pRD[i * 19 + 24] * 255 + pRD[i * 19 + 25];
}
return;
}
catch (Exception Ex)
...{
throw Ex;
}
}
catch
...{
}
}
#endregion ReadData_0X01
ReadData_0X02#region ReadData_0X02
private void ReadData_0X02(byte[] pRD)
...{
try
...{
try
...{
if (pRD[3] != 0x02)
...{
return;
}
int[] mData = new int[pRD[7]];
string mSampleCode = "";
for (int i = 0; i < 12; i++)
...{
mSampleCode = mSampleCode + Convert.ToString(Convert.ToChar(pRD[8 + i]));
}
for (int i = 0; i < mData.Length; i++)
...{
mData[i] = pRD[i * 2 + 20] * 255 + pRD[i * 2 + 21];
}
}
catch (Exception Ex)
...{
throw Ex;
}
}
catch
...{
}
}
#endregion ReadData_0X02
ReadData_0X02_Request#region ReadData_0X02_Request
private void ReadData_0X02_Request(byte[] pRD)
...{
try
...{
try
...{
if (pRD[3] != 0x02)
...{
return;
}
int[] mData = new int[pRD[7]];
string mSampleCode = "";
for (int i = 0; i < 12; i++)
...{
mSampleCode = mSampleCode + Convert.ToString(Convert.ToChar(pRD[8 + i]));
}
for (int i = 0; i < mData.Length; i++)
...{
mData[i] = pRD[i * 2 + 20] * 255 + pRD[i * 2 + 21];
}
}
catch (Exception Ex)
...{
throw Ex;
}
}
catch
...{
}
}
#endregion ReadData_0X02_Request
}
}
㈤ wince下有没有串口调试助手
串口调试助手的参数设置对了吗? 1.波特率,校验位等。 2.发送窗口旁边有个“十六进制发送”选择的: A.勾上,就在窗口输入“76 31 30 30 30 0D”发送,这是十六进制(hex),有没有空格都无所谓的;数字前面的“0x”是表示这是十六进制数
㈥ Wince 虚拟串口,该怎么处理
Wince 虚拟串口
在wince下配置e300的无线上网卡,在硬件开发板的上只有两个com口,但是无线上网卡要求是com6,com7,com8,
用string[] n_com = SerialPort.GetPortNames();获得的也只有com1/com2
请问各位大侠这个问题是wince的没有虚拟串口的问题吗?
该怎么解决?希望各位能给个解释
------解决方案--------------------
探讨
当connect的时候,提示端口已占用
打电话给厂家说是用com6,com7,com8,
在开发板上用string[] n_com = SerialPort.GetPortNames();获取的com口名字,只有com1/com2。
去哪里给弄com6
推断可能是wince没有装usb转串口的驱动
于是把wince下public带的usbser.dll安装上,但还只有com1/com2,……
------解决方案--------------------
探讨
现在在系统里面出现com1,com2,com0,com3,com4加上偶尔会出现的com5
但是始终没有出现com6,com7,com8
我尝试着修改注册表把原来有的com6,com7,com8修改为com0,com3,com4
在dos引导wince的时候就出错了,
Error invalid signature
data:0 0 0 0 0 0 0 0 0 0 0 0 0
------解决方案--------------------
探讨
现在出现的问题是:
e300的驱动已经安装了,为什么能这么说呢?因为能够在windows目录下看到所安装的
驱动(EvdoUsbcdcDriver.dll)
并且在make new connection的时候,能够在调制解调器里面看到CDMAModem("FriendlyName")。
但是虚拟的com口并没有出来,仍旧只有com1/com2。
请问各位大侠
是我在wince7系统定制……
------解决方案--------------------
探讨
引用:
引用:
现在出现的问题是:
e300的驱动已经安装了,为什么能这么说呢?因为能够在windows目录下看到所安装的
驱动(EvdoUsbcdcDriver.dll)
并且在make new connection的时候,能够在调制解调器里面看到CDMAModem("FriendlyName")。
但是虚拟的com口并没有出来,仍旧只有c……
------解决方案--------------------
探讨
引用:
我之前在WinCE6下调试过huawei/ZTE 3G的模块,也遇到过串口虚拟不出来。
最终问题还是出在usb虚拟串口驱动,所以LZ要确认原厂给你的usb虚拟串口驱动是否支持你目前的平台。再有一个需要注意的地方,就是模块的上电时序。
呵呵,这个也许是现在最具有说服性的理由!
如果是硬件平台的话,我现在用的开发板是x86的,e300能够x86的PC上成功连上……
㈦ qt在wince下怎么用串口通信
我用win_qextserialport.h这个可以实现简单的通信
㈧ wince 6.0 如何把调试串口改为普通串口
步骤:
1:在D:/WINCE600/PLATFORM/SMDKC100/MDK100.bat里面
set BSP_NOSERIAL=
set BSP_NOUART0=
set BSP_NOUART1=
set BSP_NOUART2=
set BSP_NOUART3=
set BSP_NOIRDA2=1
set BSP_NOIRDA3=1
@REMset BSP_DEBUGPORT=SERIAL_UART0
@REMset BSP_DEBUGPORT=SERIAL_UART1
@REM set BSP_DEBUGPORT=SERIAL_UART2
@REM set BSP_DEBUGPORT=SERIAL_UART3
隐去以上的,主要是要加载各个串口的注册表信息一边加载驱动
如果哪个不隐去,则哪个就不加载,用于调试串口
2:在D:/WINCE600/PLATFORM/SMDKC100/SRC/OAL/OALLIB/debug.c里面
要隐去VOID OEMWriteDebugByte(UINT8 ch)和、int OEMReadDebugByte()
里面的内容:注意如果不隐去则烧写系统进不了,死在这了!
VOID OEMWriteDebugByte(UINT8 ch)
{
// Wait for TX Buffer Empty
//
// while (!(g_pUARTReg->UTRSTAT & 0x2));//muscle boy
// g_pUARTReg->UTXH = ch; //muscle boy
}
//------------------------------------------------------------------------------
//
// Function: OEMReadDebugByte
//
// Reads a byte from the debug serial port. Does not wait for a character.
// If a character is not available function returns "OEM_DEBUG_READ_NODATA".
//
int OEMReadDebugByte()
{
/* int ch; //muscle boy
if (g_pUARTReg->UTRSTAT & 0x1) // There is received data
{
ch = (int)(g_pUARTReg->URXH);
}
else // There no data in RX Buffer;
{
ch = OEM_DEBUG_READ_NODATA;
}
return ch;
*/ //muscle boy
}
㈨ 为什么在wince中用串口接收超过128个字节以上的时候就无法接收到数据呢
本人对WINCE编程不熟悉。不过从通用IO来说,一般情况下,是IO缓存机制上出了问题。是你在读取串口数据后,没有及时清空IO缓存。对一个IO端口来说,IO缓存是共享的。IO设备接收到数据后,在缓存满后,将进入等待周期,等待使用IO的程序对其缓存进行部分清空处理,腾出空间。若没有空余缓存,则不会再接收新的数据。从你描述的情况来看,你在读取数据后,没有发出清除读取后的数据命令,致使缓存保持在全满状态。其寄存器“缓存满”标志保持有效,阻止设备继续接收数据。因此,仔细检查你的程序,增加清除已读缓存的命令,使设备可以继续接收数据,才有新的数据供程序读取。
㈩ WINCE中,实现串口数据的接收和发送时,使用了writefile和readfile函数。这两个函数发送和接收的数据都是
writefile发送16进制数据么问题啊
Writing to a Serial Port (Windows CE 5.0)
DWORD dwError,
dwNumBytesWritten;
WriteFile (hPort, // Port handle
&Byte, // Pointer to the data to write
1, // Number of bytes to write
&dwNumBytesWritten, // Pointer to the number of bytes
// written
NULL // Must be NULL for Windows CE
);