2013年10月18日
摘要: 最近一客户要求使用STC12C5A60S2实现Modbus Rtu协议与KEPServerEx V4.0软件通信,采集单片机P2口每位的状态,设置P0口每位的状态,实现三路AD转换其中一路采集的是C02的浓度,以及使用SHT10获取温度和湿度。KEPServerEx V4.0使用TCP通信,而单片机使用的是串口RS232通信,所以增加了TCP转RS232的模块。本程序相对比较简单,STH10有现成的代码,AD转换直接官方提供的程序,主要需要实现的就是Modbus RTU通信协议的实现。根据对方的要求,P0,P2口的设置需要一位一位的读取或设置,如果按Modbus的内容,可以使用设置线圈状态和读 阅读全文
posted @ 2013-10-18 20:22 东王 阅读(2831) 评论(1) 推荐(0) 编辑
  2013年7月11日
摘要: 最近研究了一下MODBUS通信,在STC12C5A60S2单片机上实现了MODBUS协议的部分功能,方便上位机从单片机系统上获取数据,比如由单片机获取的温度、湿度、或者控制信号的状态等。有了MODBUS协议后,上位机的开发就很方便了,可以使用C#等高级语言通过串口通信,或者使用组态王直接通过串口通信而不需要写代码,这些都归功于MODBUS协议的开放性,很多的组态软件都能提供对他的支持。甚至通过PLC直接可以和单片机通信,比如在PLC系统上没有AD时,可以使用单片也来进行AD,然后通过MODBUS返回给PLC进行相应的控制。通过MODBUS协议可以实现主机和多个从机进行通谢,而每个从机有唯一的地 阅读全文
posted @ 2013-07-11 20:26 东王 阅读(10012) 评论(4) 推荐(4) 编辑
  2013年2月1日
摘要: C#一步一步实现插件框架的示例(三)C#一步一步实现插件框架的示例(二)C#一步一步实现插件框架的示例(一)前面有朋友反应,运行时出现:“ExampleAddin.WorkBenchSingleTon”的类型初始值设定项引发异常错误,这是由于在执行插件的加载过程中出现了错误,比如我们这本篇的例子中,判断查询按钮是否有效时的判断:有这样的语句:var form = WorkBenchSingleTon.WorkBench.ActiveMdiChild;由于最初执行时workbench可能为空,所以就会报错,例子中加了if (WorkBenchSingleTon.WorkBench==null) 阅读全文
posted @ 2013-02-01 12:29 东王 阅读(5215) 评论(6) 推荐(3) 编辑
  2013年1月25日
摘要: C#一步一步实现插件框架的示例(一)C#一步一步实现插件框架的示例(二)前两篇我们已经实现了功能按钮与界面的分离,其实也只是工具栏与其执行的功能代码与界面的分离,其作用还非常有限,因为他无法获取到主窗口的任何东西,无法进行操作,比如主界面有一个TextBox,那么这个按钮还不能访问到,也无法对其进行操作。我们今天就来完成View的设计,让工具栏的按钮能够访问窗口中的内容,同时窗口中的内容也是根据插件来自动生成。首先我们来实现View插件的生成代码。View即为主窗口中的一个mdi窗口生成一个接口:IViewContent public interface IViewContent ... 阅读全文
posted @ 2013-01-25 22:33 东王 阅读(6442) 评论(8) 推荐(5) 编辑
  2013年1月19日
摘要: 前一篇链接:C#一步一步实现插件框架的示例(一)今天我们再接着前一篇来完善插件功能。在前一篇中我们将生成插件按钮的代码直接写在了WorkBench中,无法体现插件式开发的优越性,现在我们来对其进行分离。首先对WorkBench类中的构造函数进行修改,删除原来的生成按钮功能的函数,改变后如下: public WorkBench() { InitializeComponent(); this.Controls.Add(ToolBar); Application.Idle += new EventHandler(Appl... 阅读全文
posted @ 2013-01-19 18:37 东王 阅读(8196) 评论(5) 推荐(3) 编辑
摘要: 像我这样的菜鸟,写程序一般就是拖控件,双击,然后写上执行的代码,这样在窗口中就有很多事件代码,如果要实现各按钮的状态,那得在很多地方修改代码,极为复杂.通过参考CSHARPDEVELOP的代码就说明和网上各位朋友的示例,在这里,自己实现了一个很简单的插件程序,方便程序的开发,每个功能可以独立开发,也方便维护.现在给大家讲讲其方法.先上张图片:由于我这个插件使用了DEVEXPRESS的控件,所有要运行就需要安装,在这里我们就不使用DEV的控件了.首先,我们需要定义一个接口,该接口定义了一个工具栏的按钮要执行的动作:ICommnd public interface ICommand { ... 阅读全文
posted @ 2013-01-19 00:23 东王 阅读(13485) 评论(12) 推荐(5) 编辑
  2013年1月11日
摘要: 以前写过一篇文章是实现界面与功能的分离,基于插件的方式,要实现一个功能需要实现一个类,该类继承于:AbstractToolButtonCommand,而AbstractToolButtonCommand又继承于:DevExpress.XtraBars.BarButtonItem类,这样在覆写父类的一些属性和方法的时候,VS的提示功能会列出很多属性,不方便开发,本次对整个结构进行了调整。AbstractToolButtonCommand类只实现了一些必要的接口如: public abstract class AbstractToolButtonCommand : AbstractCommand, 阅读全文
posted @ 2013-01-11 21:57 东王 阅读(5278) 评论(0) 推荐(1) 编辑
摘要: 网上有很多关于SingleTon的用法说明及实现,大多都提供了很多种实现的方法,包括如何保证在多线程时也只提供一个实例。对于他的作用都是说只提供一个实例,但是到底有什么作用,对于我们这些初学者来说并不知道如何使用。经过自己的摸索,目前了解到了一些用法,不知道对不对,请高手们指点:比如我们在程序中设置了一个主窗口:public partial class DefaultWorkBench :From { public DefaultWorkBench() { InitializeComponent(); }}由于这个窗口我们只需要一个就行了,所以我们使用SingleTon模式。publ... 阅读全文
posted @ 2013-01-11 18:44 东王 阅读(1082) 评论(0) 推荐(0) 编辑