當前位置:首頁 » 操作系統 » 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();
}


}

}
熱點內容
unturned怎麼不進伺服器聯機 發布:2024-10-09 07:24:17 瀏覽:392
javaoracle 發布:2024-10-09 07:23:32 瀏覽:559
安卓系統總是被殺後台怎麼辦 發布:2024-10-09 07:11:31 瀏覽:304
花雨庭伺服器如何全屏 發布:2024-10-09 06:39:28 瀏覽:213
密碼查看器怎麼使用 發布:2024-10-09 06:38:55 瀏覽:495
sqlrownum 發布:2024-10-09 06:28:53 瀏覽:383
F模塊驅動器編譯錯誤 發布:2024-10-09 06:06:21 瀏覽:636
腳本亞索集錦 發布:2024-10-09 05:53:30 瀏覽:877
安卓手機格式化後為什麼打不開 發布:2024-10-09 05:52:58 瀏覽:511
雲伺服器可以超級計算機嗎 發布:2024-10-09 05:51:33 瀏覽:17