1

Téma: RS 485

Budu posílat data ( modbus) na 485. Zatím jsem ke 485 ve full C našel jen toto:

 void SDS_serial_config(unsigned int busID, unsigned int BaudRateCfg, unsigned int DataSizeCfg, unsigned int StopBitsCfg, unsigned int ParityCfg);
 void SDS_serial_writeCH(unsigned int busID, unsigned char writeChar);
 void SDS_serial_write(unsigned int busID, char *ptr, unsigned int len);
 unsigned int SDS_serial_read(unsigned int busID, char *ptr, unsigned int maxlen);

a z jiného odstavce dedukuji, že 485 je na COM1. Přesto prosím o ukázku zápisu řetězce hex znaků na RS 485 - ať se zbytečně netrápím.

2

Re: RS 485

Myslím že je to z dokumentace jasné - a praktickému vyzkoušení se člověk stejně nikdy nevyhne.

void main(void)
{
   
  char prikaz[8];
  char odpoved[8];

  int i;

  // Inicializace linky 485 = COM1 na 9800bps 8n1
  SDS_serial_config(1, 9600, 8, 1, 0);

  // poslat 8 bajtu ven

  prikaz[0] = 'a';
  prikaz[1] = 'b';
  prikaz[2] = 'c';
  prikaz[3] = 'd';
  prikaz[4] = 'e';
  prikaz[5] = 'f';
  prikaz[6] = 'g';
  prikaz[7] = 'h';
  SDS_serial_write(1, prikaz, 8);

  // pro tento priklad . . .
  wait(1000);

  // precist 8 bajtu ze vstupniho bufferu (pokud tam nejake budou)

  i = SDS_serial_read(1, odpoved, 8); 
  printf("read %d bytes\n", i);

  // obsah pole odpoved[] obsahuje data poskytnuta funkci SDS_serial_read
  
}

Výstup dat je prakticky okamžitý, a po celou dobu výstupu dat je aktivován RS485 master transmit (platí pro COM1).

Příjem dat z COMx funguje tak, že všechna přicházející data se umisťují do vyrovnávacího bufferu (fifo), a čekají tam až si je FULL-C program vyzvedne (SDS_serial_read). Díky tomu nedochází ke ztrátě dat ani při vysokých rychlostech sériové linky. Jen pozor na omezenou velikost tohoto bufferu, pokud se přeplní (tj. FULL-C neodebírá data, ale přitom z venku stále přicházejí), tak jsou tato data navíc zahozeny. Ale to už je jen detail pro úplnost.

Pochlubte se - popište jak využíváte své zařízení SDS zde ! Můžete si bezplatně přidat svou reklamu !

3

Re: RS 485

Funguje to díky.
Ještě se chci zeptat: moje ( čínské)  modbusové moduly po každém příkazu vysílají automaticky odpověď, kterou nebudu většinou číst. Jakým příkazem vymazat  buffer, aby se mi nepřeplnil a byl připraven přečíst odpověď na dotaz, když nějaký vyšlu.

4

Re: RS 485

Před odesláním příkazu, po kterém bude chtěno přečíst odpověď, stačí celý vstupní buffer přečíst a tím jeho případný obsah zahodit; zbyde tak celý prázdný a tím pádem připravený pro příchozí odpověď.

Pochlubte se - popište jak využíváte své zařízení SDS zde ! Můžete si bezplatně přidat svou reklamu !