ããŸãããæžãããŠããªãTKã䜿ã£ãŠå€ãã®æããããã£ãããšãããã«æããã«ãªããŸãããã誰ãããã®ééããäœããã®åœ¢ã§ç¯ãããšæãã®ã§ãããã«ã€ããŠæžãçç±ã¯ãããŸãããèœãšãç©Žã§ã¯ãªããæãäžè¬çãªçæã§ãã
ããŒããŠã§ã¢ã®èŠ³ç¹ãããã¯ãšã¹ãã®å¶åŸ¡éšåã¯æ¬¡ã®ãšããã§ãã
- ããã°ã©ã ãå®è¡ãããŠãããªãã¬ãŒã¿ãŒã®éšå±ã®ã¡ã€ã³ã³ã³ãã¥ãŒã¿ãŒ
- ããããã«5ã€ã®ã¹ããŒã«ãŒãæ¥ç¶ããã2æã®ãµãŠã³ãã«ãŒã
- ã»ã«ã³ãã¹ã¯ãªãŒã³ã§æ¥ç¶ããããã¬ã
- USBããCOMã€ã³ã¿ãŒãã§ãŒã¹ãžã®ã¢ããã¿ãŒã§ãã2ã€ã®USBãã€ãã¹ã«
- MODBUSã«ãã£ãŠå¶åŸ¡ããã調å åšãšãªã¬ãŒã®ããã¯
åæèšå®ã§ã¯ãã¿ã¹ã¯ã¯éåžžã«åçŽã«èŠããŸãããMODBUSã§ããŒã¿ãèªã¿åããMODBUSã§ããŒã¿ãæžã蟌ã¿ãå³ã®åã§é©åãªã¿ã€ãã³ã°ã§ãµãŠã³ããåçãã2çªç®ã®ç»é¢ã§ãããªãåçããŸããã å®è·µã瀺ããŠããããã«ãããã¯ãã¹ãŠããã»ã©é£ãããããŸããã ãããããããè¡ãæ¹æ³ãç解ããããšã¯ããã»ã©é£ãããããŸãã-ããã¯ããã»ã©äºçŽ°ã§ã¯ãããŸããã
MODBUS
MODBUSã¯å®éã«ã¯ç£æ¥çšé»åæ©åšã®æšæºéä¿¡ãããã³ã«ã§ãããTCPãŸãã¯comããŒããä»ããŠå®è£ ãããŠããŸãã ãããããTCPã§æ¥ç¶ãããããã€ã¹ãã¯ãšã¹ãã§äœ¿çšãããå Žåããã¹ãŠãå°ãç°¡åã«ãªãããããã§ãªããããããŸããã comããŒãã§ãªãã·ã§ã³ãååŸããŸããã ãã®ãããã³ã«ã®å©ç¹ã¯ãæšæºã§ããããšã§ãã çæ-ã·ãªã¢ã«ããŒããä»ããŠ9600ããŒã®é床ã§åäœããŸããããã«ãããæçµçã«åããŒãã§æ¯ç§çŽ20ãªã¯ãšã¹ãã«å¶éãããŸãã
ãã¹ãŠã®MODBUSããã€ã¹ã«ã¯ãããã€ãã®ã¬ãžã¹ã¿ã»ããããããŸãã ç§ã®å Žåããã©ã°ã¬ãžã¹ã¿ïŒããŒã«å€ãæ ŒçŽãæžã蟌ã¿å¯èœïŒãã¹ãã¬ãŒãžã¬ãžã¹ã¿ïŒæŽæ°ãæ ŒçŽãæžã蟌ã¿å¯èœïŒãå ¥åã¬ãžã¹ã¿ïŒæŽæ°ãæ ŒçŽãæžã蟌ã¿äžå¯ïŒã®3ã€ãå«ãŸããŠããŸããã ã¯ãšã¹ãã«ã¯3ã€ã®ãªã¬ãŒïŒã»ã³ãµãŒç¶æ ãæ¥ã8ã€ã®å ¥åã¬ãžã¹ã¿ãŒããªã¬ãŒãã£ãã«ãå¶åŸ¡ãã8ã€ã®ãã©ã°ïŒãšèª¿å åšã®æïŒå®éã«ã¯5ã€ã®ã¹ãã¬ãŒãžã¬ãžã¹ã¿ã䜿çšãã4ã€ã¯ãã£ãã«ã®èŒåºŠãå¶åŸ¡ãã5ã€ç®ã¯å šäœã®èŒåºŠïŒããããŸããã
ããã§ã¯ãé»åæè¡è ã«ããæèœãªèšç»ãéåžžã«éèŠã§ãã ãŸããã¢ã¯ãã£ãã«èšé²ããŠããããã€ã¹ãšã¢ã¯ãã£ãã«èªã¿åã£ãŠããããã€ã¹ãç°ãªãããŒãã«ãã³ã°ããŠããããšãéåžžã«æãŸããã§ãã ç§ã®å Žåãããã¯è¡ããã1ã€ã®ããŒãã«ã¯èª¿å åšãããã2çªç®ã®ããŒãã«ã¯ãªã¬ãŒããããŸããã 第äºã«ãåæèšé²ãããã€ãã®ããã€ã¹ã«é »ç¹ã«è¡ãå Žåããããã¯é£æ¥ãããã£ã³ãã«ã§ãã³ã°ããå¿ èŠããããããã¯ãã©ãã«ãçºçããå Žæã§ããå€ãã®å Žåãäžç·ã«çããã©ã€ããç°ãªã調å åšã«ãã³ã°ããããã€ãã®ãªã¯ãšã¹ããéä¿¡ããªããã°ãªããªãããã§ã貎éãªåž¯åå¹ ã
MODBUSãã±ãããæåã§äœæããããšããããããªæ¬²æ±ãæããªãã£ããããæçµçã«libmodbusã©ã€ãã©ãªã䜿çšããŸãããããã¯éåžžã«äŸ¿å©ã§å®å®ããŠåäœããŸãã qModMasterãããžã§ã¯ãã¯ãèªã¿æžãã®åºæ¬æ©èœãå®è£ ããããããã°ã«HHD Free Serial Virtual PortsïŒãã®ç¡ææ©èœã¯ååãããã»ã©ïŒãšDiagSlave Modbus Slave Simulatorã䜿çšããŠéåžžã«åœ¹ç«ã¡ãŸããã ãã¡ãããModbusããŒã«ãããã®Modbus Slaveã¯ã¯ããã«äŸ¿å©ã§ããã1ãæéç¡æã§äœ¿çšãããšã«ããã£ã«å€ãããŸãã1ã€ã®ãããžã§ã¯ãã®ããã«è³Œå ¥ãããã¯ãããŸããã§ããã
MODBUSã䜿çšããéã«ç解ããŠããã¹ãéèŠäºé ïŒ
1.åããŒããåå¥ã®ã¹ã¬ããã«åŠçããŸãã ã»ãšãã©ã®å ŽåãããŒãã1ã€ãããªãå Žåã§ããããŒãã®åž¯åå¹ å šäœã䜿çšãããå Žåã¯ãè¿œå ã®ã¹ã¬ãããªãã§ããžã¥ã¢ã«ã€ã³ã¿ãŒãã§ã€ã¹ãæäœããããšã¯ã§ããŸããã
2.ãã¥ãŒã€ã³ã°ã·ã¹ãã ãšåªå é äœãèããŸãã æçµçã«ã¯ãããŒããåŠçããã¯ã©ã¹ã«ãæžã蟌ã¿ãã¥ãŒãšèªã¿åããã¥ãŒã®2ã»ããã®ãã¥ãŒããããŸãã èšé²ã§ã¯ãæåã®ãã¥ãŒã¯å®äºããå¿ èŠããã1åéãã®ã¿ã¹ã¯ã«å²ãåœãŠãããŸãïŒããšãã°ããªã¬ãŒãéãã/éãïŒãæ®ãã®ãã¥ãŒã¯ç¹å®ã®ããã€ã¹ã§ãããå€ã®é·ãã·ãŒã±ã³ã¹ãæžã蟌ãå¿ èŠãããç¶æ³ã§äœ¿çšãããŸããããã¹ãŠæžã蟌ãŸããããšã¯éèŠã§ã¯ãããŸããïŒããšãã°ã調å åšå¶åŸ¡ã©ã³ãã®ç¹æ» ã¯ãã®æ¹æ³ã§å®è£ ãããŸãïŒãåèªã¿åããã¥ãŒã«ã¯ç¹å®ã®ããã€ã¹ããã®èªã¿åãèŠæ±ãå«ãŸããŸãã èªã¿åãåªå 床ãèšå®ãããŠããŸããé©å¿ã¡ãœãããæãä»ãããã«ã¹ã¿ã ãã¥ãŒãã³ã°ã®å¿ èŠããªããããå®æ°ãšããŠã³ãŒãã«æ¿å ¥ããŸããã èªã¿åãåªå é äœãšã¯ãèªã¿åããã¥ãŒãšæžã蟌ã¿ãã¥ãŒã®äž¡æ¹ã«ãžã§ããããå ŽåãXã®æžã蟌ã¿æäœããšã«1ã€ã®èªã¿åãæäœãä¿èšŒãããããšãæå³ããŸãã
èªã¿åã/æžã蟌ã¿ãã¥ãŒå ã§ã¯ãå転ã·ã¹ãã ã䜿çšãããŸãã ã¿ã¹ã¯ã¯æåã®æ®µéããååŸããã次ã«2çªç®ã®æ®µéããå®è¡ãããŸãããã®åŸãåãç¹°ãè¿ãããŸãã é²é³ãã¥ãŒã®å Žåãããã¯å¥ã®ãã¥ã¢ã³ã¹ã«ã€ãªãããŸãããåžžã«æåã®ã¿ã¹ã¯ãå®è¡ãããšããã¥ãŒãå®äºããæéã¯ãã¥ãŒã®æ°ã«æ¯äŸããŠé·ããªããŸãã ãã®ãããªç¶æ³ã§ã¯ãããŒãã®è² è·ã«å¿ããŠãåããã¥ãŒã®é·ãã§ã©ã³ãã10ç§éãã¬ã¢ã¢ããããããšãå®çŸããããšã¯äžå¯èœã§ããã10ç§éã1åéã2ç§éãã¬ã¢ããããšãã§ããŸãã 幞ããªããšã«ããã®ã¿ã¹ã¯ã¯éåžžã«ç°¡åã«è§£æ±ºãããŸãããã¥ãŒããã¿ã¹ã¯ãå®äºãããšãããããã¿ã¹ã¯ãååŸããåã«ããã¥ãŒã®æ°ã ãã¿ã¹ã¯ãç Žæ£ããŸãïŒåœç¶ããã¹ãŠã®ã¿ã¹ã¯ãå®è¡ãããéžæãããæåã®ã¹ããŒãžã®å Žåãé€ããŸãïŒã
3.äžèŠãªã¢ã¯ã·ã§ã³ãå®è¡ããªãã§ãã ããã ã»ã³ãµãŒãå¿ èŠãªãå Žåã¯ãã»ã³ãµãŒããèªã¿åããªãã§ãã ãããã»ã³ãµãŒããã®ã¢ã¯ãã£ããŒã·ã§ã³ä¿¡å·ãåŸ ã£ãŠããŠã2çªç®ã®ã»ã³ãµãŒãå¿ èŠãªãå Žåã¯ããã®ã»ã³ãµãŒã«é¢é£ãããã¹ãŠã®ã¿ã¹ã¯ããã¥ãŒããæ¶å»ããŸãã ããªããç²æ«ãªããã«èãããŸãããããŒããŠã§ã¢ã§ã®æåã®ãã¹ãäžã«ããã¥ãŒãèç©ãããããã«ãå¿ èŠãªã»ã³ãµãŒããªã³ã«ãªã£ãŠããçŽ5ååŸã«å°åããå§ããç¶æ³ã«çŽé¢ããŸããã ããããããããç§ã¯ãŸã èªæžã®ããã®å転ç·ãæã£ãŠããŸããã§ããã
4.ã©ã€ãã®æãããå¶åŸ¡ããå Žåã調å åšã«ã¯256é調ã®æãããããããšãããããŸããã0ãã1ã1ãã10ãããã³64ãã255ãžã®å€åã¯ãèåããå ãŸãã¯æ»ãããªçŒãä»ããè¡ãå¿ èŠããããšãã¯ã»ãŒåãã§ãïŒãŸã çå®ã¯æ®µéçã§ãïŒãããèæ ®ã«å ¥ããªããã°ãªããŸããã
é³
圌ãã¯ãç¹å®ã®ãã£ã³ãã«ã§ãµãŠã³ããåçãããšè¿°ã¹ãã 圌ãã¯ç°¡åã ãšåœŒãã¯èšã£ãã
ããããããã®ã¿ã¹ã¯ã®äžã§ãé³ã»ã©ç§ãããã¯ããŠã³ãããã®ã¯ãªãã§ãããã ãµãŠã³ãã«ãŒããéžæããã®ã¯åé¡ãããããªããšæã£ãŠããŸããããå³å¯ã«å®çŸ©ããããã£ã³ãã«ã§ãµãŠã³ããåçããŠä»ã®ãã£ã³ãã«ã«æŒããªãããã«ããããšã¯ããã»ã©äžè¬çã§ã¯ãªããšæããŸããã
QtããŒã«ã¯ããã«å§¿ãæ¶ããŸããããã®ã©ã€ãã©ãªã«ã¯ããã«è¿ããã®ãããããŸããã ãµãŠã³ãã©ã€ãã©ãªã調ã¹ãŠã¿ããšãæ®éã®äººã¯3次å ã®ã·ãŒã³ãäœæãã移åãããµãŠã³ããœãŒã¹ãå²ãåœãŠãå¿ èŠããããŸãããç¹å®ã®åã§åçããå¿ èŠã¯ãªãããšãããããŸããã
æåã«å®çŸãããªãã·ã§ã³ã¯ãéåžžã«æ±ãããã¯ã®ããã«ãç§ã®äžã«ãããŸãã åäžãã£ãã«ã®wavãã¡ã€ã«ãååŸããŠãœãŒãããæ°ããwavãã¡ã€ã«ãäœæããŸããããã£ãã«ã®æ°ã¯8ãšããŠç€ºããããµã³ãã«ã¯æ£ãããã®ã«æžã蟌ãŸããæ®ãã¯ãŒãã«ãªããŸãã ãã®ã¢ãããŒãã®æ¬ ç¹ã¯éåžžã«æçœã§ãããä»ã®åœ¢åŒã§ã®ãµãŠã³ãã®è§£æã¯éåžžã«è€éã§ãããwavãã¡ã€ã«å ã®ã©ã®ãã£ãã«ãã©ã®åã«è¡ããã«ã€ããŠã®åäžã®æšæºã¯ãããŸããïŒã€ãŸãããµãŠã³ãã«ãŒããå€æŽãããšããã¹ãŠãåæ§æããå¿ èŠããããããããŸããïŒå¥ã®ãã£ã³ãã«ã§åçããããšãã ãã®ãªãã·ã§ã³ã¯äœãšãæ©èœããŸããããççŽã«èšã£ãŠç§ã«ã¯åãããæ€çŽ¢ãç¶ããŸããã æ€çŽ¢ã¯å ±ãããŸãããç§ã¯unsseenéçºããBASSã©ã€ãã©ãªãèŠã€ããŸããã ãã®çŸããã©ã€ãã©ãªã§ã¯ããµãŠã³ããåçãããšãã«ãç®çã®ãã£ã³ãã«ãèšå®ããã ãã§ç®çã®å¹æãåŸãããšãã§ããŸãã ãã¡ãããããã«ãèœãšãç©ŽããããŸãã
ãŸãããµãŠã³ãã®åçã¯å¥ã®ã¹ããªãŒã ã§è¡ãããå¿ èŠããããŸãããã©ã€ãã©ãªã§ã¯è¡ãããŸããã
次ã«ããµãŠã³ãã«ãŒããã©ã€ããŒã®ãã¹ãŠã®çš®é¡ã®ä»®æ³3Dã·ãŒã³ïŒDFXãªã©ã®ãµãŠã³ãã®ãã¹ãŠã®çš®é¡ã®èª¿æŽãå«ãïŒã泚ææ·±ãç£èŠããã³ç¡å¹ã«ããå¿ èŠããããŸãããã®ãããªèšå®ã®ååšã¯ããã£ã³ãã«å šäœã«é³ãæ±ããŸãäžè¬çã«ãã¹ãŠïŒã
第äžã«ãBASSã«ã¯ææžåãããŠããªãå°ããªæ©èœããããŸãã ããŒã¹ã©ã€ãã©ãªã®ã¿ã䜿çšããå Žåããã®æ¹æ³ã§1ã€ã®ãã£ãã«ã§åçã§ããŸããããµãŠã³ããè€æ°ã®ãã£ãã«ã«ããã¯ã¹ããããšã¯ã§ããŸãããè€æ°ã®ãã£ãã«ã®ãã©ã°ãé©çšããããšãããšãã©ã€ãã©ãªã«ãããã®èšå®ãç¡èŠãããŸãã 幞ããªããšã«ããã®åé¡ã¯åãéçºè ã®BASSmixã©ã€ãã©ãªã䜿çšããŠè§£æ±ºãããŠããŸãã è€æ°ã®ãã£ã³ãã«ã§ã®æçµçãªåçïŒãã ããåãzvukovuhiå ïŒã¯æ¬¡ã®ããã«ãªããŸã
bool res = BASS_SetDevice(device_);//device_ - if(!res) { int code = BASS_ErrorGetCode(); if(code == BASS_ERROR_INIT) BASS_Init(device_, 44100, BASS_DEVICE_SPEAKERS, 0, 0); else { // } } mixer_ = BASS_Mixer_StreamCreate(44100, 8, BASS_MIXER_END); if(mixer_ == 0) { // } for(uint j = 0; j < channel_.size(); j++) { HSTREAM chan = BASS_StreamCreateFile(false, path_.toLocal8Bit().data(),0,0,BASS_STREAM_DECODE|BASS_SAMPLE_MONO);// - res = BASS_Mixer_StreamAddChannel(mixer_, chan, channel_[j]); //channel_ - channels_.push_back(chan); if(!res) { // } } res = BASS_ChannelPlay(mixer_, true); if(!res) { // }
æ å
ãããªã®åçãã顧客ã®èŠä»¶ã«é¢é£ããããã€ãã®åé¡ã«é¢é£ããŠããããšãå€æããŸããã ãã¬ãã¯ã¯ãšã¹ãã«æèŒãããŠãããç»é¢ã®æèŠãåŒãèµ·ãããªãã¯ããªã®ã§ããŠã£ã³ããŠãã¡ãã€ããªãããšãéèŠã§ãããããããªã¯ããã«åçãéå§ããŸããã æ®å¿µãªãããç§ã¯ãŸã ãã®åé¡ãå®å šã«è§£æ±ºã§ããŠããŸããã
æåã®ãªãã·ã§ã³ã¯Qtã䜿çšããŠå®è£ ãããŸããã äžè¬çã«ã圌ã¯ãã¹ãŠé 調ã§ãããQDesktopWidgetã䜿çšããŠãé»ã§ãã€ã³ããããåQVideoWidgetãäœæããQMediaPlayerã䜿çšããŠãããªãåºåãå§ããŸããã ãã¹ãŠãæ£åžžã§ãã¢ãŒãã£ãã¡ã¯ããã¡ãã€ãããããŸããã§ããããæ®å¿µãªããQt5.5ã§ã¯ããããªã®åçããã€ããã³ã°ããããšããããŸãã äžèŠåã§ãäºæž¬äžèœã§ã宣æŠåžåãªãã ãããŠãããã¯ãã ãã³ã°ãããªããŒãåŸã«ã®ã¿æ¶ããéæ¹ããªã声ã®æŒæã§é³ãè©°ãŸãããŸãã ãã®ãã°ãQt 5.6ã§è§£æ±ºããããã©ããã¯ããããŸãããããã©ãŒã©ã ã§å€æãããšããããªã®åçæã«å¥ã®ãã°ãçºçããå°éå¯èœãªãã¹ãŠã®ããã»ããµãªãœãŒã¹ã䜿ãæãããŠããŸããŸãã
å¥ã®ã©ã€ãã©ãªããã°ããèŠã€ããããšãã§ããŸããã§ããïŒèªåã§ãã¬ãŒã ã·ãŒã±ã³ã¹ã解æãããµãŠã³ããããããšåæãããããšããããããªæ¬²æ±ãæããŸããïŒããã®ãããã³ãã³ãã©ã€ã³ããèµ·åããããã®éåžžã«åŒ·åãªããŒã«ãæäŸããVLC PlayerãéžæããŸããã ãã©ã°ã®æçµã»ããã¯æ¬¡ã®ãšããã§ãã
--qt-minimal-view --no-qt-fs-controller --qt-start-minimized --qt-fullscreen-screennumber = n --fullscreen --play-and-exit --no-osd --no -qt-bgconeãã¡ã€ã«å
ãã®ããŒã®ã»ããã䜿çšãããšããã¬ãŒã€ãŒã¯æå°åãããŠèµ·åãïŒãŠã£ã³ããŠãç»é¢äžã§ã¡ãã€ããŸããïŒããããªãå±éããŠç®çã®ãã£ã¹ãã¬ã€ã§å šç»é¢è¡šç€ºããã³ã³ãããŒã«ãšãã¡ã€ã«åã衚瀺ãããåçã®æåŸã«ããã°ã©ã ãçµäºããŸãã
ãã®æåŸã®æç¹ã§ããŸã 解決ãããŠããªãåé¡ãçºçããŸããã ã¯ãšã¹ãã®ã€ãã³ãã®äžéšã¯ãããªåçã®æåŸã«çºçããQProcessã®æåŸã§ã®ã¿ãµãŒãããŒãã£ããã°ã©ã ã§åçã®çµããã远跡ã§ãããããåçã®æåŸã§çµäºããå¿ èŠããããŸãããããã°ã©ã ãçµäºãããšãã¢ãŒãã£ãã¡ã¯ãã®æãæã€æåŸã®ãã¬ãŒã ã0.5ç§é衚瀺ãããå šäœãå°ç¡ãã«ãªããŸãåçã ãããŸã§ã®ãšãããç§ã¯é¡§å®¢ã«ãããªãåããŠã³ãããããã«æåŸ ããŸããã1ã2ç§ã®çµããã«é»ããè¿œå ããŸããã¢ãŒãã£ãã¡ã¯ãã¯è¡šç€ºãããªãã¯ãã§ãããäœãèµ·ãããèŠãŠã¿ãŸãããã
ãã®ã¡ãœããã䜿çšãããã1ã€ã®æ©èœã¯ãQtãQDesktopWidgetsãŸãã¯QScreenã®ãªã¹ããåãåããšãã·ã¹ãã å ã®ç»é¢ã®çªå·ä»ãã«é¢ä¿ã®ãªãããçš®ã®é åºã§ãœãŒãããããŒã®VLC --qt-fullscreen-screennumber = nã¯ã·ã¹ãã çªå·ã®ã¿ãå¿ èŠãšããŸãïŒãã ãã1ããã§ã¯ãªã0ããçªå·ãä»ããããŸãïŒã®ã§ãæçµçã«QScreenãªã¹ããååŸããããã€ã¹åããç»é¢çªå·ãåãåããŸãïŒãããããVLCã®çªå·ãååŸããããã«ãŠããããæžç®ããŸããïŒããã®ãããªãã®
QList<QScreen*> screens = QGuiApplication::screens(); for(int j = 0; j < screens.size(); j++) { QString name = screens[j]->name()+" [" +QString::number(screens[j]->size().width())+"x" +QString::number(screens[j]->size().height())+"]"; int num = screens[j]->name().section("DISPLAY",-1).toInt(); ui->videoDeviceList->addItem(name, screens[j]->name().section("DISPLAY",-1)); }
ç»é¢ã¯DISPLAY1ãDISPLAY2ãªã©ãšåŒã°ããªãããããã®æ¹æ³ã¯* nixã·ã¹ãã ã§ã¯åäœããªããšæãããŸãããããã°ã©ã ã¯Windowsã§çŽç²ã«éçºãããä»ã®ã·ã¹ãã ã§ã¯å®è¡ãããªãããããã€ã³ããããããŸããã