当前位置:首页 » 操作系统 » c上位机源码

c上位机源码

发布时间: 2022-05-10 23:30:13

㈠ c#上位机开发

1、上下位机以串口通讯居多,这方面例子你找个C#串口调试工具源码,需要的东西源码中基本上都有涉及。网口通讯涉及到socket编程,例子也很多。
2、界面是C#的基础东西,主要与美工和C#控件有关。
3、数据也没什好说的,主要是跟基础的数据类型比如数组、byte之类打交道,涉及通讯的时候对这些知识以及进制之类转换一定要熟。
4、一般也会涉及到数据库和多线程,数据库一般是以access和sql server居多。

这些其实都算是c#的基础知识(除了socket之外),一般入门的书就是《C#入门经典》,基本上学完就差不多了,涉及界面美化的时候很可能会用到photoshop,有时间也要学一下。

㈡ C++实现上位机编程

DELPHI VB C++都可以
想很快入手的话建议 学习Delphi 和 vb 但是这两门语言现在比较少用 见过几个公司搞上位机的一般也都是用这两个
C++也可以 不过因为本身语言限制 所以C++编程难度也会稍微大点

做自己的决定。然后准备好承担后果。从一开始就提醒自己,世上没有后悔药吃。

㈢ 如何编程使上位机(界面c#)与下位机(单片机keil c)通过TCP/UDP协议来实现通信,最好有源代码,谢谢~~

看来兄弟是想用单片机弄网络终端啊,但是你的问题描述不够精准, 如果你是想单片机和PC之间实现ip/tcp方式通讯, 那么在单片机端有支持这一协议可以和串口连接的的芯片, PC端的程序实际上你没必要求什么源码, 有源码你也不见得编译过去, 这个看看C#关于网络编程的几步走就行了, 很简单的. 这个方式实际最后还是单片机的串口在起作用, 但是好处是可以远距离和多设备通信, 不知道这个是不是你的本意, 如果你仅仅是为了完成实验想要实现单片机和winform的通讯那么没必要非用tcp协议, 串口还是很方便的, 你可以winform端绑定一个端口, 然后用VSPM虚拟串口软件来与单片机通讯, 外设就稍多了.希望我的回答可以帮到你, 不明白的可以追问!

㈣ 如何用c语言开发自己的上位机软件

一般开发上位机软件都是带图形界面的。C也能做出图形界面的软件,但是开发周期太长也不实用。所以最好还是需要会一些其他语言,例如C++,C#,java这些做图形界面开发周期短的语言。既然会C,那么学习其他语言也只是一个熟悉语法的过程。所以很快就能上手,因为语言都是相通的嘛。可以开阔自己的视野去学习一下新的语言。不是说只会C有什么弊端,只是想说会的多才会知道语言之间的优劣。

㈤ 谁有上位机与下位机的串口通讯代码(C语言的)

兄弟,下面是我自己写的,希望给你帮助,把数据用send_one_uart()这个函数直接发送到串口就行了!最后求采纳,哈哈!
//-----头文件
#include<reg52.h>
//-----定义全局变量
unsigned
char
temp;
/***************************************************
**
函数名称:
uart_init
**
功能描述:
串口初始化函数
**

入:无
**

出:

**

明:

****************************************************/
void
uart_init(void)
{
scon
=
0x50;
//-----scon:
模式
1,
8-bit
uart,
使能接收
tmod
|=
0x20;
//-----tmod:
timer
1,
mode
2,
8-bit
重装
th1
=
0xfd;
//-----th1:
重装值
9600
波特率
晶振
11.0592mhz
tr1
=
1;
//-----tr1:
timer
1
打开
es
=
1;
//-----打开串口中断
ea
=
1;
//-----打开总中断
}
/***************************************************
**
函数名称:
sendbyte
**
功能描述:
发送字节函数
**

入:无
**

出:

**

明:

****************************************************/
void
sendbyte(unsigned
char
dat)
{
sbuf
=
dat;
while(!ti);
ti
=
0;
}
/***************************************************
**
函数名称:
sendstr
**
功能描述:
发送字符串函数
**

入:无
**

出:

**

明:

****************************************************/
void
sendstr(unsigned
char
*s)
{
while(*s!='\0')
{
sendbyte(*s);
s++;
}
}
/***************************************************
**
函数名称:
main
**
功能描述:
主函数
**

入:无
**

出:

**

明:

****************************************************/
void
main
(void)
{
uart_init();
//-----串口初始化
while(1)
{
if(temp=='h'&&'i')
{
temp=0;
sendstr("hello");
}
}
}
/***************************************************
**
函数名称:
uart_ser
**
功能描述:
串口中断服务子函数
**

入:无
**

出:

**

明:

****************************************************/
void
uart_ser
(void)
interrupt
4
//-----串行中断服务程序
{
if(ri)
//-----判断是接收中断产生
{
ri=0;
//-----标志位清零
temp=sbuf;
//-----读入缓冲区的值
}
}

㈥ 电脑上怎么做一个上位机程序 用c语言可以做吗

c语言应该很麻烦,编写带界面的程序,最好用C++,C#比较好,非常好编。
楼主下载一个visual studio 2010吧,用着很爽。

㈦ 上位机用什么编程

上位机的编程语言很多啊,VC,C++,C#,VB,VB。NET等等,关键是看你熟悉哪种编程语言了,这几种语言都是面向对象的编程语言。VB入门比较容易,而且比较容易掌握,VB。NET是VB的升级版本,现在也比较流行。跟C有关的都需要有C语言的基础。

如果对上位机的控制要求不是很高的话,或者说对技术先进性上没有太高要求,建议用VB,比较好掌握!

(7)c上位机源码扩展阅读:

几种程序语言的区别:java语言、python语言、C语言、php语言。

1、java语言

java语言曾一度家喻户晓,如今虽然潮流已过,但java跨平台的优势以及强大的类库着实不容小觑,其他语言很难超越,java衍生除了非常多周边产品(如jsp),非常多的开源系统都是基于java(hadoop、hive、hbase、lucene等)。

java和c一样也是编译执行的语言,区别在于java编译出的字节码文件运行在一层java虚拟机之上,而虚拟机可以架设在各种操作系统上,所以java也就有了跨平台的优势,一处编译多处执行。

2、python语言

python的强大在于它的多功能性,既是解释执行,又可以编译成文件,既是脚本语言,又具有面向对象的所有性质,如今python开源的类库已经非常强大了,什么功能都有,python也成了大数据方向必要的工具。

3、C语言

C语言是编译执行的语言,是万物之源。linux下常用的编译器是gcc,c语言源代码可以直接被编译成可执行程序(机器码),被称为万物之源是因为各种语言都是用C语言写的,如java、php、python等。

4、PHP语言

PHP巨大的生态系统使得在未来几年里全世界需要大量的开发人员对其提供支持。排名前三的内容管理系统-WordPress、Drupal和Joomla都是使用PHP构建的,而且迄今大概有80%的网站运行在PHP之上。

㈧ 要个计算机与单片机的串口通信上位机C语言程序

兄弟,下面是我自己写的,希望给你帮助,把数据用Send_One_Uart()这个函数直接发送到串口就行了!最后求采纳,哈哈!

//-----头文件
#include<reg52.h>

//-----定义全局变量
unsigned char Temp;

/***************************************************
** 函数名称: UART_Init
** 功能描述: 串口初始化函数
** 输 入:无
** 输 出: 无
** 说 明: 无
****************************************************/
void UART_Init(void)
{
SCON = 0x50; //-----SCON: 模式 1, 8-bit UART, 使能接收
TMOD |= 0x20; //-----TMOD: timer 1, mode 2, 8-bit 重装
TH1 = 0xFD; //-----TH1: 重装值 9600 波特率 晶振 11.0592MHz
TR1 = 1; //-----TR1: timer 1 打开
ES = 1; //-----打开串口中断
EA = 1; //-----打开总中断
}

/***************************************************
** 函数名称: SendByte
** 功能描述: 发送字节函数
** 输 入:无
** 输 出: 无
** 说 明: 无
****************************************************/
void SendByte(unsigned char dat)
{
SBUF = dat;
while(!TI);
TI = 0;
}

/***************************************************
** 函数名称: SendStr
** 功能描述: 发送字符串函数
** 输 入:无
** 输 出: 无
** 说 明: 无
****************************************************/

void SendStr(unsigned char *s)
{
while(*s!='\0')
{
SendByte(*s);
s++;
}
}

/***************************************************
** 函数名称: main
** 功能描述: 主函数
** 输 入:无
** 输 出: 无
** 说 明: 无
****************************************************/
void main (void)
{
UART_Init(); //-----串口初始化

while(1)
{
if(Temp=='H'&&'i')
{
Temp=0;
SendStr("hello");
}
}
}

/***************************************************
** 函数名称: UART_SER
** 功能描述: 串口中断服务子函数
** 输 入:无
** 输 出: 无
** 说 明: 无
****************************************************/
void UART_SER (void) interrupt 4 //-----串行中断服务程序
{
if(RI) //-----判断是接收中断产生
{
RI=0; //-----标志位清零
Temp=SBUF; //-----读入缓冲区的值
}
}

㈨ 用C#语言开发上位机(来控制下位机比如了解下位机测量的温度湿度压力并控制下位机)要用到什么知识

这其实已经不仅是上位机的问题了,会同时牵涉到上下位机,最主要的一点就是你们要先确定一个通讯协议表,也就是上下位机时通讯用的协议,协议格式通常早都是由命令头、长度、内容、校验位、命令尾这几部分组成的(这个协议可以自己查资料确定一下,比较自由)。无论是上下位机都按规定的协议去发送数据就可以了。
这个弄好之后,就要根据你们用的接口来确定用哪种技术了,一般常见的上下位机通讯是用串口,涉及的知识主要是数据的转换(比如字符串或者数字转字节,或者字节转字符等等),这方面去找C#的串口调试工具源码就行了,基本上都有涉及)
用VB的话(这里说的是vb6,而不是vb.net),难度其实差不多的。如果你是指vb.net,它与c#基本上完全一样,二者代码可以用工具相互转换的。

㈩ c# 上位机控制欧姆龙plc的项目

搜一下FinsTcp.DLL/FinsUDP.DLL,欧姆龙的PLC用的就是这个协议的;

刚好有空,写段代码吧:

usingSystem.Collections.Generic;
usingSystem;
usingSystem.Linq;
usingSystem.Drawing;
usingSystem.Diagnostics;
usingSystem.Data;
usingSystem.Xml.Linq;
usingMicrosoft.VisualBasic;
usingSystem.Collections;
usingSystem.Windows.Forms;


usingSystem.Runtime.InteropServices;

namespaceComTest
{
publicpartialclassForm1
{
publicForm1()
{
InitializeComponent();


if(defaultInstance==null)
defaultInstance=this;
}

#regionDefaultInstance

;


publicstaticForm1Default
{
get
{
if(defaultInstance==null)
{
defaultInstance=newForm1();
defaultInstance.FormClosed+=newFormClosedEventHandler(defaultInstance_FormClosed);
}

returndefaultInstance;
}
set
{
defaultInstance=value;
}
}

staticvoiddefaultInstance_FormClosed(objectsender,FormClosedEventArgse)
{
defaultInstance=null;
}

#endregion

HostLink.PlcComPLC=newHostLink.PlcCom();//基于HostLink.DLL新建实例
HostLink.PlcCom.PlcMemoryCIO=HostLink.PlcCom.PlcMemory.CIO;
HostLink.PlcCom.PlcMemoryLR=HostLink.PlcCom.PlcMemory.LR;
HostLink.PlcCom.PlcMemoryDR=HostLink.PlcCom.PlcMemory.DR;
HostLink.PlcCom.PlcMemoryHR=HostLink.PlcCom.PlcMemory.HR;

boolEntLink;
longScanCount;
shortScanRet;
boolScanRun;

[DllImport("winmm.dll",ExactSpelling=true,CharSet=CharSet.Ansi,SetLastError=true)]
();


publicvoidForm1_Load(System.Objectsender,System.EventArgse)
{
shorti=0;
this.CenterToScreen();
cmbReadMry.Items.Add("CIO");
cmbReadMry.Items.Add("LR");
cmbReadMry.Items.Add("DR");
cmbReadMry.Items.Add("HR");
cmbWriteMry.Items.Add("CIO");
cmbWriteMry.Items.Add("LR");
cmbWriteMry.Items.Add("DR");
cmbWriteMry.Items.Add("HR");
cmbBitMry.Items.Add("CIO");
cmbBitMry.Items.Add("LR");
cmbBitMry.Items.Add("DR");
cmbBitMry.Items.Add("HR");
for(i=0;i<=15;i++)
{
cmbBit.Items.Add("Bit"+System.Convert.ToString(i));
}
cmbReadType.Items.Clear();
cmbReadType.Items.Add("INT16");
cmbReadType.Items.Add("UINT16");
cmbReadType.Items.Add("DINT32");
cmbReadType.Items.Add("HEX32");
cmbReadType.Items.Add("REAL32");
cmbReadType.Items.Add("BIN16");
cmbReadType.Items.Add("BCD16");
cmbReadType.Items.Add("BCD32");
cmbWriteType.Items.Clear();
cmbWriteType.Items.Add("INT16");
cmbWriteType.Items.Add("UINT16");
cmbWriteType.Items.Add("DINT32");
cmbWriteType.Items.Add("HEX32");
cmbWriteType.Items.Add("REAL32");
cmbWriteType.Items.Add("BIN16");
cmbWriteType.Items.Add("BCD16");
cmbWriteType.Items.Add("BCD32");
cmbReadMry.SelectedIndex=2;
cmbWriteMry.SelectedIndex=2;
cmbBitMry.SelectedIndex=0;
cmbBit.SelectedIndex=0;
cmbReadType.SelectedIndex=0;
cmbWriteType.SelectedIndex=0;
lstRead.Items.Clear();
txtWrite.Text="";
}

publicvoidbutLink_Click(System.Objectsender,System.EventArgse)
{
shortre=0;
stringrestr="";
re=PLC.ComLink(Convert.ToUInt16(txtStation.Text),Convert.ToUInt16(txtPort.Text),Convert.ToUInt32(txtRate.Text),7,2,HostLink.PlcCom.ParityType.Even,Convert.ToUInt16(txtDelay.Text),"DEMO");
txtReLink.Text=re.ToString();
if(re==0)
{
EntLink=true;
MessageBox.Show("PLC联接成功:"+restr);
}
else
{
EntLink=false;
MessageBox.Show("PLC联接失败:"+restr);
}
}

publicvoidbutClose_Click(System.Objectsender,System.EventArgse)
{
shortre=0;
if(!EntLink)
{
MessageBox.Show("还未与PLC建立联接!");
return;
}
re=PLC.DeLink();
txtReClose.Text=re.ToString();
}

publicvoidbutRead_Click(System.Objectsender,System.EventArgse)
{
shorti=0;
object[]RD=null;
RD=newobject[Convert.ToInt16(txtReadCnt.Text)];
if(!EntLink)
{
MessageBox.Show("还未与PLC建立联接!");
return;
}
intvar1=cmbReadType.SelectedIndex+1;
HostLink.PlcCom.DataTypetyp=(HostLink.PlcCom.DataType)var1;
switch(cmbReadMry.SelectedIndex)
{
case0:
ScanRet=PLC.CmdRead(Convert.ToUInt16(txtStation.Text),CIO,typ,Convert.ToUInt16(txtReadAdd.Text),Convert.ToUInt16(txtReadCnt.Text),refRD);
break;
case1:
ScanRet=PLC.CmdRead(Convert.ToUInt16(txtStation.Text),LR,typ,Convert.ToUInt16(txtReadAdd.Text),Convert.ToUInt16(txtReadCnt.Text),refRD);
break;
case2:
ScanRet=PLC.CmdRead(Convert.ToUInt16(txtStation.Text),DR,typ,Convert.ToUInt16(txtReadAdd.Text),Convert.ToUInt16(txtReadCnt.Text),refRD);
break;
case3:
ScanRet=PLC.CmdRead(Convert.ToUInt16(txtStation.Text),HR,typ,Convert.ToUInt16(txtReadAdd.Text),Convert.ToUInt16(txtReadCnt.Text),refRD);
break;
}
txtReRead.Text=ScanRet.ToString();
lstRead.Items.Clear();
for(i=0;i<=(RD.Length-1);i++)
{
if(!(RD[i]==null))
{
lstRead.Items.Add(RD[i]);
}
else
{
lstRead.Items.Add("0");
}
}
}


publicvoidbutWrite_Click(System.Objectsender,System.EventArgse)
{
shorti=0;
string[]temp=null;
object[]WD=null;
if(!EntLink)
{
MessageBox.Show("还未与PLC建立联接!");
return;
}
WD=newobject[Convert.ToUInt16(txtWriteCnt.Text)];
temp=txtWrite.Text.Split(' ');
for(i=0;i<=(WD.Length-1);i++)
{
if(i>(temp.Length-1))
{
WD[i]=0;
}
else
{
WD[i]=temp[i].Trim();
}
}
intvar1=cmbWriteType.SelectedIndex+1;
HostLink.PlcCom.DataTypetyp=(HostLink.PlcCom.DataType)var1;
switch(cmbWriteMry.SelectedIndex)
{
case0:
ScanRet=PLC.CmdWrite(Convert.ToUInt16(txtStation.Text),CIO,typ,Convert.ToUInt16(txtWriteAdd.Text),Convert.ToUInt16(txtWriteCnt.Text),refWD);
break;
case1:
ScanRet=PLC.CmdWrite(Convert.ToUInt16(txtStation.Text),LR,typ,Convert.ToUInt16(txtWriteAdd.Text),Convert.ToUInt16(txtWriteCnt.Text),refWD);
break;
case2:
ScanRet=PLC.CmdWrite(Convert.ToUInt16(txtStation.Text),DR,typ,Convert.ToUInt16(txtWriteAdd.Text),Convert.ToUInt16(txtWriteCnt.Text),refWD);
break;
case3:
ScanRet=PLC.CmdWrite(Convert.ToUInt16(txtStation.Text),HR,typ,Convert.ToUInt16(txtWriteAdd.Text),Convert.ToUInt16(txtWriteCnt.Text),refWD);
break;
}
txtReWrite.Text=ScanRet.ToString();
}

publicvoidbutScan_Click(System.Objectsender,System.EventArgse)
{
if(!EntLink)
{
MessageBox.Show("还未与PLC建立联接!");
return;
}
if(butScan.Text=="CycleR/W")
{
ScanCount=0;
ScanRun=true;
Timer1.Enabled=true;
butScan.Text="StopR/W";
}
else
{
ScanRun=false;
Timer1.Enabled=false;
butScan.Text="CycleR/W";
}
}

publicvoidTimer1_Tick(System.Objectsender,System.EventArgse)
{
Timer1.Enabled=false;
if(!ScanRun)
{
butScan_Click(null,null);
return;
}
inttim=System.Convert.ToInt32(timeGetTime());
if(!EntLink)
{
MessageBox.Show("还未与PLC建立联接!");
return;
}
//
butRead_Click(null,null);
if(ScanRet<0)
{
ScanRun=false;
return;
}
butWrite_Click(null,null);
if(ScanRet<0)
{
ScanRun=false;
return;
}
//
ScanCount++;
txtScanCnt.Text=ScanCount.ToString();
txtScanPrd.Text=(System.Convert.ToInt32(timeGetTime())-tim)+"ms";
Timer1.Enabled=true;
}


publicvoidbutBitTest_Click(System.Objectsender,System.EventArgse)
{
if(!EntLink)
{
MessageBox.Show("还未与PLC建立联接!");
return;
}
boolrd=false;
shortre=0;
switch(cmbBitMry.SelectedIndex)
{
case0:
re=PLC.Bit_Test(Convert.ToUInt16(txtStation.Text),CIO,Convert.ToUInt16(txtBitAdd.Text),Convert.ToUInt16(cmbBit.SelectedIndex),refrd);
break;
case1:
re=PLC.Bit_Test(Convert.ToUInt16(txtStation.Text),LR,Convert.ToUInt16(txtBitAdd.Text),Convert.ToUInt16(cmbBit.SelectedIndex),refrd);
break;
case2:
re=PLC.Bit_Test(Convert.ToUInt16(txtStation.Text),DR,Convert.ToUInt16(txtBitAdd.Text),Convert.ToUInt16(cmbBit.SelectedIndex),refrd);
break;
case3:
re=PLC.Bit_Test(Convert.ToUInt16(txtStation.Text),HR,Convert.ToUInt16(txtBitAdd.Text),Convert.ToUInt16(cmbBit.SelectedIndex),refrd);
break;
}
txtBitTest.Text=System.Convert.ToString(rd);
txtReBit.Text=re.ToString();
}

publicvoidbutBitSet_Click(System.Objectsender,System.EventArgse)
{
if(!EntLink)
{
MessageBox.Show("还未与PLC建立联接!");
return;
}
shortre=0;
switch(cmbBitMry.SelectedIndex)
{
case0:
re=PLC.Bit_Set(Convert.ToUInt16(txtStation.Text),CIO,Convert.ToUInt16(txtBitAdd.Text),Convert.ToUInt16(cmbBit.SelectedIndex));
break;
case1:
re=PLC.Bit_Set(Convert.ToUInt16(txtStation.Text),LR,Convert.ToUInt16(txtBitAdd.Text),Convert.ToUInt16(cmbBit.SelectedIndex));
break;
case2:
re=PLC.Bit_Set(Convert.ToUInt16(txtStation.Text),DR,Convert.ToUInt16(txtBitAdd.Text),Convert.ToUInt16(cmbBit.SelectedIndex));
break;
case3:
re=PLC.Bit_Set(Convert.ToUInt16(txtStation.Text),HR,Convert.ToUInt16(txtBitAdd.Text),Convert.ToUInt16(cmbBit.SelectedIndex));
break;
}
txtReBit.Text=re.ToString();
}

publicvoidbutBitRst_Click(System.Objectsender,System.EventArgse)
{
if(!EntLink)
{
MessageBox.Show("还未与PLC建立联接!");
return;
}
shortre=0;
switch(cmbBitMry.SelectedIndex)
{
case0:
re=PLC.Bit_Reset(Convert.ToUInt16(txtStation.Text),CIO,Convert.ToUInt16(txtBitAdd.Text),Convert.ToUInt16(cmbBit.SelectedIndex));
break;
case1:
re=PLC.Bit_Reset(Convert.ToUInt16(txtStation.Text),LR,Convert.ToUInt16(txtBitAdd.Text),Convert.ToUInt16(cmbBit.SelectedIndex));
break;
case2:
re=PLC.Bit_Reset(Convert.ToUInt16(txtStation.Text),DR,Convert.ToUInt16(txtBitAdd.Text),Convert.ToUInt16(cmbBit.SelectedIndex));
break;
case3:
re=PLC.Bit_Reset(Convert.ToUInt16(txtStation.Text),HR,Convert.ToUInt16(txtBitAdd.Text),Convert.ToUInt16(cmbBit.SelectedIndex));
break;
}
txtReBit.Text=re.ToString();
}


}

}
热点内容
c语言可逆素数 发布:2024-10-09 05:13:44 浏览:920
班级采访问题 发布:2024-10-09 04:45:44 浏览:497
单人地图脚本 发布:2024-10-09 04:45:32 浏览:754
易语言cf自瞄源码 发布:2024-10-09 04:36:14 浏览:121
安卓和苹果哪个更难修理 发布:2024-10-09 04:36:12 浏览:26
黎明觉醒安卓什么配置 发布:2024-10-09 04:32:05 浏览:127
助手autojs脚本 发布:2024-10-09 04:31:40 浏览:186
sql判断今天 发布:2024-10-09 04:19:35 浏览:943
拆分视频需要哪些配置 发布:2024-10-09 04:06:39 浏览:912
安装电脑网络需要哪些配置 发布:2024-10-09 03:57:28 浏览:963