原创 Windows Mobile 6下使用serialPort控件进行串口通讯。

2008-7-30 20:10 6616 7 9 分类: 工业电子

在仪表的Modbus通讯中,上位机可以是PLC、PC、PDA或智能手机。本人使用Windows Mobile 6操作系统下的多普达P660进行了上位机的编程。现在将调试程序说一下。


使用VS2005进行开发。


8a24b122-dac6-4777-911a-2fc48f459db5.jpg


控件有3个button,两个TextBox,两个Label和一个SerialPort等。button1打开串口,button2将txtSend的字符发出,接收是自动的。接收txtReceive显示的是字符ASCII码的十进制数字,例如发送“12345”,txtReceive显示为“4950515253”。


txtReceive显示使用了在线程上异步执行指定委托。使用BeginInvoke和delegate完成。


接收使用事件private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)。


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO.Ports;
using System.Threading;


namespace modbuscomm
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private  String strReceive ;
        public delegate void InvokeDelegate();
        public void Display()
        {
            txtReceive.Text = strReceive;
        }


        private void button1_Click(object sender, EventArgs e)
        {
            //更改参数
            serialPort1.PortName = "COM6";
            serialPort1.BaudRate = 9600;
           // serialPort1.Parity = Parity.Odd; 默认是none
            serialPort1.StopBits = StopBits.One;


            //打开串口(打开串口后不能修改端口名,波特率等参数,修改参数要在串口关闭后修改)
            serialPort1.Open();


        }


        private void button2_Click(object sender, EventArgs e)
        {
            //发送数据
            //SendStringData(serialPort1);
            //serialPort1.Write(txtSend.Text);
            //也可用字节的形式发送数据
            SendBytesData(serialPort1); 
        }
 


  //发送字符串数据
                private   void   SendStringData(SerialPort   serialPort)
                {
                        serialPort.Write(txtSend.Text);
                }



                //发送二进制数据
                private   void   SendBytesData(SerialPort   serialPort)
                {
                        byte[]   bytesSend="System".Text.Encoding.Default.GetBytes(txtSend.Text   );
                        serialPort.Write(bytesSend,   0,   bytesSend.Length);
                }


        private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {


                //   接收缓冲区中数据的字节数
                int int_Len = serialPort1.BytesToRead;


                //   接收数据
                byte[] bytes = new byte[int_Len];
                serialPort1.Read(bytes, 0, int_Len);



                //   将数据存入字符串缓冲区中
                for (int i = 0; i < bytes.Length; i++)
                {
                    strReceive += bytes;
                }
                strReceive += "";
           
            txtReceive.BeginInvoke(new InvokeDelegate(Display));
        }


       } 
}  


 

PARTNER CONTENT

文章评论2条评论)

登录后参与讨论

用户272664 2010-1-25 16:01

应该是高手了,我目前也在着手研究这一方面,请给留个联系方式好吗?想请教一下这位大侠 我目前遇到的 问题是: 对PDA做一个收发程序,然后与我们的装置上的红外收发器通讯,我仅仅把PDA红外当作串口,但是通讯时为什么装置收到的都是乱码?是不是PDA还是把红外当做智能设备而不是简单的串口?还是PDA需要处理一些协议什么的?我实在是搞不清楚,希望您能帮我一下啊 邮箱:ssy0919@yahoo.cn

用户956949 2009-5-13 14:37

txtReceive显示使用了在线程上异步执行指定委托。使用BeginInvoke和delegate完成。 这句话帮了个大忙。
相关推荐阅读
用户1404696 2009-06-12 15:28
MODBUS协议在TI DSP TMS320F22335上的实现(一)
唉,做的仪表越来越复杂了,需要使用DSP了,开始一点一点将单片机的东西移植到DSP上面了。先说TMS320F28335的串口吧。有三个串口,SCIA,SCIB和SCIC,GPIO的管脚对应如下SCIA...
用户1404696 2009-02-25 10:56
仪表防爆技术
 n年前做的,拿出来晒晒。 一:防爆的基本概念 二:电气设备的防爆形式 三:防爆标志及铭牌 四:防爆设计 五:防爆技术的应用 ...
用户1404696 2008-10-28 10:22
ST7920汉字点阵LCD的接口程序(直接接方式)
//总线扩展方式连接12832点阵汉字液晶//A0--D/I//A1--R/W//E连接地址分配的0xD000#include <absacc.h>#include <REG52.H...
用户1404696 2008-10-28 10:11
ST7920汉字点阵LCD的接口程序(间接方式)
/***********************************************************            ST7920控制器间接方式驱动程序           ...
用户1404696 2008-10-21 08:46
一个经典的按键扫描程序
按键是比较复杂。可以用状态机表示。 每10mS执行一次键盘扫描任务 0、无键,若有键进入状态1 1、第一次检到有键。若有键进入状态2,同时将键值送缓冲区。 若无键进入状态0。 2、若有键则计时,按键...
用户1404696 2008-10-11 16:09
生产测井仪器--有线遥传短接
   该仪器采用有线多路遥传技术实现单芯电缆传输。可以配DDL-Ⅲ、DDL-Ⅴ及所有与DDL-Ⅲ相兼容的地面系统。遥传短节(WTC)原理遥传短节核心由两片单片机组成,主要向井下仪器各参数发送地址,并接...
EE直播间
更多
我要评论
2
7
关闭 站长推荐上一条 /3 下一条