全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1846
推到 Plurk!
推到 Facebook!

關於RS232跟CSR230馬達控制器連接問題

尚未結案
jacken00
一般會員


發表:4
回覆:7
積分:2
註冊:2004-11-02

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-10-19 12:03:58 IP:210.59.xxx.xxx 未訂閱
各位先進大家好 小弟遇到問題瓶頸了 主要問題如下 我使用 BCB寫一個RS232通訊可以下命令給馬達控制卡讓它動作 可是不知為何 有時候下命令 馬達會正常轉動 有時候卻只接受第一次所下之命令 讓小弟困惑不已 希望各位先進 可以解答在下問題 感激不進    
#include 
#include 
#pragma hdrstop    #include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)    #pragma resource "*.dfm"    TForm1 *Form1;
HANDLE hComY;
DWORD dwError;
BOOL fSuccess;
DCB dcb;
byte sread[1];    int send=0;
int reve=0;
int j=0;
char STX=0x02,ETX=0x03,CR=0x0D,LF=0x0A,SOH=0x01,ACK=0x06,SYN=0x16,FF=0x0C,ENQ=0x05;    //---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------    void __fastcall TForm1::FormCreate(TObject *Sender)
{
hComY = CreateFile("COM2",
                GENERIC_READ | GENERIC_WRITE,
                0,    // comm devices must be opened w/exclusive-access
                NULL, // no security attrs
                OPEN_EXISTING, // comm devices must use OPEN_EXISTING
                0,    // not overlapped I/O
                NULL  // hTemplate must be NULL for comm devices
                );
         if (hComY == INVALID_HANDLE_VALUE)
         {
                dwError = GetLastError();
         }
         fSuccess = GetCommState(hComY, &dcb);             if (!fSuccess)
         {
         }
         dcb.BaudRate = 9600;
         dcb.ByteSize = 8;
         dcb.Parity = NOPARITY;
         dcb.StopBits = ONESTOPBIT;
         fSuccess = SetCommState(hComY, &dcb);
         if (!fSuccess)
         {
                ShowMessage("Error");
         }
         COMMTIMEOUTS  commtimeouts;
         commtimeouts.ReadIntervalTimeout         = 0;
         commtimeouts.ReadTotalTimeoutMultiplier  = 0;
         commtimeouts.ReadTotalTimeoutConstant    = 500;
         commtimeouts.WriteTotalTimeoutMultiplier = 0;
         commtimeouts.WriteTotalTimeoutConstant   = 500;             SetCommTimeouts(hComY, &commtimeouts);      Memo1->Lines->Clear();
  Memo2->Lines->Clear();
  Edit1->Text = 0;
  Timer2->Enabled =false;
  Timer3->Enabled =false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button4Click(TObject *Sender)
{      char Data[256];
  DWORD Length;
   sprintf(Data,"%s%c%s%c","SET P1",CR,"XMR -500",CR);
   WriteFile(hComY,Data,255,&Length,0);
   Memo2->Lines->Add(Data);
}
//---------------------------------------------------------------------------    void __fastcall TForm1::Button5Click(TObject *Sender)
{
  char Data[256];
   DWORD Length;
   //sprintf(Data,"%s%c%s%c","SET P1",CR,"XMR 500",CR);
   sprintf(Data,"%c%s%c%c",SOH,"XMR 500",CR,LF);
   WriteFile(hComY,Data,255,&Length,0);
   Memo2->Lines->Add(Data);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button13Click(TObject *Sender)
{       char Data[256];
   DWORD Length;
   sprintf(Data,"%c%s%c%c",SOH,"SET P1",CR,LF);
   WriteFile(hComY,Data,255,&Length,0);
   Memo2->Lines->Add(Data);
}
//---------------------------------------------------------------------------    void __fastcall TForm1::Button12Click(TObject *Sender)
{
Memo1->Lines->SaveToFile("1.txt");
}
//---------------------------------------------------------------------------    
HI ALL
------
HI ALL
jacken00
一般會員


發表:4
回覆:7
積分:2
註冊:2004-11-02

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-10-28 10:45:19 IP:210.59.xxx.xxx 未訂閱
不好意思 我已經抓到解答了 其實問題很簡單 那就是在傳送字串的時候位元數要算清楚 譬如說 "SET P1" CR(結束字元) 一共七個字元(空格也算) 如果傳送字元設定為七個字元就不會出問題了 感謝各位看完這問題 小弟已經抓到問題瞜 多謝各位先進 HI ALL
------
HI ALL
系統時間:2017-10-22 14:12:50
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!