您的位置 首页 电路

根据LabWindows/CVI的Modbus通讯完成

虚拟仪器(Virtual Instruments)是80年代末出现的概念,即在通用硬件平台上通过更改软件功能,设计出不同功能的测试仪器,能大幅缩短研发周期,降低成本。NI公司的LabWindows/

虚拟仪器(Virtual Instruments)是80年代末呈现的概念,即在通用硬件平台上经过更改软件功用,规划出不同功用的测验仪器,能大幅缩短研制周期,降低成本。NI公司的LabWindows/CVI具有强壮的图形界面规划功用,以ANSIC为中心,供给了丰厚的库函数与仪器驱动。

Modbus是由MODICON公司于1978年提出并倡议的一种协议,其运用领域包括生产进程主动化、进程操控和楼宇主动化。现在首要经过以太网上的TCP/IP、Modbus令牌传递网络以及各种介质上的异步串行传输来完结。

文中以主动卷烟机械操控体系为例,主动卷烟操控体系完结卷烟动作需求多个设备协同动作完结,该体系可视为一个进程操控体系,需求对各设备的作业状况进行实时监控并要求能实时呼运用户的操作。选用Modbus协议通讯的办法,以上位机作为通讯主站,将遵从完结对从站的动作操控。但是关于较为杂乱的Modbus通讯协议的各设备作为子站完结组网,可便利地以通讯的办法与从站完结信息交互并进程操控体系,惯例的组态软件难以消除实时通讯与界面呼应之间的抵触,选用LabWindows/CVI完结Modbus协议,可充沛运用多线程编程技能处理此问题,然后防止产生抵触时形成操控体系的毛病。

1 Modbus协议描绘

1.1 Modbus帧描绘

Modbus协议是一种运用层报文传输协议,是一种恳求/应对协议,按照功用码界说供给相应的服务,协议界说了一个与通讯层无关的通用信息帧,帧格局如图1所示,首先由主站根据相应的恳求音讯格局树立发送帧建议通讯,从站接纳主站恳求信息后作出呼应,一个恳求/呼应周期如图2所示,包括了1个主站恳求帧与从站回复帧。Modbus协议有3种不同的通讯类型,别离是主站恳求通讯,由主站建议;从站正常呼应,对主站的恳求作出处理后无差错的回复帧;反常呼应,从站产生反常情况后对主站恳求的反常回复。

根据LabWindows/CVI的Modbus通讯完结

1.2 Modbus传输形式

Modbus协议界说了两种串行传输形式,别离是ASCII形式和RTU形式。两种形式运用不同的办法对帧开端和传输做出界说。在相同的波特率下,比较于ASCII形式,RTU形式具有更高的吞吐率,故工业现场操控的智能仪器仪表大多选用RTU形式。相同,主动卷烟机Modbus网络传输运用的是RTU形式。RTU形式以传输相邻字符的距离时刻作为报文开端和结束标志,两报文间有必要有大于发送3.5个字符的时刻,同一个报文传输中,相邻字符之间距离有必要小于发送1.5个字符的时刻。实践运用中,需求根据网络选用的波特率来确认标识帧开端和结束时刻,以波特率9 600 bit·s-1为例,1个字符用8 Byte表明,则发送1个字符的时刻为ts=8/9 600≈0.83 ms。1.5个字符对应的时刻约为1.25 ms,3.5个字符对应的时问为3 ms,计算出的时刻作为帧开端与结束的根据。

2 多线程技能的运用

LabWindows/CVI选用事情驱动与回调函数的编程办法,关于传统的次序进程操控,无需运用多线程。当体系使命实时性要求较高时,CPU假如一向履行实时性使命,则不能呼应界面的其它事情。引进多线程技能能够较好地处理这个问题,操作体系中,线程是进程的一个履行单元,是能够由体系调度的最简略的代码单元。关于单核体系,多线程技能充沛运用了CPU的闲暇时刻片,运用闲暇时刻片在主线程与次线程之间进行切换,因为体系切换速度快,所以两个程序可视为一起运转。

多线程技能首要是线程池技能与异步守时器,线程池技能运用线程池对多个线程进行分配,适用于不守时事情。异步守时器运用的是Windows多媒体守时器,适用于守时循环事情,当有多个异步事情履行时,优先选用线程池技能。

3 Modbus协议完结

3.1 网络拓扑结构

主动卷烟操控体系包括5个站点,上位机作为主站点,4个从站对应4个履行机构,其网络拓扑如图3所示,主站需求完结的功用首要有3个方面:(1)轮询功用。实时查询子站的转速信息,方位信息以及极限方位信息。(2)独立操控功用。独自操控从站履行机构动作,例如发动,中止。(3)参数改写功用。改写参数信息,如转速,运动方位等。

根据LabWindows/CVI的Modbus通讯完结

3.2 线程分配

轮询功用及参数改写功用在体系运转进程中继续履行,假如在主线程中完结,会使CPU一向处于忙状况,无法呼应界面临从站的独自操作,形成界面呼应与实时性使命存在抵触。处理办法是拓荒新的线程,将轮询功用以及参数改写功用放到次线程中完结,这样既能确保体系能及时呼应,又确保实时使命顺畅履行。程序初始化时,新建线程池,调用线程池分配函数CmtScheduleThreadPoolFunetionAdv()新建轮询线程PollThread(),发送线程SendRTUThread()以及接纳线程ReceiveRTUThread()。轮询线程完结轮询功用,经过通讯操作获取从站的实时信息,发送线程和接纳线程针对用户的界面操作,别离完结从站的独立操控功用。

3.3 Modbus协议完结

3.3.1 线程安全变量界说

通讯进程中,多个线程拜访的全局变量有两种,别离是发送和接纳信息帧。各从站的速度和方位等信息,因为变量较多且类型纷歧,假如悉数界说线程安全变量,可能会形成线程产生堵塞,故将会集拜访的变量界说为结构体变量,再调用DefineThreadSafeVar。(VarType,VarName)将结构体变量声明为线程安全变量。每次拜访这些变量之前,都需求调用函数GetPointerToVarName(void)获取对应线程安全变量的指针,拜访完后,调用ReleasePointerVarName(void)函数及时开释指针。

主程序中界说了Modhus RTU帧的结构类型,如下

typedef struct

{

int ByteLength;//帧内字节数

unsigned char message[256];//帧信息数组

}Message;

帧变量用来寄存发送帧或是接纳帧的悉数信息,针对每个从站界说了结构变量类型,表征从站的特征信息,如下

typedef struct

{

int velocity;//速度信息

int codevalue;//编码器信息

int startplace;//开端方位

int endplace;//中止方位

int slavestate;//子站在线状况

int errorstate;//子站过错状况,用于反常呼应

}Slave;

3.3.2 运用层协议完结

轮询线程周期性地查询各个子站,发送线程完结主站对从站的独自操控功用并及时呼应界面事情。其次,新建一个异步守时器,完结参数的守时改写。为确保界面呼应的实时性,对3个线程的优先级进行规则,优先级从高到低为发送线程,接纳线程,轮询线程,异步守时器。

根据LabWindows/CVI的Modbus通讯完结

每个线程都需完结主站与从站之间的通讯,将Modbus主站的一次通讯分解为3个流程,别离是发送,接纳和帧解析,完结3个流程则表明主站与从站完结了一次完好的通讯。界说发送函数SendMessage()、接纳函数ReceiveMessage()与帧剖析FrameAnalyze()完结上述流程,以便利各个线程调用,程序流程图如图4所示,发送程序内的帧间字符延时经过函数SyncWait()完结,要求>3.5个字符时刻。

根据LabWindows/CVI的Modbus通讯完结
根据LabWindows/CVI的Modbus通讯完结
根据LabWindows/CVI的Modbus通讯完结

每个线程都为主程序预留了标志位,主线程经过置位while循环标志位来完结对线程的操控。轮询线程在程序运转进程中循环履行,而且由异步守时器实时获取最新的参数信息实时改写界面;发送线程完结主站恳求功用,接纳线程获取从站的呼应信息,解析从站接纳是否正常并做出规则动作。发送和接纳线程仅在呼应界面事情时履行一次。

串口作为公共硬件资源,存在多个线程占用的问题,LabWindows/CVI为拜访串口供给了一系列的接口拜访函数。为防止各线程形成拜访抵触,选用相似线程锁的机制来处理,将串口视为一个全局变量,为每个串口分配一个线程锁目标,任何时候拜访串口之前都有必要获取线程锁,拜访结束之后及时开释。

4 实验验证

软件运转界面图5所示。卷烟操控体系对完结空烟管填充的要求为卷烟时刻1.5 min,成烟分量为6.500±0.010 g。点击开端操作之后体系主动运转完结卷烟动作,在体系运转进程中,需不断发送查询指令轮询各从站转速及方位信息,由异步守时器进行改写,每个从站都能独自操控发动、中止和复位功用,卷烟进程中不会产生死锁现象。以10支空烟管为例,记载完结每支烟管卷烟完结的时刻以及分量,实验成果如表1所示。

根据LabWindows/CVI的Modbus通讯完结

5 结束语

运用LabWindows/CVI完结Modbus通讯,充沛发挥了虚拟仪器开发的快捷功用,完结了实时性操控作业。比较于运用组态王等软件,其功用更为丰厚,而且能够充沛运用多线程技能,合理分配多个实时性使命,确保多个并发使命顺畅履行。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/fangan/dianlu/296553.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部